Theorio: een app voor autotheorie met een eigen 3D-verkeersmotor
Ons eigen product. Een Expo-app voor het Nederlandse theorie-examen auto waarin elke verkeerssituatie wordt gegenereerd en opgelost door een regelmotor, in de app getekend in three.js en uitgelegd met het wetsartikel erbij. Je rijdt er ook in 3D door een Amsterdamse grachtenstraat.
1.200
gegenereerde 3D-verkeerssituaties
2.370
oefenvragen in vier banken
140
gevaarfoto's uit 338 kandidaten
30
proefexamens in de echte opzet
Uitdaging
Leren voor het theorie-examen is meestal een vaste set plaatjes uit je hoofd leren. Je leert het plaatje, niet de regel, en bij de eerste onbekende kruising op het examen loop je vast. Wij wilden een cursus die eindeloos veel kruisingen kan laten zien, altijd het goede antwoord weet en kan zeggen waarom, met de wet erbij. En hij moest werken waar mensen echt leren: op een telefoon, een paar minuten per keer. Dat vroeg om vier lastige dingen: voorrangsregels die precies genoeg zijn om uit te rekenen, beelden die uit data worden getekend, een vragenbank die klopt als de wet verandert, en 3D dat in een telefoon-app zelf zit.
Oplossing
Eerst de motor
We schreven de voorrangsregels als een geteste motor voordat we iets tekenden. Een situatie is data, het antwoord wordt berekend en elke stap in het antwoord wijst naar zijn artikel.
Tekenen uit data
Een three.js-renderer bouwt elke situatie op uit basisvormen. Hij tekent alleen wat de motor heeft beslist, van bovenaf met pijlen of van achter je eigen auto.
Pijplijnen voor inhoud
Geschreven vragen worden opgesteld tegen opgeslagen wetstekst en geverifieerd. Gevaarfoto's worden gegenereerd uit geschreven specificaties en door een reviewer gekozen aan de hand van een checklist.
Eén app in plaats van een website
We hebben de interface opnieuw gebouwd als één Expo-app en de webversie uitgezet. De motor, de renderer en de API zijn gebleven; beide 3D-scènes zitten in de app gebundeld.
Een cursus en een rit
Veertien hoofdstukken, elk een korte weg met een video, theorie, drie rondes vragen, een 3D-rit en een toets, plus dertig proefexamens in de echte opzet. Drie hoofdstukken en één examen zijn gratis.
Resultaat
Theorio is in ontwikkeling en nog niet uitgebracht, dus er zijn nog geen resultaten van leerlingen te melden. Wat er vandaag staat is de app die draait in de iOS-simulator, in het Nederlands en Engels, tegen zijn eigen API: de introductie, de Route met veertien hoofdstukken, alle vier de vragenbanken met hun wetsverwijzingen, bordenkaarten op een gespreid schema, de Amsterdam-rit en dertig proefexamens. Nog open zijn betalen in de app, de lesvideo's, de tekeningen in de theorie, accounts, herinneringen en meer straten om door te rijden.
(01)
Een regelmotor die elk antwoord zelf afleidt
De meeste theorie-apps bewaren een plaatje en de letter van het goede antwoord. Theorio bewaart voor zijn verkeerssituaties geen van beide. Een situatie is een klein datamodel: een kruising met maximaal vier takken, elk met zijn wegtype, bord, verkeerslicht of zebrapad, en twee tot vier weggebruikers met waar ze vandaan komen en waar ze heen gaan.
De motor kijkt eerst welke routes elkaar echt kruisen of samenkomen. Voor elk paar dat botst past hij de Nederlandse voorrangsregels toe in een vaste volgorde: voorrangsvoertuigen, zebrapaden, uitritten, borden, onverharde wegen, trams, verkeer naast je, de voorrangsweg met een bocht, afslaan en als laatste verkeer van rechts. Verkeerslichten en rotondes hebben daarbovenop hun eigen regels. Die beslissingen per paar worden gestapeld tot een volgorde van wie wanneer gaat.
Omdat het antwoord wordt afgeleid, krijg je de uitleg erbij. In de app is dat het antwoordscherm: genummerde labels op de voertuigen, één regel per weggebruiker en onder elke regel het wetsartikel dat de doorslag gaf.
- situaties in de gegenereerde bank
- 1.200
- soorten situaties
- 7
- voorrangsregels
- 12
- tests op de motor
- 52
01
Model
Kruising, borden, lichten en twee tot vier weggebruikers, gecontroleerd zodat onmogelijke situaties afvallen.
02
Conflicten
Welke routes kruisen of komen samen. Wie elkaar niet tegenkomt, hoeft niet op elkaar te wachten.
03
Beslissen
Per botsend paar bepaalt de hoogste regel die geldt wie voorrang verleent.
04
Volgorde
De beslissingen per paar worden één volgorde. Gelijke standen en patstellingen vallen af.
05
Uitleg
Elke stap draagt zijn regel en het artikel waar die uit komt, in het Nederlands en Engels.




