Skip to content

Register Dashboard — Build & Deploy

A static HTML view of docs/open-items.md, generated by scripts/build-register.js.

Build locally

npm run build:register

Reads docs/open-items.md and docs/closed-items.md, writes site/register/index.html. No dependencies. Open the file directly in a browser — it needs no server.

⚠️ Not site/index.html. MkDocs owns that path for the docs home page, and this script runs after mkdocs build in CI, so writing to the root would silently replace the home page with this dashboard.

site/ is gitignored. The output is derived, and committing it would let the dashboard drift from the register it is supposed to reflect.

Where it is published

https://autowarz.blused.org/register/

Cloudflare Pages

The docs site and the dashboard share one build. Build command:

node scripts/build-data.js && pip install -r docs/requirements.txt && mkdocs build && node scripts/build-register.js
Setting Value
Framework preset None
Build output directory site
PYTHON_VERSION 3.12

Order matters. mkdocs build empties site/ before writing, so the dashboard must be generated after it, and the building data before it.

⚠️ Access control is required

auto-warz is a private repository. Cloudflare Pages serves publicly by default, and this dashboard exposes the entire open design surface: unreleased mechanics, endgame paths, mode concepts, and every unmade decision.

Put Cloudflare Access in front of the project before sharing the URL. Zero Trust → Access → Applications → Add a self-hosted application, pointed at the Pages domain, with a policy limited to your own email. Free at this scale.

An unprotected Pages deployment is a public URL whether or not it is linked anywhere.

What the dashboard shows

  • Open — every row in the register
  • Actionable — task and defect only. The register's own header rule warns that logging every unmade decision manufactures a backlog that can never empty; undecided rows are ordinary unfinished design, not debt. The actionable figure is the real backlog.
  • Do first — kept deliberately short. If more than about six items are DO FIRST, none of them are.
  • Blocking the most work — which items have the most dependants. Click to filter to that id.

Column contract

The parser expects nine pipe-delimited columns in open-items.md:

| ID | Area | Kind | Item | Intent steer | Detail lives in | Blocked by | Priority | Raised |

and ten in closed-items.md (the same plus Resolved). It warns on any row with a different count rather than failing, so a malformed row is reported instead of silently dropped.

Blocked by is split on ; — use a semicolon to list more than one blocker.