World Cup 2026 — Live Score & Pick'em Platform
Full-stack web app for following the 2026 FIFA World Cup with live scores, match watchability ratings, multi-user pick'em contests, and real-time news aggregation.
World Cup 2026 — Live Score & Pick’em Platform
Built with AI-assisted development using Claude Code · Live at score2026.dev
Overview
A full-stack web platform for following the 2026 FIFA World Cup. It combines live match data, a watchability rating algorithm, a competitive pick’em game, and aggregated news — all updating in real time without full page refreshes.
Deployed on Railway at score2026.dev.
Tech Stack
- Frontend: React 18, Vite, Tailwind CSS 4, TypeScript
- Backend: Express.js, Node.js 20+
- Real-time: Server-Sent Events (SSE) — live updates stream to clients without polling
- Data Sources: ESPN API (live scores), The Odds API (bookmaker odds), RSS feeds (news)
- Deployment: Railway with persistent volumes for pick’em data
Key Features
🌟 Match Watch Ratings
An algorithm scores every match 1–5 stars to help decide which games are worth watching. Factors: odds closeness (25%), stage stakes (20%), team quality (15%), expert hype (15%), expected goals (10%), rivalry (10%), plus big-match bonuses. Adjusts for local timezone and sleep penalty.
📊 Live Scores & Bracket
Real-time score updates from ESPN (every 1–2 minutes). Includes live minute/stoppage time display, group stage standings, and a knockout bracket that resolves dynamically as teams advance — no manual updates needed.
🎯 Pick’em Game
Multi-user competitive predictions league with a leaderboard. Picks lock 10 minutes before kickoff. Scoring: 3 points for exact score, 1 point for correct winner/draw. User data stored per-user with SHA256-hashed PIN authentication.
📰 News Feed
RSS aggregator from major sports outlets with two-tier filtering — FIFA signals first, then team name and context. Hard blocklist prevents cricket/rugby/F1 false positives. Displays relative timestamps.
📈 Odds & Analytics
Real bookmaker odds refreshed every 3 hours, with FIFA rankings as fallback. Advanced analytics dashboard with expected goals and team comparisons.
Technical Highlights
Dynamic Knockout Resolver — All 32 knockout matches start as "TBD". A resolver computes group standings on every request and dynamically maps slot references (1A, 2B, W73) to actual qualified teams without mutating any files.
ESPN Naming Normalization — Handles quirks like “Türkiye” (not “Turkey”), “Bosnia-Herzegovina” (with hyphen), “Congo DR” (not “DR Congo”) that silently break live score matching if missed.
Timezone-Aware Display — All times respect the user’s timezone (defaults to Asia/Jerusalem), with sleep penalty adjustments to watch ratings based on local kickoff time.