Cursor×AITX
Back to showcase

OpenGovLab@Perspectivity - OSElectionInt

OSElectionInt turns 135 scattered OpenElections repositories into one map you can pan.

About the project

OSElectionInt turns 135 scattered OpenElections repositories into one map you can pan.

American election data is public and almost unusable. Certified results sit in 135 separate repos in a dozen CSV dialects. Candidate filings sit at the FEC. District boundaries sit at the Census. Nothing shares a key — so the question a voter actually asks, who represents me, who's running against them, and where is their money coming from, takes a researcher a day and a spreadsheet. The practical result: presidential races are over-covered and everything below them is dark.

We normalise every source onto OCD division IDs and put 146,355 certified contests, 39,396 candidates and 216,822 historical polling places on one globe. 38 cycles (1976–2026) scrub at 60fps, because geometry ships as a single 50.8 MB PMTiles archive read over range requests and results arrive as GPU feature-state rather than 38 network round trips.

The panel deliberately inverts the usual hierarchy: challengers lead, ranked by money raised, and the incumbent is demoted to context — because the point is to inform people for change. Open it on Texas and you see a state legislator out-raising two sitting senators 7:1: $99.6M in challenger money against $18.8M.

Correctness is engineered, not assumed. Candidate tables answer who; certified margins answer how many — because one ticket is spelled six different ways across county files, and reading those rows naively renders Trump at 25.9% in a state he carried with 56%. Contests with party labelling too thin to read are left unpainted rather than shown with a confident, wrong margin.

Storage is a deployment choice: MongoDB or Supabase, one shared contract, parity verified across 22 endpoints (482,838 rows, 18 byte-identical).

Ask it anything, or just tell it where to go. A ⌘K command bar drives the map by text or voice — "fly to Texas", "show senate", "2016", "play timeline" — and is deliberately not an LLM: a fixed grammar parses it, every command prints a receipt of what actually happened, and anything unrecognised is declined rather than guessed. Separately, Ask answers questions in natural language straight from the corpus, grounded in cited rows, inheriting the same honesty rules as the UI — ask who's running in Texas and it names the leading filers by money raised, then tells you unprompted that filing with the FEC isn't the same as being on the ballot.

Built solo. Entirely public data.

Team

Explore more projects