Rockwell Trivia Draft
A party trivia game built so the host can play too, which means nothing in it is allowed to show the host a question.
The problem
I wanted to host trivia nights and play in them. That only works if I never see the questions, including while I'm building and debugging the game. AI coding agents print sample rows from databases all the time, and anything they print lands in my terminal.
What I built
There are two pieces. trivia_parser reads a 10,000-question PDF into SQLite. It uses the position of each word on the page so that questions wrapped across columns come out whole, and a small Swift helper spellchecks the result.
Both follow one rule: the host never sees a question. Every tool, script and agent that touches the question database prints counts, IDs and aggregates only, and errors report row numbers instead of contents. A question that's shown by accident moves to a separate pool of burned questions, which is the only set I develop and test against. I found parsing bugs from histograms and string lengths, and checked an LLM difficulty rater against my own 1-to-3 ratings.
The game is a Rails 8 app that uses Turbo Streams over Solid Cable, with SQLite for storage. The current version runs on a laptop on the home network. The host screen goes on the TV and guests join by scanning a QR code. Teams form on their own, and each team's captain types the answers on a phone while an LLM grades them. Rounds and breaks run on timers.
What happened
The bank holds 9,911 playable questions that I haven't read. A testing mode runs a full night on one laptop and one phone, using burned questions.
The next version drops the TV and the laptop. One person hosts from their phone, and players join from their own phones wherever they are. The host still plays, so the blind rule stays.
Try it: a short round
5 questions, 20 seconds each. These are burned questions, ones I've already seen, so they can never come up at a real game night. The real game has an LLM grade answers; this page checks against a short list of accepted answers and forgives small typos.