In ontwikkeling, nog niet in de stores

Oefenen voor het theorie-examen, als een spel met een eerlijke slaagkans

Een iOS- en Android-app voor het theorie-examen auto: korte rondes met punten en een wekelijks klassement, terwijl de slaagkans bewust eerlijk blijft.

Rol
Alles, alleen gebouwd
Periode
Juni 2026 tot nu
Stack
TypeScript, React Native, Expo, Fastify, PostgreSQL
Status
In ontwikkeling
Home: level, reeks, dagdoel en de knop Speel
Uitslag van een ronde: punten, raak, combo en XP
Home en de uitslag van een ronde. Demo-data.

Het probleem

Leerlingen zijn zenuwachtig voor het theorie-examen, oefenen in korte stukjes op hun telefoon, en een herexamen kost geld. Bestaande oefenapps voelen als studeren of als een gekocht template.

Wat ik bouwde

Elke vraag wordt een snelle ronde met punten, combo's, levels, een dagelijkse reeks en een wekelijks klassement, terwijl één getal, de slaagkans, bewust eerlijk blijft. Fouten komen via spaced repetition terug in een eigen wachtrij.

De app werkt offline, want alle vragen en beelden zitten erin, en synchroniseert de voortgang met een eigen backend zodra je inlogt. De vragenbank: 2.616 vragen, samengevoegd, ontdubbeld en gecontroleerd in 26 categorieën.

Wat er technisch toe doet

  1. Een klassement waar valsspelen niet loont

    De app rekent de punten zelf uit voor de animatie, maar de server leidt uit dezelfde regels af wat een ronde hoogstens kan opleveren. Een aangepaste app kan nooit meer insturen, en de weekgrens volgt de echte tijdzone, ook rond zomertijd.

  2. Offline eerst, zonder dubbel tellen

    Een afgeronde ronde wordt eerst op de telefoon vastgelegd en wacht in een begrensde wachtrij tot de server hem aanneemt. Dezelfde ronde opnieuw sturen doet niets, dus een nieuwe poging telt nooit twee keer.

  3. Synchroniseren tussen apparaten zonder verlies

    Voortgang reist mee met een versienummer; een verouderde write wordt opnieuw opgehaald en samengevoegd. Oefensessies zijn feiten met een eigen id, dus twee apparaten voegen samen zonder dat totalen verdwijnen of verdubbelen.

  4. Eigen controle van in-app-aankopen

    De server controleert aankopen uit de App Store en Google Play zelf, en één unieke sleutel per transactie voorkomt dat dezelfde aankoop twee keer premium oplevert. Een tweede betaalrail via Mollie geeft toegang via dezelfde functie, zodat beide nooit uit elkaar lopen.

  5. Een API die niemand anders laat meekijken

    Het sessietoken bepaalt wie je bent; de app stuurt geen eigen gebruikers-id mee. Daarbij bcrypt voor wachtwoorden, rate limits per route en unieke bijnamen met een lijst gereserveerde namen.

  6. Verkeerssituaties uit een beschrijving

    Een kleine JSON-beschrijving van een verkeerssituatie wordt in Blender als exacte opstelling gerenderd, in 30 stijlen zoals nacht en regen. Dit is een prototype, getest op 30 vragen.

Meetstaat

Geteld in de repository, niet geschat.

vragen, samengevoegd en gecontroleerd
2.616
categorieën
26
schermen in de app
12
testcases in app en server
566
databasetabellen
7
Hoe gemeten
python3: len(json.load(open('src/data/questions.json')))
python3: len(json.load(open('src/data/categories.json')))
find src/app -name '*.tsx' ! -name '_layout.tsx' ! -name '+*' | wc -l
grep -rn "it(\|test(" server/test src --include=*.ts --include=*.tsx | wc -l
grep -c "pgTable(" server/src/db/schema.ts

Gemeten op 27-10-2026 in de eigen repository.

Iets vergelijkbaars nodig, of een team dat zo'n systeem bouwt?

info@bitvire.com