HeadToHead – Real-time Fodbold Spil
Et interaktivt fodboldspil med realtidsdata, social konkurrence og en skalerbar arkitektur, der håndterede 10.000+ requests om dagen. Lanceret som web og native iOS — midlertidigt på pause mens jeg arbejder på store opgraderinger.
Konteksten
HeadToHead startede som et eksperiment: kan man bygge en sjov, social fodboldoplevelse omkring realtime-match-data? Ikke fantasy football. Ikke betting. Bare et spil, der tager live-data fra en kamp og lader to venner duellere om, hvem der gætter bedst på næste mål, næste gule kort eller næste hjørnespark.
Det blev til en hel produktstack: web-app, native iOS-app i App Store, realtime-match-feeds, leaderboards og asynkrone duels mellem venner.
De tekniske udfordringer
1. Realtime-pipeline til match-data
Sports-data-API'er er hverken konsistente eller billige. Jeg byggede et caching-lag, der aggressivt genbruger data på tværs af brugere — ét API-kald betjener mange samtidige spillere. WebSockets pusher events ud til alle klienter, så snart der sker noget i kampen.
2. Asynkrone duels mellem venner
Du og en ven behøver ikke at være online samtidig. Du afgiver dine gæt, han eller hun afgiver sine senere, og resultatet beregnes, når kampen er forbi. Det krævede et solidt state-machine-design omkring hele duellens livscyklus.
3. 10.000+ requests om dagen på et lille budget
Som hobbyprojekt skulle driften være billig. Firebase Functions med smart cold-start-undgåelse, CDN-caching af det meste statiske indhold og en gradueret API-poll-frekvens (hurtigere når kampen er i gang) holdt regningen helt i bund.
4. Native iOS sideløbende med web
Som med QuizFight delte jeg backend mellem React-web og en SwiftUI-app i App Store. Login, leaderboards og duels fungerede sømløst på tværs af platforme.
Arkitekturen
Resultatet
- Live i produktion med både web og native iOS-app
- 10.000+ requests om dagen — skaleret uden bekymringer om infrastruktur
- Realtime-match-events leveret via WebSockets
- Asynkrone duels: vind mod venner uden at I behøver være online samtidig
- Driftsomkostningerne holdt minimale via aggressiv caching og smart polling
- iOS-app i App Store med Apple Sign In
Hvorfor på pause?
HeadToHead er midlertidigt taget offline, mens jeg arbejder på en større genopbygning: ny server-arkitektur, forbedret mobil-oplevelse og helt nye gameplay-mekanikker. Den oprindelige version validerede idéen — nu er det tid til at bygge fundamentet til version 2.
Hvad jeg lærte
Realtime er svært, men det er det værd. Følelsen af at se sit gæt blive bekræftet i samme øjeblik et mål bliver scoret — det er selve produktet. Uden realtime ville HeadToHead bare være en quiz med forsinkelse.
Cache som om livet afhang af det. Eksterne API-omkostninger kan smadre en hobby-økonomi. Smart caching gjorde forskellen mellem "ikke bæredygtigt" og "kører for små kroner om måneden".
Det er okay at sætte på pause. Et produkt der står stille er bedre end et produkt der bliver forsømt. At sige "vi kommer tilbage med v2" er mere ærligt end at lade en gammel version dø langsomt.
Skal du bygge noget realtime?
WebSockets, smart caching og cross-platform — det er præcis den slags arkitektur, jeg har bygget før og kan bygge for dig.
Book 20 min. intro