civicRAGEvalsObservabilityAgents

BadgerBrief

A nonpartisan Wisconsin voter guide. AI writes the first draft of everything, and a person approves it before anyone sees it.

BadgerBrief, screenshot 1 of 3
Screenshot 1 of 3

01

The Problem

A Wisconsin voter opens their ballot and finds fifteen races they've never thought about. They have a phone and twenty minutes.

Every fact they need is already public. The state publishes campaign donations. The federal government publishes broadcast advertising records. The legislature publishes every vote. The problem isn't that any of it is hidden.

The problem is that nobody with a job is going to open six government websites to work out that the group running attack ads against their state senator is funded by another group, which is funded by a third one. Public and usable are different words.

The two things that already exist both fail, in opposite directions. The government sites are complete and unreadable. The partisan guides are readable and have a thumb on the scale.

02

The AI Design Decision

AI writes the first draft of everything, and a person approves it before anyone sees it. That split is the product.

The AI does the work that doesn't scale by hand: reading Wisconsin newsrooms every day for coverage of every candidate, pulling positions off campaign websites, sorting bills by which issue they touch, and working out who is actually behind a committee with a vague name. That's thousands of small research jobs a week, and there's no version of this where a person does them all.

What the AI never does is publish. Everything it writes lands as a draft and shows up nowhere until a human approves it. The publishing function isn't even one of the tools it's allowed to use.

What I chose not to build is a scoring system. The obvious version of a voter guide gives each candidate a rating, or a letter grade per issue. It's the feature everyone would ask for and it's the one that ends the neutrality, because a score is just a set of weights, and every set of weights is somebody's political opinion wearing a number.

So the voting records show what someone actually voted for and against, and no score at all. The forecast page does the same thing on a bigger scale: it pulls together polls, ad spending, social reach and turnout, and deliberately refuses to publish a number for who's winning.

03

The Architecture

  1. 01Pull from government records and Wisconsin newsrooms every day
  2. 02AI writes a draft and nothing about it is public yet
  3. 03automatic checks score it and confirm every claim has a source
  4. 04a person reads it in a review queue and approves or rejects it
  5. 05it goes live with the source one click away

04

The Responsible AI Constraint

Three things, and the first one is unusual. Before any change ships, the assistant gets run against a set of test questions and scored on whether it cited its sources, stayed neutral, preferred official records, and refused when it should have. Then I tested the scorer itself. I ran it three times on identical code with identical answers, and it came back 67 percent, 72 percent, and 94 percent, failing different questions each time. So now every answer gets scored three times and only fails if it fails twice. An exam nobody has checked for consistency is an exam you can pass by accident. Second, congressional votes get pulled from two official government sources and compared name by name. If they disagree about even one member, the whole record is thrown out rather than reconciled, because if two official sources disagree about one person, I can't trust either one about the rest. Third, a quote from a candidate can't be saved unless the link jumps to the exact second in the recording where they said it. Not a rule someone is supposed to follow. A quote a reviewer can't click and hear has nowhere to be stored.

05

The Result

Live at badgerbrief.org, covering every 2026 Wisconsin race: Governor, statewide, U.S. House, Legislature and Supreme Court. Campaign money from federal and state records, including the committees funding the committees. Advertising tracked across Meta, Google and broadcast TV, with the exact television spend and every order linked to the filing it came from. Voting records for sitting members, sorted by the same eleven issues the candidates answer questions on. 80 test files, and a set of test questions the assistant has to pass before any change goes out.

06

If you remember one thing

I tested the test. The same code scored 67, 72 and 94 percent on three different runs, so now every answer gets marked three times and only fails if it fails twice.

Tech Stack

  • Next.js 16
  • React 19
  • Convex
  • Clerk
  • Claude (Vercel AI SDK)
  • Arize AX
  • OpenFEC + WI Ethics Commission
  • Congress.gov
  • Meta Ad Library + Google political ads + FCC political files
  • Browserbase + Playwright
  • Firecrawl
  • Perplexity
  • Deepgram

Links