Inspiration
Most people feel far away from the people who govern them. Between you and a vote on the House floor there are layers you rarely see: lobbyists, committees, party leadership, agencies, and a stream of bills with names nobody reads. Your state legislature and your city council make decisions that touch your rent, your roads and your schools, and most of us couldn't name who represents us there, let alone how they voted.
All of that information is public. It's just buried in PDFs, clerk journals and databases built for people who already know where to look. We wanted to make it something you'd open every morning on purpose, the way people open the Mini or Spelling Bee. Docket is New York Times Games for civics: a few minutes a day with real bills from Congress, your state and your city, and a quiet nudge to see how the people who represent you actually voted.
What it does
Every day you get three short games, built for your ZIP code:
- Roll Call: vote yes or no on real bills, then see how your representatives and your friends voted, and whether each bill passed.
- Filed or Fake: spot which bill captions were really filed and which we made up. (Real ones are often stranger.)
- Landslide: rank four bills from widest margin to closest vote. You get 3 points for each bill in the exact right spot and 1 point if you're one off.
Streaks, friend groups and invite links bring you back the next day.
How we built it
The app is Expo and React Native with Expo Router, so one codebase runs on iOS, Android and the web. Sign-in uses Firebase Auth with Google and Apple. A Fastify and Postgres API stores votes, results and streaks, and the app keeps a local copy so it still works offline.
Most of the work went into the data. Python pipelines pull every current member of Congress and every state legislator (about 8,000 people and 6,500 photos), their recorded votes, and the districts of every U.S. ZIP code from public sources: congress-legislators, OpenStates, Voteview, Census relationship files, and the legislatures' own sites. If a ZIP code falls in more than one district, we assign it to the district that covers most of it.
Every state gets its own bills, each one with a recorded floor tally and a final outcome. A bill only makes it in if its individual member votes add up to the official count, and otherwise the build stops. Plain-English titles and summaries are written only from each bill's official title and abstract.
Challenges we ran into
- Every legislature publishes differently. Some have clean APIs, some have web services, and Texas keeps its votes in House and Senate journal PDFs that we had to parse. When we ran out of OpenStates' free quota (250 requests a day), we collected the last several states straight from their legislatures' sites and checked each tally against the official page.
- Districts don't line up. The Census and OpenStates name districts differently, so we normalized both to a shared key. That matched 99% of state seats. Most of the rest are odd cases like New Hampshire's floterial districts and Maine's non-voting tribal seats.
- Privacy in a social game. Our own break-testing found that group vote splits could reveal one person's vote. Now splits count only finished ballots, and area stats need at least 10 players before they show.
- Getting a perfect score by cheating. Simulated players could replay finished games or double-submit, so we made each player's writes for a day go through one at a time and locked finished games.
What we learned
Government at every level publishes far more than people realize, and almost none of it is built to be read. Turning it into something people would actually play meant treating accuracy as a feature: one wrong tally and the game stops being trustworthy. We also learned how much state and local government decides compared to the national news people follow. That's the gap Docket is trying to close, one daily set at a time.
Built With
- caddy
- census-data
- docker
- eas-hosting
- expo-router
- expo.io
- fastify
- firebase
- google-sign-in
- lets-encrypt
- node.js
- openstates
- postgresql
- python
- react
- react-native
- sign-in-with-apple
- tiger-cloud
- typescript
- voteview
- vultr

Log in or sign up for Devpost to join the conversation.