Quiz Fight

En konkurrencepræget quiz — bygget om fra bunden.

Klatr i graderne gennem hurtige, head-to-head-dyster. Bygget og skibet af Halfdan Harring som én React/TypeScript-kodebase til iOS og web — live i App Store.

Platforme
iOS (live) & web
Sprog
Dansk & engelsk
Spørgsmål
500.000+ AI-genererede
Emner
185 emneverdener
Kodebase
Én React/TypeScript
Backend
~126 Cloud Functions

Hvad er Quiz Fight

Quiz Fight er et konkurrencepræget quiz-spil, hvor man klatrer i graderne gennem hurtige dyster ét-mod-ét. Det er bygget som én React/TypeScript-kodebase, der skibes til iOS (live i App Store), web og er Android-klar — fra én kilde til sandheden.

Hele spillet er designet omkring én sammenhængende visuel identitet — varme, bløde farver, afrundede kort, legende polish og mikro-animationer — med nærmest obsessiv opmærksomhed på haptik, overgange, tomme tilstande og den samlede “game-feel”. Det findes på dansk og engelsk.

Spillet

Sådan spiller man

Online Quiz

Live 1v1

En live dyst mod en rigtig modstander. Overlist hinanden over en kort række spørgsmål — cirka tre minutter pr. kamp.

Streak Run

Ét liv

Endeløs mode med kun ét liv: ét forkert svar, og det er slut. Ren “hvor langt kan du nå”.

Guess the Clay

Clay League

Nyere mode, hvor du skal gætte et ler-skulptureret brand og klatre i Clay League — seks runder på cirka to minutter.

Friend Rooms

Privat

Privat gruppespil med vennerne — med venneliste, chat og aktivitetsfeed.

Fremgang sker gennem grader, RP (rang-point), gems, win-streaks, skjolde og medaljer, man kan låse op — med sæsoner, daglige udfordringer og et premium-tier. Og spillet er server-autoritativt og snyde-resistent: al logik, scoring og belønning kører på backenden, og de rigtige svar sendes aldrig til enheden, før du har svaret. Klienten kan bogstaveligt talt ikke “se” svaret på forhånd.

Under motorhjelmen

Sådan er den bygget

Frontend
React 19, TypeScript (strict), Vite 7, Tailwind CSS 4, Framer Motion, React Query og react-i18next til dansk/engelsk.
Native shell
Capacitor 8 pakker den samme web-app som en rigtig iOS-app: Apple/Facebook-login, push, haptik, crash-rapportering, in-app review og RevenueCat til køb.
Backend
Firebase — Auth, Firestore, Cloud Functions og Hosting. ~126 Cloud Functions delt i fire kodebaser (spil, socialt, admin, drift), alle i én region (europe-west1).
Build & deploy
Functions bundles med esbuild (~100 ms) og deployes med et change-detection-script, der kun genudruller de functions, der rent faktisk er ændret — sekunder i stedet for et fuldt deploy.
Kvalitet
Strict TypeScript, ESLint + Prettier, Vitest-unittests, Playwright smoke-tests, i18n-nøgleparitet og egne “guard”-scripts, der fælder buildet, hvis kerneregler brydes.
Indhold
Quiz-spørgsmål genereres og kurateres gennem dedikerede (OpenAI-assisterede) scripts til fakta-banker og spørgsmålssæt — så biblioteket bliver ved med at vokse.

Erfaringen

Bygget om fra bunden

Quiz Fight blev genopbygget fra grunden efter en første generation, der lærte mig hårde lektier om, hvad der faktisk får et quiz-spil til at hænge fast. Her er, hvad omskrivningen ændrede:

  1. 01

    Fokuserede spillet ned — ikke op

    Tidligere versioner spredte sig ud i mange halvfærdige modes. Omskrivningen skar støjen væk og satsede på nogle få, der faktisk er sjove: live 1v1, Streak Run, Guess the Clay og Friend Rooms.

  2. 02

    Ét designsprog i stedet for mange

    En lappedyne af stilarter og separate desktop/mobil-layouts blev til ét responsivt design. Mobil-designet er kilden til sandheden, præsenteret på en centreret “scene” på brede skærme. Ingen forgrenet desktop-UI.

  3. 03

    Flyttede tillidsgrænsen til serveren

    Spillogik, scoring og økonomi blev fuldt server-autoritative og idempotente — hver belønning løber gennem én replay-sikker “stat wallet”. Det fjernede snyd på klienten og double-spend-fejl. Rigtige svar sendes aldrig til enheden, før du har svaret.

  4. 04

    Re-arkitekterede backend for fart

    Delt i fire kodebaser med esbuild-bundling og hash-baserede change-only-deploys, så det gik fra et langsomt fuldt deploy til sekunder at skibe en rettelse.

  5. 05

    Hærdet håndværkslag

    Strict typing, automatiske tests, i18n-paritet og guard-scripts — plus førsteklasses iOS-polish (safe-area, haptik, native login, push). Forskellen på “en web-app i en indpakning” og en app, der føles native.

Resultatet er et slankere, hurtigere, mere pålideligt og mere poleret Quiz Fight — den samme idé, bygget igen med alt, jeg lærte første gang.

Prøv det

Din næste modstander venter allerede

Gratis at spille. Hent Quiz Fight, eller spil direkte i browseren.