Navigara

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 container

Refreshing 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.