Tab · Overview
Website
See every page, route, and endpoint with its actual status. Localhost dashboard tabs, hosted repoops.ai surfaces, marketing routes — all in one source-of-truth table. The surface-drift CI job fails the PR if a new public/*.htmlisn't listed here.
See it in motion
Where to find it
- Localhost:
http://localhost:4000/website.html?repo=<id> - On disk:
.claude/brain/website.md - Tab registry:
lib/canonical-tabs.mjs— the ground truth for which surfaces exist - Keyboard: ⌘ K then
website - Sidebar: Overview → Website
What it does for you
One table answers “is X shipped yet?”Pages, routes, and endpoints all carry an honest ✅ / 🚧 / ⏳ status. PRs flip the status in the same commit; the table never lies. Trust this row, not the README.
Catches orphan pages before they ship.Every
public/*.html must appear here (the surface-driftCI job enforces it). A page that exists but isn't documented is a defect — caught at PR time, not in production.The map between dashboard tabs and their docs.Each row links to the docs page for that surface. Click a row → land on its docs page → see what it does for you. Discovery is one click, not a grep.
Three invariants, all CI-enforced.(1) No dead tab — every
source: "aggregator" tab resolves to its file. (2) No orphan surface — every public/*.html is a registered tab. (3) No undocumented tab — every aggregator tab is listed in this doc.Configure
Nothing — it's a hand-curated markdown table. Edits flow through the standard PR process. The CI surface-drift job (scripts/brain-drift/surface-drift.sh) is the contract.
- New tab: add a row + register in
lib/canonical-tabs.mjs+ create thepublic/*.html. - Status changes: flip 🚧 → ✅ in the same PR that ships the code.
- Retiring a page: remove the row + remove the file + remove the registry entry.
Use it well
Read the table before proposing a new page.
If something close already exists, extend it. The dedup-check rule inCLAUDE.mdis enforced here — a duplicate tab is a defect.Register the surface in three places, same PR.
The HTML twin,lib/canonical-tabs.mjs, and this doc. The CI gate fails if any one is missing.Flip status atomically.
When a feature lands, move its row to ✅ in the same PR. Status drift is a defect, not a cosmetic lag — the Features tab once showed shipped Phase-4 work as still-open and that's the bar.Cross-link to the docs page.
Every row should link to the docs page for the surface. The docs are where the “what does this do for me” lives; the website table is the routing layer.
Examples
✓
Adding a hosted route
Edit .claude/brain/website.md to add the row under the “Hosted” section; create the website/app/<route>/page.tsx; if it's an API, register in .claude/brain/api.md; run npm run sync-brain; commit everything together.⚠
When CI says “orphan surface”
You shipped a public/*.html but forgot the registry. Either wire it into lib/canonical-tabs.mjs + this doc, or delete the file. The fix is mechanical — but the lesson is that the gate caught it before it shipped to users.