Docs
How the static build pipeline works.
Architecture
arena is a fully static Next.js export. Every page is HTML on disk — there is no Node.js process at runtime, no database, no API hop. nginx serves out/.
bun run sync ──▶ Navigara API → in-memory aggregation → data/*.json
│
▼
next build (export)
│
▼
out/ (HTML)
│
▼
nginx:alpine containerRefreshing data
"Refresh the dashboard" means "rebuild the container". The sync stage of the Dockerfile re-pulls from Navigara, re-aggregates, and writes a fresh set of data/*.json snapshots. Then next build inlines them into HTML.
In dev: bun run sync writes data/ from the synthetic fixture (no API access needed) or from real Navigara if NAVIGARA_ORG + NAVIGARA_API_URL are set in.env.local.
Data layout
- data/dashboard.json
- Hero metrics for the homepage (90d totals + sync mode).
- data/index.json
- Build meta · counts per window · top-100 dev + top-50 repo allow-lists.
- data/orgs/{30d,90d,all}.json
- Per-org commit + dev counts.
- data/devs/{30d,90d,all}.json
- Top-100 SWE contributors per window with grow / maint / waste.
- data/etv-distribution/{30d,90d,all}.json
- Histogram, Lorenz, quadrant points, percentiles.
- data/performance/{30d,90d,all}.json
- Daily time-series of grow / maint / waste totals.
- data/growth-share/{30d,90d,all}.json
- Same data as performance; consumed as composition shares.
- data/performance-per-dev/{30d,90d,all}.json
- Top-500 devs with per-month ETV normalization.
- data/landing/{all,swe}-{open,fixed}.json
- Quarterly bootstrap CIs for 6 metrics × 5 quarters.