(02)
Dezelfde three.js-scène, ingepakt in de app
De renderer is een apart pakket dat alleen tekent. Hij krijgt een situatie en een volgorde van de motor en beslist zelf nooit over voorrang, zodat het beeld het antwoord nooit kan tegenspreken.
Er zijn geen modelbestanden. Auto's, trams, scooters, fietsers, voetgangers, wegen, stoepranden, haaientanden, zebrastrepen, borden en verkeerslichten worden allemaal in code opgebouwd uit basisvormen. Voor de app bundelen we die renderer tot één losstaande pagina van ongeveer 640 kB. Die zit in de app zelf en draait in een webview, dus voor het tekenen van een kruising is geen server en geen download nodig.
React Native geeft de situatie door als data en krijgt tikken terug als berichten: een auto aantikken in het beeld kiest hetzelfde antwoord als de knop eronder. De camera heeft twee standen, een overzicht met een pijl voor elke route en een beeld van achter je eigen auto voor vragen over wat je moet doen. Alles om de scène heen, van de antwoordknoppen tot het feedbackpaneel, is native.




(03)
Een rit door Amsterdam
Een kruising van bovenaf leert je de regel. Het leert je niet om het moment te zien aankomen. Daarom heeft de app ook een rit: je volgt je eigen auto door een straat langs de gracht met 30 km/u, langs grachtenpanden, geparkeerde auto's, woonboten en fietsers.
De rit stopt twee keer. Eerst voor een gevaar: een voetganger stapt de weg op en je kiest tussen remmen, gas loslaten en niets doen. Daarna bij de brug, waar een tram oversteekt en jij zegt of die voor mag. Dat tweede antwoord ligt niet vast in een script. De kruising gaat naar dezelfde regelmotor als elke andere situatie en de rit speelt verder vanaf wat je hebt geantwoord.
De straat is gebouwd zoals de kruisingen: in code. De gevels, de bomen, de tram en de klinkers met hun texturen worden gemaakt op het moment dat de rit laadt, in ongeveer 2.600 regels TypeScript en zonder één model- of afbeeldingsbestand. Voorlopig is er één straat. Die is een halte op de Route en een tegel op het startscherm.
- straat tot nu toe, een Amsterdamse gracht
- 1
- stops: een gevaar en een kruising
- 2
- model- of afbeeldingsbestanden
- 0
- km/u, zoals het zonebord aangeeft
- 30






(04)
Een cursus in de vorm van een weg
De app begint met een taalkeuze en drie korte vragen: wanneer je examen is, hoeveel minuten per dag je hebt en of je de Route wilt volgen of los wilt oefenen. De antwoorden worden een plan dat je later kunt aanpassen.
De Route heeft veertien hoofdstukken. Elk hoofdstuk is een korte kronkelweg met vijf haltes: een video, de theorie, drie rondes van tien vragen, de 3D-rit en een toets die je haalt met acht van de tien goed. Het startscherm laat zien waar je bent op de Route en wat er vandaag klaarstaat, met een tegel voor alles wat je los kunt oefenen.
Een reeks, punten en een dagdoel houden de stand bij. De theorie kun je ook los lezen, per hoofdstuk, en je kunt erin zoeken.
- hoofdstukken op de Route
- 14
- haltes per hoofdstuk
- 5
- rondes van tien vragen
- 3
- om een hoofdstuktoets te halen
- 8 / 10








