[ FLEET MAINTENANCE · ESCOFFIER LABS ]

One theme, every site. A fleet that never drifts.

Every Escoffier Labs tool gets its own marketing site. escoffier-fleet-kit keeps them all looking the same and staying current from one place: one OG card template rendered into every site, version sync from each tool’s latest release, and hands-off publishing that commits and pushes only the repos that actually changed.

View on GitHub →

The économe of the brigade: keeps every station stocked, consistent, and current. This very page is one of the sites it builds.

Part of the Brigade fleet from Escoffier Labs

[ 01 · THE ROUTINE ]

Sync · read and render

  • Fast-forward every *-site checkout (no merge, no force)
  • Read each tool’s latest release and patch its SITE.version
  • Render every OG card from the one shared template
  • Sync the shared SEO head into each site

Publish · only when needed

  • Skips any repo with a dirty or unchanged working tree
  • Commits and pushes the rest, one tidy commit each
  • Content blurbs go through a review PR, never straight to main
  • The watchdog reports publish status with a JSON receipt

[ 02 · FEATURES ]

One OG theme

Every site’s link-preview card renders from a single template and a per-site content map, in the shared dark-ledger kitchen style. Change the theme once, regenerate all.

Version sync

Reads each tool’s latest release (or skill count) and writes it into that site’s SITE.version, so the marketing never lags the software.

Hands-off, idempotent

fleet-sync fast-forwards, regenerates, and pushes only the repos that changed. A no-op run touches nothing, so it is safe to leave on a timer.

Review-gated content

The content sync drafts kitchen-voice copy from changelogs with an LLM, but it never pushes to a site’s main. It opens one PR and pings Discord; a human merges.

Publishing watchdog

Checks local source state against live ClawHub and Printing Press status and prints a Discord-ready report with a JSON receipt, so a stalled publish is visible.

SEO, validated in CI

A shared SEO head and a seo-validate workflow keep titles, descriptions, canonicals, and structured data correct across every site instead of drifting one repo at a time.

[ 03 · SCRIPTS ]

ScriptWhat it does
bin/fleet-sync.shThe headless routine: fast-forward each site checkout, sync versions, regenerate OG cards, sync SEO heads, then commit and push only the repos that actually changed. Safe on a timer; a no-op run touches nothing.
node og/render.mjs [slug]Render OG link-preview cards from one template (og/template.html) and content map (og/sites.json) straight to each repo’s public/og-card.png. No web server in the loop. Omit the slug to render every site.
node bin/sync-versions.mjsRead each tool’s latest GitHub release (or skill count) and patch SITE.version in that site repo, so the sites never lag the tools they market.
node bin/content-sync.mjsDetect new releases, draft a one-line kitchen-voice blurb from each changelog, refresh the “fresh from the kitchen” board, and open ONE review PR. Never pushes copy to main: a human merges.
node bin/publishing-watchdog.mjsRead publishing/manifest.json, check local source state, pull live ClawHub stats for published skills, and print a Discord-ready report with a JSON receipt.

The canonical aesthetic lives in DESIGN.md (copied into each site repo); per-site version sources live in sites.config.json. The kit is Node plus a little Bash, and it renders cards with system Chromium - no web server in the loop.