Lunch Roulette
Spin the wheel. Pick a lunch spot. Fight it out.
Overview
Lunch Roulette is a self-hosted lunch picker for a small office team. Spin a wheel, pick where to eat, get on with the day. It started as exactly that and nothing more: a wheel with equal odds for every restaurant, no persistence, no history.
Over several weeks of iterative Claude Code sessions it grew well past a throwaway utility. The wheel picked up a weighted fairness algorithm, picks started getting saved and locked in, and a second mode turned the whole thing into a Super Smash Bros. fighter draft with real game audio. There was no upfront spec. Each layer was a decision made in the moment, then built. A public demo runs every part of it with no login.
What It Does
- Weighted wheel: Instead of equal odds, each restaurant carries a weight driven by a recency penalty. A spot that just got picked drops sharply and recovers over an 84-day window on a 56-day curve, with a 0.03 floor so nothing ever truly falls off the wheel.
- Fairness panel: A live probability panel lists every restaurant and its current weight, so the math behind a spin is visible rather than hidden.
- History and lock-in: Every pick is stored in PostgreSQL. Any team member can lock in the week's pick or unlock it again at any time, with no deadline enforcement. Recent picks show in the right column with locked badges.
- Three-column layout: Wheel and controls on the left, the probability and fairness panel in the middle, recent history on the right. A theme toggler in the header cycles between visual themes.
Smash Mode
A SMASH button in the header flips the entire UI into a dark arena aesthetic and turns the wheel into a fighter selector. It is a second app sharing the same backend.
- Six-fighter draft: Hit FIGHT and all six spins run automatically, each landing on a random Super Smash Bros. Ultimate fighter paired with a restaurant. Fighter odds mirror the lunch algorithm, so frequently drawn fighters show up less often.
- Battle flow: Once all six slots fill, the preview panel becomes a ROSTER COMPLETE panel with LOCK BATTLE and RE-ROLL. Locking it switches to BATTLE LOCKED; tap any fighter slot to record the winner, who gets a gold border and a WINNER badge.
- Real game audio: The SSBU announcer calls each fighter's name as the wheel lands, pulled from WAV files for all 85 fighters. A gameset sound plays on battle lock, and the announcer calls VICTORY with a fanfare when a winner is recorded.
- Fighter leaderboard: Below recent battles, a stats board tracks entry and win counts per fighter with inline portraits, updating live as winners are recorded.