(05)
Geschreven vragen, elk gekoppeld aan een wetsartikel
De geschreven vragen dekken wat een 3D-situatie niet kan: maximumsnelheden, parkeren, verlichting, documenten, alcohol, lading. We hebben de relevante Nederlandse verkeerswet lokaal opgeslagen, tien teksten uit de publicatie van de overheid zelf, gesplitst per artikel.
Elke vraag wordt met AI opgesteld tegen de opgeslagen tekst van één artikel en daarna gecontroleerd door een onafhankelijke verificateur. De vraag houdt zijn bron en artikelnummer, en de leerling ziet die verwijzing onder de uitleg.
Een automatische test controleert elke vraag bij iedere wijziging: het aangehaalde artikel moet bestaan, de foto of het bord moet bestaan, de antwoorden moeten compleet zijn en beide talen moeten aanwezig zijn. Een vraag die je mist komt dezelfde dag terug en daarna na één, twee, vier, zeven en veertien dagen. De 154 borden zijn ook kaarten: je beoordeelt elke kaart met een van vier knoppen en het gangbare SM-2-schema bepaalt wanneer je hem weer ziet.
- geschreven vragen
- 730
- wetsartikelen opgeslagen
- 2.888
- bordenvragen uit 154 borden
- 300
- talen, Nederlands en Engels
- 2
01
Wet opslaan
Tien teksten bewaard per artikel, met de datum van de gebruikte versie.
02
Opstellen
AI stelt een vraag op tegen één artikel, in een van drie vormen.
03
Verifiëren
Een onafhankelijke verificateur toetst het concept aan hetzelfde artikel.
04
Testen
Automatische controles op verwijzingen, beelden, antwoorden en vertalingen.
05
Review
Gemelde en vaak gemiste vragen komen in een reviewrij in de API.






(06)
Gevaarfoto's samplen in plaats van schieten
Gevaarherkenning vraagt om foto's vanaf de bestuurdersstoel: een bal die tussen geparkeerde auto's rolt, een voetganger die een zebrapad op stapt, een tractor die de rijstrook voor je vult. Die veilig en legaal op Nederlandse wegen fotograferen is traag en duur, dus we genereren ze.
Elke scène begint als een geschreven specificatie: wat de foto laat zien, hoe hard je rijdt, de juiste reactie en een checklist van wat zichtbaar moet zijn. Per specificatie genereren we twee of drie kandidaten en leggen die naast de checklist. Een reviewer die de specificatie niet schreef kiest er één, of keurt ze allemaal af.
We deden eerst een proef met twee beeldmodellen op dezelfde vijf prompts. Het ene voldeed drie van de vijf keer aan de checklist, het andere vijf van de vijf, en daarmee was de keuze gemaakt. De meest voorkomende reden om een foto af te keuren bleek afstand: het model tekent bijna alles twee tot vier keer dichterbij dan gevraagd, en dat verandert of remmen het goede antwoord is.
- scènes gespecificeerd
- 159
- kandidaatfoto's gegenereerd
- 338
- foto's in de app
- 140
- remmen, gas los, niets
- 49 / 45 / 46


(07)
Proefexamens in de echte opzet
Dertig genummerde proefexamens volgen de opzet van het echte examen: vijftig vragen in dertig minuten, geslaagd bij vierenveertig goed. Elk examen mengt regelvragen, borden, 3D-situaties en gevaarfoto's, en er wordt niets nagekeken tot je inlevert.
Een kaart van vijftig stippen laat zien welke vragen beantwoord, open of gemarkeerd zijn en springt naar elke vraag. Pauzeren bewaart je antwoorden, maar de klok loopt door, net als in de examenzaal. Na afloop is de uitslag uitgesplitst per onderdeel en gaat elke fout met zijn uitleg naar de herhaalrij.
- genummerde proefexamens
- 30
- vragen per examen
- 50
- minuten op de klok
- 30
- goed om te slagen
- 44




Next step
Wil je zoiets ook?
Vertel ons over jouw versie van dit probleem.

