Deploy / build (push) Successful in 19s
Three new posts (EN + ZH twins, og + banner each): - n8n-v1-to-v2-upgrade-gotchas (devops): the seven deprecations that surfaced upgrading 1.123.x → 2.40.1, decoded from the boot log — telemetry schema rejection, N8N_WEBHOOK_URL rename, internal runner deprecation, task timeout 300s→60s, two compression limits, v3 storage rename, plus the DB override that silently disabled the AI sandbox. - self-healing-digital-goods-entitlements (case-studies): the W1–W5 NocoDB → n8n → AList entitlement lifecycle. Build-time code sharing for n8n Code nodes, MAX-expiry semantics, dry-run safety, daily drift repair, CORS-not-HMAC reasoning, and the public→internal NocoDB cascading-failure fix (504 → retry storm → 503). - running-tts-as-a-service-with-token-sidecars (ai): a year-long TTS service built on two cron containers that refresh Azure/Google tokens into a shared file, with the speed/voice mapping layer. banner-gen: center terminal body vertically so line counts shorter than the fixed 690px panel don't leave a dead void at the bottom. Verified via DOM measurement (gapAbove 104 / gapBelow 106).
og-gen — per-post OG image generator
Generates a branded 1200×630 social-share image for a blog post, matching the
site's cobalt-blue #295cff branding, the logo-square.png mark, and the
"terminal / debugging" visual style.
Usage
node scripts/og-gen/generate.mjs <post-slug>
Reads frontmatter (title, category, tags) from
src/content/posts/<slug>.md, fills template.html, renders with headless
Chrome, and writes public/og/<slug>.png.
The post's frontmatter needs ogImage: /og/<slug>.png so the blog serves it
(layout already renders og:image + width/height; PostList shows it as a
card thumbnail).
Customizing the terminal box
Each post shows a "terminal" panel (the red error / green fix lines). Add an
entry keyed by slug in TERMINALS inside generate.mjs, using these tokens:
<div class="line"><span class="prompt">$</span><span class="cmd">command</span></div>
<div class="line"><span class="prompt"> </span><span class="err">error line</span></div>
<div class="line"><span class="prompt">$</span><span class="cmd">fix</span><span class="fix">→ done ✓</span></div>
No entry → a generic default terminal.
Requirements
- Google Chrome at
C:\Program Files\Google\Chrome\Application\chrome.exe(override withCHROME_PATHenv var). - Node 20+.
Notes
- PNG (not JPG) is intentional: for flat UI/terminal art, PNG is smaller and sharper than JPG (see commit history).
- The
logo-square.pngreferenced lives atpublic/logo-square.png.