Team Info
Team Name
You Were Right to Push Back
Team Members
Shawn Plew: Chief Prompt Officer Austin Trout: Chief Vibe Curator
Table Number
Twenty-Four
Slide Deck
https://claude.ai/artifact/RVd3DzihAFANWk9oY8XS3R#slide-48fb2f808750
Inspiration
Years ago, I volunteered with a political party on election days. I saw firsthand how much time and effort goes into keeping elections safe and secure for everyone. Since then, I've watched that foundation grow, including the voter-verified paper audit trail (VVPAT), which lets voters confirm their choices on paper before they cast.
Verifiable Ballot Tracking (VBT) is the next step. I can track a pizza from the oven to my door, but once I cast my ballot, I lose sight of it. VBT gives every voter a receipt with a tracking code that follows their ballot from the polling place to certification, with public proof at each step. It tracks the ballot, never the voter, and the receipt never shows how anyone voted.
Trust in elections is eroding. Letting people see the process for themselves builds more faith than asking them to take it on trust.
What it does
Verifiable Ballot Tracking (VBT) lets anyone follow a ballot from cast to certified without ever learning who cast it or how it was voted.
For voters: after casting, you get a receipt with a tracking code and QR code. Scan it or enter the code to watch your ballot move through four stages:
- Cast: your encrypted ballot is recorded.
- Counted: poll workers tally the precinct.
- Election-night results: the county reports unofficial results.
- Certified: the county board makes it final.
If something goes wrong, your ballot shows Challenged, and the reason is explained in plain language.
For election officials: after polls close, officials upload exported files to move ballots to the next stage. Voting machines never connect to VBT.
For everyone: each stage publishes a signed public record. An independent verifier lets anyone check that every ballot is included and the totals add up.
Our demo uses a voting machine simulator that produces logs in the NIST standard format.
How we built it
We built VBT with a software factory: AI agents did the building, and we approved every change.
The factory. Before the hackathon, we wrote a playbook that both people and AI agents can read. It includes locked interfaces, task specs and operating rules. On the day, Claude coordinated the work and sent tasks to our Warp factory. There, a Foreman agent routed each task through Triage, Spec, Implement and Review agents. Every task ended as a pull request with tests and a Vercel preview. One of us approved it in Slack before it merged. Claude and Codex shared decisions through an append-only context log in Supabase, so every agent worked from the same facts. In the first hour we deployed a "Hello, VBT" app to prove every layer worked end to end: factory, GitHub, Supabase and Vercel.
The product. Next.js and TypeScript on Vercel, with Supabase for data. Ballot events are insert-only and hash-chained, so history can't be rewritten. Row-level security means the public sees only tracking codes, statuses and proofs, and no table has a column for voter identity. For the demo we built a simplified encryption layer with libsodium that mirrors ElectionGuard step by step. Ballot data comes in as files in NIST standard formats (SP 1500-101, -103, -100), and machine logs follow the format VotingWorks documents for its open-source voting system. We tested against the VVSG 2.0 federal voting system guidelines.
Challenges we ran into
Proof without exposure. We had to prove a ballot was counted without revealing who cast it or how. We dropped a second verification factor, kept choices off the receipt, and never publish a tracking code next to the exact time it was cast. Those times can be matched against poll records to identify a voter.
ElectionGuard in eight hours. ElectionGuard is the right production foundation, but too much to integrate in a day. We built a simplified encryption layer that mirrors its steps, and we're upfront that production would use ElectionGuard itself.
Respecting the air gap. Federal guidelines require voting systems to stay offline, so VBT never connects to a voting machine. Officials upload exported files after polls close. That forced a batch design, which is why we say "live status," not "real-time."
Scope. Eight hours forced hard cuts. We defined a minimum demoable product up front and saved the phone line and text updates for after it was done.
Accomplishments that we're proud of
- A working ballot journey. A receipt from the voting machine simulator can be scanned and followed from cast to certified on a live site.
- Anonymity by design. No table has a column for voter identity, and the receipt can be shared or photographed without revealing how anyone voted.
- Proof anyone can check. Every stage publishes a signed record showing each ballot is included. [If shipped: our independent verifier caught a deliberately tampered ballot.]
- A real software factory. [X] pull requests built by AI agents, each reviewed and approved by a human, from an empty repo to a deployed product in eight hours.
- Built on real standards. NIST data formats, VVSG 2.0 alignment, and Indiana's actual election stages, not invented ones.
What we learned
- Elections are more transparent than people think, but hard to see. Indiana already publishes precinct results, county canvasses and certification. VBT connects those public steps to a single ballot.
- Privacy and verifiability pull in opposite directions. Every feature raised the same question: does this help someone prove how a person voted? Several good ideas died on that question, and the product is better for it.
- Standards save time. NIST formats and VotingWorks' open-source log format gave us real data shapes, so we didn't have to invent our own.
- A software factory needs a strong spec. The agents were only as good as the playbook. Locked interfaces and clear task specs mattered more than any single prompt. [Add one specific lesson from today.]
- Humans stay in charge. Approving every PR felt slow at first, but it caught [example] and kept us confident in what shipped.
What's next for VBT
- ElectionGuard in production: replace our simplified encryption with ElectionGuard, including published proofs that the totals were decrypted correctly.
- No single key holder: split the election key among several guardians so no one official can decrypt ballots alone.
- Real county data: take exports from the voting systems a county already uses, starting with a pilot in an Indiana county.
- More ways to check: a toll-free number and text updates for voters without a smartphone.
- Early voting: clear status for ballots cast at vote centers while they wait to be counted on Election Day.
- Testing with real people: usability testing with voters and review by election officials and security researchers.
- Production controls: ISO 27001 and SOC 2 controls before any real election use.
Built with
Next.js · TypeScript · Supabase · Vercel · Vercel Flags · libsodium · Warp · Claude · Codex · Slack · NIST SP 1500-101/103/100 · VVSG 2.0
Built With
- claude
- codex
- supabase
- vercel
- warp