About wchub.app - World Cup companion that ran the full 2026 tournament
Schedule, office prediction pools, daily game, Sleep Score. Ran all 104 matches.
Overview wchub.app was built for the FIFA World Cup 2026 and ran it end-to-end: Jun 11 to Jul 19, all 104 matches, including a final decided in extra time. Every result was recorded automatically by the live pipeline. The site is still up as an archive and shows the champion banner. It is a complete companion product, not a demo: Schedule - all matches in the visitor's timezone, team filter, results with spoiler toggle, Google/Apple/.ics export, group tables with the official FIFA tiebreaker order, "what does my team need to advance" calculator, interactive playoff bracket Prediction pool - shareable-link office pools, exact-score or winner-only mode, per-match deadlines enforced server-side, knockout multipliers, live leaderboard with per-tier outcome counts, champion pick with bonus, late-stage spoiler protection, magic-link recovery Daily game - Wordle-style "guess the player": 6 attempts, 5 hints, 1,244 real squad players, deterministic daily seed, streaks, emoji-grid share Sleep Score - viral card: how much sleep a fan loses following their team in their timezone; OG image, .ics alarms for late matches Stadium guides - 16 venue pages: transit, bag policy, nearby places Email - double opt-in subscribers, pre-kickoff reminders, weekly + matchday digests (implemented and unit-tested; see Known limitations) Why this is worth more than a starter kit Anyone can scaffold a schedule page. What took three months and a live tournament to get right: Results pipeline that survived production. Joins football-data.org by team-code pair (upstream kickoff times drift by hours), handles extra time vs penalties correctly, skips a winnerless shootout instead of freezing the batch. Each of these was a real incident, fixed, with a regression test. Knockout bracket resolver. Pure function that fills R32 to Final from recorded winners; drives the schedule, pool scoring and the bracket popup. Scoring mirrored in TypeScript and SQL with parity tests - the DB trigger and the UI can't disagree. Security audit closed: RLS on every table, column-level grants hiding emails/tokens, SECURITY DEFINER RPCs with ownership checks and searchpath lockdown, rate limiting, security headers. 707 tests (583 Jest unit/component + 124 Playwright e2e), CI on every PR (lint, typecheck, unit, build). 32 database migrations, every one applied to production and registered; supabase db push on a fresh project just works. Tech stack Next.js 16 (App Router, ISR), React 19, TypeScript 6, Tailwind 4 + shadcn/ui, Zustand, Supabase (Postgres 17, RLS, RPCs, Realtime), Resend, Upstash rate limiting, Vercel, football-data.org (free tier is enough). Static tournament data lives in JSON; the DB is only touched by pools, results and email. Adapting to the next tournament This is the section that matters for the Women's World Cup 2027 (Jun 24 - Jul 25, Brazil, 32 teams) and Euro 2028 (Jun 9 - Jul 9, UK/Ireland, 24 teams). The README has the step-by-step; in short: Regenerate four JSON files (matches, venues, rankings, players - a scraper script is included). Change the knockout stage chain (a 32-team tournament starts at R16; the code is annotated where it's declared). Re-seed two reference tables from the new fixtures (migrations are templated). Rename the wc26 localStorage keys and the brand strings. Realistically 1-2 weeks of work for one developer to be WWC-ready, versus months to rebuild. What's included Full source (private GitHub repo, 15K lines TS/TSX, 212 files) Domain wchub.app ("WC" works for any World Cup) 32 Supabase migrations + migration template + business-rules doc Product README with environment table, scheduler job table, next-tournament guide 1,300-line build log: every decision, incident and PR from April to October 2026 12 design specs, 2 research reports, completed implementation plans Scripts: squad scraper, player-dataset generator, sleep-score verifier 30-min handover call Not included: user data. Participants, subscribers and auth users are deleted before transfer (GDPR); the 104 match results stay as demo data. No Vercel/Supabase/Resend accounts transfer - you deploy to your own. Known limitations (so you don't find them yourself) Email delivery was never exercised in production. The jobs were configured but 0 emails went out during the tournament; the cause isn't recoverable post-hoc. The module is implemented and unit-tested; treat it as untested at scale. Tournament format is encoded, not configured. The knockout chain is declared once and referenced in four modules; the README names them. OG images, .ics export and email templates still render knockout placeholders - only the schedule, pool and bracket resolve them. No mobile app - web only, responsive; an installable-PWA plan is specced but not built. "World Cup" is a FIFA trademark. The site carries "Not affiliated with FIFA" on every page and a non-gambling clause in the terms; keep both. Why I'm selling I built it solo to learn agentic development on a real deadline. The product...
For sale
What's included
All related design work
32 Supabase migrations + migration template + business-rules doc Product README (environment table, scheduler job table, next-tournament guide) 1,300-line build log: every decision, incident and PR, April-October 2026 12 design specs, 2 research reports, completed implementation plans Scripts: squad scraper, player-dataset generator, sleep-score verifier The 104 recorded match results as demo data 30-minute handover call Not included: user data (participants, subscribers, auth users are deleted before transfer - GDPR). Vercel / Supabase / Resend accounts don't transfer; you deploy to your own.
Reason for selling
I am no longer interested in working on this project and hope someone else finds it more interesting than I do.