Ballot Research
Every contest on two Palm Beach primary ballots — 41 candidates, 216 archived sources — so the analysis can be redone without re-gathering any of it.
What It Does
I have always felt that I never had a good way to evaluate how to vote in local elections that wasn't a highly time-consuming error-prone informationally-vacant process. This is a tool that evaluates a ballot with data-driven analysis and helps to inform. It doesn't tell you who to vote for, it just finds all the data available on candidates for a particular office.
How it works
This is a proof of concept and right now only works on two primary elections where I live in Florida.
It works in two strictly separated halves. The collecting half goes out to the web and saves every source it touches: the original page exactly as it arrived, a plain-text version of it, and a record of where it came from, who published it, and when.
The analyzing half only reads what's in that archive and writes the judgments by analyzing each candidate's facts, claims, inferences, and likelihood of winning, plus a written comparison per race. Every statement is tagged by what kind of evidence it is and pointed back at a specific archived source.
Built with
- Built with: Python (stdlib only, plus PyYAML) as a CLI that splits collection from analysis — a content-addressed source cache holding raw bytes, extracted text, and provenance metadata is the only thing that touches the network, and hand-authored YAML/Markdown analysis files carry per-assertion evidence statuses that a validator rejects unless every citation resolves against that cache.
- Renders to Markdown, a dependency-free single-file interactive HTML page (hand-rolled Markdown subset, no CDN assets), and a print PDF via headless Chrome; published as static files to a VPS behind Caddy with one shell script.