Fantasy Draft Selector
My college fantasy football group asked for "something cool with AI" to determine draft order this year. This is what I built instead of another duck race — a JRPG-character-select-styled reveal, every team an AI-generated character, everyone watching the same shared moment from their own phone.
Same order, every screen.
- Every viewer opens the same link and gets the identical draft order, seeded and shuffled entirely client-side — no server, no live sync, no way for someone who refreshes early to see a different result
- Each team gets its own AI-generated character portrait, a short animated clip, and a narrated voiceover line — one part JRPG character-select screen, one part sports-draft reveal
- A lobby countdown builds tension before the release moment, including a self-retracting "false prophecy" prank that always lies and always confesses before the real reveal
- A prediction slip lets each viewer guess their pick before it's revealed, with a progress rail and confetti for a correct call
Spec first, then build.
-
Structured interview before any code
A grill-me-style Q&A locks every decision — roster shape, tone, feature list, beat-by-beat UI flow — before implementation starts, so decisions get made once instead of re-litigated mid-build.
-
League data isolated to one file
Team names, character flavor text, release time, and the shuffle seed all live in a single config file. Everything else — the shuffle, the sequencer, the UI — is generic and league-agnostic.
-
Character art, then motion
A reference still gets generated per person, then animated into a short clip via Kling — one character portrait and clip per team member, batch-generated and sample-approved before the full run.
-
Narration timed to the reveal
Per-team and per-pick voiceover lines generated via OpenAI's TTS, sequenced against the reveal timeline so the narration lands exactly as each pick animates onto screen.
-
Deterministic by design
The draft order comes from a seeded shuffle, so the same seed always reproduces the same order. That made it safe to re-run the entire reveal after draft day, purely to record a clean demo, without touching the real result.
How it got built.
Spec, build, and demo — the whole thing was AI-assisted end to end. I made the judgment calls, Claude did the typing.
Open source, ready to fork.
-
Live, static, no backend
Deployed on Vercel as a static build. No server, no database, no network calls at runtime — the shuffle, the config, and all media are bundled client-side.
-
Public GitHub repo, genericized
The public release ships with placeholder team names and no character media — only the real league config differs per deployment. Swap one file to run it for your own league.
-
Tested end to end
Unit tests (Vitest) cover the shuffle, sequencer, and validation logic; Playwright end-to-end tests cover the lobby, results view, and full reveal sequence.
Let's find what to automate.
All of it's open source.