The public site for FedCourtsAI. Static, built with Astro, hosted on Cloudflare Pages.
- Content is Markdown/MDX under
src/pages/. Edit it in the GitHub UI, open a PR, and Cloudflare Pages attaches a preview URL to the branch. - Data is never hand-edited.
scripts/fetch-ledger.mjsruns before every build (prebuild), downloads thefedcourtsairepo tarball, counts what is indata/cases, copies the committedmetrics/roll-ups, and writessrc/data/ledger.json(gitignored). Components read from that file. - Results come from
scripts/fetch-results.mjs, which runs after the ledger fetch. Each release listed insrc/lib/releases.jsis read from thefedcourtsairepo at its own tag (for Release 1,docs/release-ot2026-public-summary.mdatresults/ot2026-longconf) and nowhere else./resultslists every release, newest first, and each published one gets its own page at/results/<slug>; a release whose tag doesn't exist yet is listed as upcoming, and the first rebuild after the tag is pushed publishes it. Once a release's tag exists, an unreadable summary or any unfilled‹…›placeholder fails the build, so Pages keeps the last good deploy. The release list is an interim site-side copy; it moves to a manifest committed infedcourtsai(#31). - Freshness comes from
.github/workflows/rebuild.yml, which calls the Cloudflare deploy hook daily. It never commits here. - Checks:
.github/workflows/build.ymlrunsnpm ciandnpm run buildon every PR intomain, and itsbuildcheck is required before a PR can merge. Agent conventions are in AGENTS.md.
| Component | What it renders |
|---|---|
<Stats /> |
The headline counters with a ledger stamp |
<LedgerStat key="…" label="…" note="…" /> |
One figure from ledger.counts (events_open, events_resolved, events_with_predictions, predictions, predictions_frozen, evaluations, leaderboard_events_scored, leaderboard_predictors_ranked) |
<LedgerTable limit={n} onlyOpen onlyResolved /> |
The ledger table, newest first |
<Stamp /> |
"ledger <sha> · <time>" pointing at the exact commit read |
Import them at the top of a page: import Stats from "../components/Stats.astro";
npm install
npm run build # runs the fetch first
npm run previewnpm run dev needs src/data/ledger.json to exist; run npm run fetch once first.