Daily build · Civic / Data Toys

Count Curve

Why does the leader at 9 PM sometimes lose by Friday? Different kinds of ballots get counted at different times and lean different ways. Set up the ballot mix, play the count, and watch the margin swing, when a careful decision desk can call it, and when a hasty call goes wrong.

Fictional race, generic candidates. This is a toy model of counting order, not a forecast and not about any real contest. Nothing changes once the polls close: every vote was cast by 7 PM. Only the order they're reported in moves the curve.

Start with a count

Preset 1 loads on the first visit. Any edit becomes your custom scenario.

Race & desks

The careful desk projects what's left using each ballot type's lean (observed so far, or the expected lean before any are counted), and calls only when the projected margin beats its caution band on every outstanding vote and clears 0.5 pts. The hasty call just picks whoever leads once enough is counted.

Ballot types

TypeShare %% for AStarts (h after 7 PM)Takes (h)Reports

How the night goes

The count curve

Margin among votes counted so far. Drag or hover the chart, or press play.

A aheadB ahead% countedCareful callHasty callLast lead change

Milestones

Markdown report


How the model works

Each ballot type gets its share of the total and a lean toward Candidate A. Its votes are split into random-sized batches (about three per hour of its reporting window) released at random times inside that window. Each batch's lean wobbles by the precinct spread, then the batches are nudged so the type's total lean matches what you set. The final result never depends on order; only the path does.

Real decision desks use precinct-level models, turnout estimates and exit polls. Real states differ in when they may start processing mail, cure deadlines and recount rules. This toy captures one idea: counting order creates swings that aren't real changes in the vote.