Civic intelligence for the age of AI infrastructure.
A single, open-source platform that lets any citizen, journalist, or local organizer answer four questions about AI data centers in the United States:
- Where are they being built or planned?
- Who is building, funding, and approving them?
- When can the public weigh in?
- How are the companies, investors, utilities, and officials connected?
The current build ships with editorial seed data covering ~30 of the largest US AI data center projects and the federal + state officials representing them.
pnpm install
pnpm devOpen http://localhost:3000 (or whichever port Next picks).
No API keys are required for the MVP. The map uses free CartoDB dark-matter tiles via MapLibre GL by default; if you want Mapbox styling, set NEXT_PUBLIC_MAPBOX_TOKEN in .env.local.
| Route | Purpose |
|---|---|
/ |
Full-viewport map. Click any marker to open the project detail panel. |
/graph |
3D / 2D force-directed graph of companies, officials, and projects. |
/events |
Filterable index of public-comment windows, hearings, votes, and protests. |
/learn |
Four primers: what AI data centers are, how to participate, follow the money, glossary. |
/about |
Mission, methodology, attribution, license, contributing. |
All routes serve JSON; the same shape will be served whether the data layer is local seed files (today) or Supabase (soon).
GET /api/data-centers ?status=&state=&q=&limit=
GET /api/data-centers/[slug] full record with companies, officials, events
GET /api/graph { nodes, edges } for /graph
GET /api/events ?state=&type=&status=&upcoming=true
GET /api/officials ?state=&level=
GET /api/organizations/[slug]
GET /api/stats
GET /api/search ?q=
app/ Next.js App Router pages + API routes
components/ Map, Graph, Events, Shared components
content/learn/ Markdown primers (rendered via remark)
data/seed/ Typed seed datasets (DCs, orgs, officials, events, relationships)
lib/
data/source.ts Data-access layer. Single point of swap to Supabase.
types.ts Shared TypeScript types
constants.ts Status colors, node colors, labels
hooks/ SWR fetch helper
The data-access layer (lib/data/source.ts) is the single point at which seed JSON can be swapped for a Supabase/Postgres client. The Next.js routes, hooks, and React components consume the same exported functions either way.
- Next.js 16 App Router · React 19 · TypeScript · Turbopack
- Tailwind CSS with custom dark-mode design tokens
- MapLibre GL (via
react-map-gl/maplibre) — free, no key required; falls back to Mapbox if a token is set - Supercluster for client-side marker clustering
- react-force-graph-3d / 2d (Three.js + WebGL) for the force-directed graph
- SWR for client data fetching
- gray-matter + remark for markdown rendering
- ✅ Map view with clustering, filters, detail panel
- ✅ Force-graph view (3D + 2D) with category filters
- ✅ Events index
- ✅ Learn section + About + methodology
- ✅ Local JSON data layer (~30 projects, 60 officials, 23 orgs, 19 events)
- Supabase + Postgres + PostGIS migration of the seed
- Automated ingestion from FracTracker, datacentertracker.org, Epoch AI
- Geocodio batch resolution of federal + state officials for every site
- Vercel Cron jobs for daily refresh
- "Last verified" timestamps surfaced everywhere
- Senate LDA lobbying data
- OpenSecrets FEC campaign contributions
- SEC EDGAR filing links per company
- Utility PSC docket links
- Local officials seeded for ~30 highest-controversy jurisdictions
- UK, Canada, Australia data centers
- Localized officials lookup per country
See .claude/PRD-datacenter-observer.md for the full product spec and .claude/implementation-plan-datacenter-observer.md for the task graph.
The seed dataset draws from public reporting and from these openly-licensed sources:
- FracTracker Alliance — primary facility-level data
- datacentertracker.org — community actions & legislation (CC BY 4.0)
- Epoch AI — hyperscale + technical metrics (CC BY)
- unitedstates/congress-legislators — federal officials (CC0)
- Geocodio — federal + state officials by address (paid tier when deployed)
All editorial datapoints carry source URLs. Where the source is community-maintained, we follow upstream attribution.
- Code: AGPL-3.0-or-later
- Data: CC BY-SA 4.0
- Editorial content (
content/learn/): CC BY-SA 4.0
Built in the open by Benjamin Life (@omniharmonic). Suggestions, corrections, and additions welcome — especially missing projects, local-official seeds, and lobbying disclosures.