← Back to the board
FactsDriven · Election Night · demonstration

See the board before the night it matters

This is the FactsDriven election night board, running a simulated November 3. It starts as the polling expectation and resolves out of it as votes are counted. Everything animates and everything is clickable. Every result below is invented.

Click a state to zoom in Vote weight to extrude Drag the timeline to scrub the night Hover any county
Sample data · not real results
FactsDriven
Counting
7:00 PM ET
Polls closing: GA, IN, KY, SC, VT, VA
U.S. Senate51 to win
0D0R100 open
U.S. House218 to win
0D0R435 open
218 seats for a majority
Democratic, called Republican, called Projected from polling, not yet called
Governors36 up
0D0R36 open
Countednationally
0votes
Which contest
Paint the map by
Margin in the selected race
R +30tiedD +30
The wire
· click a state to zoom
Polls said
D +4.5
national House vote, final averages
Counting says
—
no votes counted yet
Polling error
—
difference, so far
Coverage
61%
counties on a state feed, not DDHQ alone
Races on the ballot
18,204
0 called
7:00 PM
1:00 AM Replay the night
What is happening up there

Three mechanics, one board

The chamber fills up

435 chairs, drawn in perspective and painted back to front so the rows sit behind each other the way a real chamber does. A hollow chair is a seat the polling projects but nobody has called. It goes solid, with a pulse, the moment the call lands. The majority bar underneath carries the same distinction: solid is counted, hatched is projected. You can read how close the chamber is to flipping without reading a single number.

Polling is the starting state

At 7:00pm the map is not grey, it is the forecast. Every county is shaded by what the polling expected, faded to show it is an expectation rather than a count. As ballots land, each county moves from its polled margin to its real one and solidifies. The story of the night becomes the distance between the two, and the Running vs polls layer paints exactly that. lib/votehub.ts already pulls live polling for the ticker, so the input exists.

Vote weight is a transition, not a page

Press Vote weight and the flat choropleth rises into columns: height is ballots cast, colour is who leads. It is the same map, tweened, so you never lose your place. In production this is Mapbox fill-extrusion with the height driven by setFeatureState, which means it animates for free every time a batch lands.

Two things to notice while it runs. Polls close on the real schedule, so the map lights up in the real order, east to west, with Alaska last. And the national line at the bottom keeps score of the polling error as it reveals itself, which on this simulated night runs about two points redder than the averages. That row is the single most interesting number on a real election night and nobody puts it on the board.