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