02 / Shipped · iPhone · 2026
Gridiron Guesser
The game is the product. The content machine is the story.
Gridiron Guesser is a daily NFL guessing game: a career’s team-by-team route, four downs to name the player, three modes, and a reason to come back tomorrow. It’s on the App Store and it’s fun. But the engineering I keep wanting to tell people about isn’t the game.
It’s the machine next to the game — the system that turns each day’s puzzle into short-form video and social cards without me ever opening a video editor.
A video editor that breathes like me
The videos are real playthroughs of the real game — the app’s UI re-implemented in Remotion and “played” by a data-driven timeline. The hard part wasn’t rendering. It was rhythm: synthesized narration over machine-perfect timing reads as a robot demo reel.
So I measured myself. I recorded 28 of my own playthrough narrations — about 40 minutes — transcribed them with whisper.cpp, and re-measured every pause acoustically instead of trusting the transcript’s timestamps. Speaking ratio: 0.714. Pace: 214 words per minute while actually talking. Median silence: 0.75 seconds. Those measurements are the timing table. Every pause in a video is drawn from a measured range, seeded by the puzzle — so two videos breathe differently, but any given one is exactly reproducible.
Silence is real PCM, not punctuation
The pipeline runs in nine stages, and every stage writes a typed artifact to disk, so a run can resume from any point — nothing that costs money gets paid for twice. Narration is synthesized one line at a time; a compositor then assembles the master audio track byte by byte, inserting silence as actual audio samples between events instead of hoping the TTS honors an ellipsis. The renderer follows that master track, and a validator fails the build if the video timeline and the audio disagree by more than a single frame.
The pipeline also splits exactly at the money line: drafting a script costs nothing, and nothing spends a TTS credit until I’ve read and approved the script — from my phone.
ONE PUZZLE JSON → ONE POSTED VIDEO
EVERY STAGE WRITES A TYPED ARTIFACT · RESUMABLE FROM ANY STAGE
$28.50 for 12,704 views taught me more than the views did
The promo log for the narrated format is honest: $28.50 spent, 12,704 views, 2 comments. The diagnosis mattered more than the numbers — a video that solves the puzzle on camera leaves the viewer nothing to say.
So there’s a second format: silent career cards that never reveal the answer. The answer lives in a pinned comment, because withholding it is the engagement mechanic. The cards cost $0 in API spend and go out four or five times a day. Underneath, a deterministic eight-signal score ranks careers by how absurd their route is, and headlines come from classifying what kind of story a career is — twelve types, journeyman to cult hero — with a banned-pattern list built entirely from headlines that shipped and failed.
The LLM has taste. The validator has veto.
Language models write the scripts and the hooks, but they can’t ship anything on their own. An answer-leak scan checks every on-screen and spoken string, because a promo that names the answer has un-made the puzzle. Narration grounding means a line can only mention teams actually on the player’s route — the model doesn’t get to invent football. An FTC-compliance check runs as code, not taste. The script critic runs on a different provider than the writer, because a model rubber-stamps its own habits.
And the safe areas for TikTok and Facebook were measured off real posts, pixel by pixel — after two shipped layouts turned out to be hiding content behind the like button.
WHAT IT TAUGHT ME
A daily game is really two products: the game, and the machine that keeps showing up for it. The machine only works because every creative decision an LLM makes passes through something deterministic on its way out the door.