video URL: https://vimeo.com/1209165940?fl=tl&fe=ec

Inspiration

It's 2am during United Hacks V7, and half the conversations happening around this hackathon are sports arguments in the sidebar. Someone predicted Argentina wins the World Cup "easily." Someone else called LeBron washed two years ago and conveniently never brought it up again. Sports fans make bold predictions constantly, in group chats, on social media, at the bar, but nobody ever actually gets held accountable for the bad ones. The good calls get remembered forever. The bad ones quietly disappear. We wanted to build the thing that doesn't let them disappear.

What it does

Cooked is a sports take accountability app with a complete prediction lifecycle, not just a single-turn chatbot interaction. Drop a Take — make a prediction while the moment is live. The AI doesn't just agree with you, it pushes back with a real, reasoned counter-argument and rates how bold the call is, from CHALK to UNHINGED. The take gets locked into your Scorecard. Take Autopsy — paste any old take, yours or a pundit's, and the AI grades how it aged, A through F, with a specific verdict and an explanation of what actually happened. Settle a Take — the feature that closes the loop. Go back to a pending take, tell it what really happened, and the AI grades your prediction against reality, with nuanced partial credit for calls that were close but not exact. Live Scores — real scores across NFL, NBA, and major soccer leagues including the World Cup, pulled live to keep the accountability grounded in what's actually happening right now. Share Receipt — every graded take can be turned into a clean, screenshot-ready receipt card, because the whole point is that people should be able to show off being right (or get roasted for being wrong).

How we built it

Frontend is React, Vite, and Tailwind CSS v4, styled as a dark sports-broadcast aesthetic, chalk-sketch hand-drawn grade badges, animated wireframe World Cup visuals, and a "COOKED" stamp treatment for bad grades. The backend is the real technical core: a dual-LLM architecture where Groq runs as the primary engine for speed, and if it fails in any recoverable way, rate limiting, timeout, network error, a 5xx, or malformed output, the system automatically falls back to Gemini, using schema-constrained JSON output so the response shape is always identical no matter which provider answers. The frontend never knows or cares which model responded. Supabase manages the takes table and a real state lifecycle, pending to settled, with Row Level Security policies controlling what the anonymous client can read, insert, and update. Live Scores pulls from public ESPN scoreboard endpoints server-side, normalized and cached, with full defensive fallback if the unofficial endpoints ever go down. We built the whole thing with Claude Code as our terminal-based pair programmer, working through one extended session.

Challenges we ran into

Cross-model schema locking. Getting Groq and Gemini to reliably return identical, complex JSON shapes, without one of them wrapping it in markdown or inventing keys, took real iteration, especially once we added a third response mode (Settle) on top of the original two. Voice tuning. We wanted the AI to sound like a sharp, funny sports-bar friend, not a corporate assistant and not a caricature. That meant explicitly banning clichés, em-dashes, and stock phrases in the system prompts, and backing every roast with real reasoning instead of empty trash talk. Multiple AI tools stepping on each other. Early on, we let a second AI directly generate and swap in UI files while Claude Code was also mid-build on the same codebase. It broke the app. We recovered with git and learned the real lesson fast: other AI tools are great for ideas and prompt-writing, but only one tool touches the actual code. Unofficial API resilience. ESPN's public scoreboard endpoints aren't documented or guaranteed. We built Live Scores to fail gracefully, cached, defensive, per-league error isolation, so a single broken endpoint never takes down the whole feature.

Accomplishments that we're proud of

Building a genuine three-mode AI lifecycle, predict, challenge, settle, instead of a single-shot chatbot gimmick. A resilient, invisible AI fallback architecture that a user would never notice failing. Nuanced grading that gives real partial credit instead of binary right-or-wrong. A distinct, cohesive visual identity, chalk-sketch borders, broadcast styling, that doesn't look like a generic AI wrapper. And getting all of it, including live external data and a shareable output, working and deployed solo in one hackathon.

What we learned

Negative instructions to an LLM ("don't sound corporate") are far weaker than a positive, specific persona with concrete banned phrases and worked examples. Strict JSON schema enforcement across two different providers is the only reliable way to build real UI on top of generative text. And keeping a hard boundary between "tools for ideas" and "the one tool that touches code" is the difference between fast iteration and a broken app at 2am.

What's next for Cooked

Auto-settling takes by matching them against real completed games from our live scores data, instead of manual entry. Global leaderboards ranking users by their actual take accuracy. Deeper multi-sport coverage and richer statistical grounding in every verdict.

Built With

Share this project:

Updates

Submission history