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).
banner-gen — per-post banner/hero image generator
Generates a branded 1600×900 (16:9) banner image for a blog post — shown at
the top of the article, above the title. Matches the site's cobalt-blue
branding and the "terminal / debugging" visual language (siblings with
scripts/og-gen/, which produces the 1200×630 social-share image).
Usage
node scripts/banner-gen/generate.mjs <post-slug>
Reads the post's category from frontmatter, fills template.html, renders
with headless Chrome, and writes public/banners/<slug>.png.
Then add banner: /banners/<slug>.png to the post frontmatter (en + zh) —
[...slug].astro renders it above the H1 title.
Customizing content
Each post's banner content lives in BANNERS in generate.mjs, keyed by
slug, with three parts:
titlebar— the terminal window's title-bar textlines— terminal body rows:{ t, text }wheret∈cmd·dim·err(red) ·ok(green) ·hl(amber) ·prompt($)flow— bottom pipeline steps:{ n: '1', label: '...', err?: true }
No entry → a generic default banner.
Requirements
- Google Chrome at
C:\Program Files\Google\Chrome\Application\chrome.exe(CHROME_PATHto override). - Node 20+.
Relationship to og-gen
- og-gen →
public/og/<slug>.png(1200×630, 2:1) for social sharing. - banner-gen →
public/banners/<slug>.png(1600×900, 16:9) for the article hero. The banner is a "filled" visual (terminal + flow pipeline), not a poster — avoid large empty margins.