Sprint Derby
Pick a random person with a horse race. Drop in your team, run a 400m race with randomised speed curves, and whoever crosses the line first takes the task.

Overview
Someone has to run the sprint review. Instead of a spinner, drawing straws, or the same person volunteering every time, Sprint Derby turns the decision into a horse race. Enter everyone's names, start the race, and whoever crosses the line first takes the task.
It works for anything you would otherwise pick at random: who presents, who runs standup, who gets the last conference ticket. It just happens to be more fun to watch than a random number.
Key Features
- Comma-separated entry: Paste a list of 2 to 8 names and go
- Randomised speed curves: Each racer gets their own curve over a 400m track, so the race is genuinely watchable rather than a fixed outcome revealed slowly
- Live standings: Position, speed and progress update as the race runs
- Post-race summary: Finish times plus minimum, maximum and average speed per racer, in case anyone wants to contest the result
- Optional AI jockey names: Bring a Google AI key to turn names into jockey names. Entirely optional; with no key everyone races under their own name and nothing else changes, and a failed generation quietly falls back to the plain name
Technical Stack
- Framework: Next.js with TypeScript
- UI: Tailwind CSS and shadcn/ui
- AI (optional): Genkit, used only for jockey-name generation
Architecture
The race is the product, so the work sits in the simulation and its presentation:
- Race engine: Per-racer randomised speed curves evaluated over a fixed 400m distance
- Rendering: Animated track with live position and speed, backed by the same state that produces the final standings
- Optional AI layer: Genkit generates jockey names when a key is supplied, with a fallback path so the app is fully functional without one
Challenges & Solutions
- Fair but entertaining: A uniformly random pick is instant and boring; a race has to stay genuinely random while still being worth watching, which is what the per-racer speed curves provide
- Optional AI that stays optional: The Google AI key is used for that request only and is never stored, name generation falls back silently on failure, and self-hosters can supply an environment key so nobody has to paste one
- Disputed results: The post-race stats exist so the outcome is inspectable rather than a black box
Impact & Results
- Removes the awkward part of task assignment: Nobody has to volunteer, and nobody can argue the pick was unfair
- Zero setup: Public deployment, no account, no installation
- Genuinely reusable: Any "pick one of us" decision, not just sprint reviews
Interested in working together?
I'm Thomas Iwainski, a Senior Software Engineer based in Sydney, Australia. Send me a note and I'll get back to you.