World Cup Chrome Extension
A Chrome side-panel extension that lets fans follow the 2026 World Cup, live scores, standings, brackets, team pages.
Core trick
A Poisson/Elo model sets baseline probabilities, and a web-search read may shift them by at most 12% after citation URLs are checked against returned results.
Description
A Chrome side-panel extension that lets fans follow the 2026 World Cup, live scores, standings, brackets, team pages. The feature I built for Build Day is the Insights tab: an AI prediction engine for every match.
The problem: "AI predictions" online are black boxes. They emit a confident number and often a fabricated source. Fans can't tell whether a forecast reflects real injuries and form, or whether the model just made it up.
My Insights feature is built so a prediction is auditable by construction:
1. A deterministic Poisson/Dixon-Coles + Elo model computes the baseline win/draw/win probabilities and a scoreline from historical data, the math is never left to the LLM.
2. Claude runs live web research (the web_search tool) across the open sports web, scoped to the last 7 days, injuries, form, lineups and writes cited analysis.
3. The model's read is blended into the statistical anchor within a capped ±12% band, so AI sentiment nudges the numbers but can never override the math.
4. Confidence, source count, and source agreement are derived deterministically, not self-reported by the model.
5. A hard validation gate rejects the prediction unless every citation URL is in that turn's real returned search results, probabilities sum to 1, the predicted outcome matches the argmax, and there are ≥2 independent source domains.
Proven live end-to-end on France vs Senegal: 63% / 22% / 16%, 2–1, medium confidence, backed by 17 real, clickable citations.
The result is a prediction fans can actually trust because they can follow every source behind it.
README excerpt
# World Cup Prediction Service A Python worker that produces **auditable, source-cited** match predictions for the FIFA World Cup 2026 and upserts them into Supabase `world_cup.match_predictions`. ## Setup ```bash # from apps/prediction-service/ uv sync # create .venv + install deps from uv.lock ``` ## Checks ```bash uv run ruff check . uv run ruff format --check . uv run pyright uv run pytest ``` ## Environment Copy `.env.example` → `.env` (gitignored, **never committed**). | Variable | Purpose | |----------|---------| | `SUPABASE_URL` | Supabase project URL | | `SUPABASE_SERVICE_ROLE_KEY` | Service-role JWT (sole writer) | | `ANTHROPIC_API_KEY` | Anthropic key (billable web_search calls) | | `PREDICTION_MODEL` *(optional)* | Override model (default `claude-sonnet-4-6`) |