The method
A governed data system, not a pretty chart.
The charts are the fun part. The real work comes before them: deciding what the data is allowed to look like, collecting it from sources that don't agree, and checking it hard enough that a stranger can trust the number on the screen.
Five stages from raw feed to live page
1
Collect
Scheduled pulls from each source of record, within its terms and limits. Where a source blocks automated access, I ask. Every file is archived as fetched.
2
Normalize
One schema per board. Duplicates removed, every value mapped onto a fixed list.
3
Classify
AI reads what people can't at volume, with a keyword fallback. Every label traces to its source.
4
Verify
Machine checks on totals and schema. Human review wherever a claim is made. A failed check blocks the update.
5
Publish
Only a passing build deploys. A failed run publishes nothing and the last good version stays up.
Checked as a guarantee, not a habit
The checks are wired into the deploy itself. On the midterms board, every weekly update clears four independent layers before it reaches the public site.
- Layer 1 · WeeklyIndependent AI fact-check. Separate agents re-research each claim without seeing the original sources.
- Layer 2 · WeeklyHuman review. Every change ships in a briefing with source links. Nothing applies until it is approved.
- Layer 3 · Every changeDeterministic validation. The House must total 435, the Senate 100, and every rating must be on the fixed scale.
- Layer 4 · Every applyPost-publish assertion. A job re-reads the live data and confirms it matches what was approved.
Where AI does the work, and where it doesn't
It does
- Read at volume: tagging hundreds of articles to a fixed theme list.
- Fact-check independently, from scratch.
- Draft the weekly briefing, with a source link for every proposed change.
It doesn't
- Write to published data. Every write goes through validated, deterministic code.
- Set a rating. Professional forecasters do, under a published rule.
- Ship a change unreviewed. A person approves every update.
Under the hood
Plain, inexpensive tools. Your team works in the Google Sheet; the rest runs on a schedule and is documented for whoever maintains it.
- Python
- GitHub Actions
- Google Sheets
- JSON schemas
- RSS ingestion
- Claude
- React
- Chart.js
- Cloudflare Workers