Skip to content

Regenerate the Launchpad Page

The Launchpad is a single static HTML page listing every managed project with its dev / docs / prod / GitHub links and port band — built to be the browser’s default localhost site. The page is derived state with a single owner (the links index): it is never hand-edited, only regenerated.

Schema and derivation rules live in the Launchpad Links Index reference. Always-on serving is #1245; liveness badges are #1246.

Terminal window
node ~/.claude/scripts/launchpad/render-page.js --out ~/.claude/launchpad/index.html

That one command derives the links index from declared state (ports ledger, projects.json, each project’s dev.json / wrangler config / git remote) and renders the page. Re-running is always safe: unchanged inputs produce a byte-identical page.

Whenever declared state changes — a project gains a port band, a dev.json, a wrangler route, or a new repo remote:

  • after cdi provisions a new project (port band allocated)
  • after adding or editing a project’s dev.json
  • after a wrangler route / custom domain change
  • after registering a project in ~/.claude/projects.json

Two-step variant (inspect the index first)

Section titled “Two-step variant (inspect the index first)”
Terminal window
node ~/.claude/scripts/launchpad/links-index.js --out /tmp/links.json # 1. generate
jq '.projects[] | select(.name=="tct")' /tmp/links.json # 2. inspect
node ~/.claude/scripts/launchpad/render-page.js --index /tmp/links.json --out ~/.claude/launchpad/index.html

render-page.js with --index renders a prebuilt index verbatim — useful for diffing what changed before republishing, or for rendering a snapshot from another machine.

Terminal window
open ~/.claude/launchpad/index.html # macOS; or use the always-on server (runbooks/launchpad-serving.md)
make test-launchpad-links test-launchpad-page

In the page: / focuses the filter, typing narrows by project name or stack term, Enter opens the first match’s dev server, Escape clears. Light/dark follows the browser theme.

Dev/docs pills carry a liveness dot — filled = up, red = down, hollow = unknown — painted per page load from the server’s /liveness.json probe. Opened as a plain file (no server), the dots simply stay hollow; see the probe semantics.

  • Never edit the generated HTML. Fix the declared source (dev.json, wrangler config, ports ledger, projects.json) and regenerate.
  • Nothing is guessed. A project missing a prod URL or docs link means no route / docs block is declared — declare it, then regenerate.
  • The renderer adds no state of its own: no timestamps, no counters. Diffs of the output always reflect a diff of declared inputs.