Deploy / build (push) Successful in 15s
New `devops` post on vetting an upstream dependency before building on it: the six checks that corrected six assumptions from a 1,306-line architecture spec — repo vital signs via the GitHub API, grepping for the feature instead of reading for it (OIDC/SSO/SAML → 0 hits), reading a feature doc's target branch (white-label lives on `multi-tenant`, not `main`), reading the data model rather than the feature list (percent/fixed vs five assumed rule types), the Community-vs-Enterprise tier gate (API tokens free, SSO paid), and whether the money rail works in-country (selfhost + manual payouts, not Stripe Connect). Closes with the fallback question and the authentik proxy-provider answer. - EN: src/content/posts/vetting-an-open-source-dependency-before-you-bet-on-it.md - ZH: src/content/posts/zh/<same slug>.md (same filename → auto language switch) - Custom OG (1200x630) + banner (1600x900) art via TERMINALS/BANNERS entries - pubDate 2026-09-29; build verified 93 pages, 17/17 content checks, listing order monotonic on /posts/, / and /zh/ Note: the generator maps also carry two entries belonging to parallel in-flight posts (adding-english-mode…, and the sessions' other slugs); their post files were left uncommitted.
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.