Driving-test practice that mirrors Chile's official exam
El Profe Ariel teaches driving students across Chile and needed them practising under the real exam rules. We built a web and mobile platform with a per-licence question bank, local payments and digital books he manages himself.
Driver education — theory test preparation, Chile

The brief
Ariel teaches driving in Santiago de Chile and has students all over the country. What he needed was simple to state and hard to find off the shelf: practice exams that behave exactly like the official test. For a class B licence that means 35 questions in 45 minutes, three of them worth double points, and a pass mark the student either reaches or doesn't. Every other licence class has its own rules. Generic quiz apps don't model that, and no existing product covered the seven Chilean licence classes he teaches.
The selection logic mattered too. He didn't want questions drawn at random — he wanted the exam weighted towards the material students actually get wrong, with the rest filled in from complementary topics. That is teaching judgement encoded in software, and it only works if the teacher controls the inputs.
He also needed to run the business side himself: edit the question bank for any licence class, add images and answer explanations, change prices and plans, and sell his preparation books — one per licence class — without commissioning a new build or shipping a new app version every time. On top of that, payments had to work the way people pay in Chile on the web, and separately follow the app stores' own rules for purchases made inside the app.
Finally, he wanted a free daily exam as a way to bring new students in, and a report telling him which questions were failed most often so he could reinforce them in class.
How we built it
One codebase for web and mobile
We set up a monorepo with the web app in Next.js, the mobile app in Expo for iOS and Android, and a shared package holding the API client. The exam rules — timing, scoring, double-point questions — are written once in the backend and consumed identically by both. There was no appetite for maintaining two versions of the same logic and letting them drift apart.
An exam engine that reproduces the official test
Questions are selected by weighted priority: 60% from the high-priority pool, 40% complementary. The engine handles the timer, double-point questions, score calculation and a PDF of the result. Behind it sits a question bank organised by licence class — B, C, D, A2, A3, A4 and A5 — fully editable from the admin panel, with an image and an answer explanation per question.
Two payment rails, one catalogue
Transbank Webpay handles web payments with a PDF receipt; in-app purchases go through App Store and Google Play with a webhook confirming each one. Codes can also be redeemed on the web. We deliberately decoupled what a customer buys from what it grants access to, so plans, combos and store products can be corrected from the panel without touching code or republishing the app.
Digital books that can be updated safely
Each licence class has its own book, read page by page inside the app. The PDF is rasterised and stamped with a per-user watermark, and each edition is published atomically and resumably — so Ariel can update a book without leaving anyone stuck halfway through an older version. Screenshot blocking, device tracking and strict per-user isolation, covered by tests, protect the content.
Free daily exam with a teaching report
One edition per licence class each day, one attempt per person. It works as a way in for new students, and it feeds an aggregated per-question report that tells Ariel exactly which material to reinforce. The platform runs with separate staging and production environments, script-based deploys, and automated tests across the backend, the app and end-to-end on the web.
Results
Students across Chile practise under the real exam rules; 18,500 of those exams were taken in the last 30 days.
Published on both stores from a single codebase.
1,210 Webpay payments on the web and 240 in-app purchases through the stores.
Ariel maintains the full bank himself from the admin panel — images and explanations included.
Plus end-to-end tests on the web, which is what makes continuous development on a live product safe.
Plans, combos and the seven digital books are managed from the panel — changing the offer no longer requires a new app release.
In production and under active development since April 2026.
Stack
- Django 5.1
- Django REST Framework
- PostgreSQL 16
- Next.js 16
- React 19
- Expo 54 / React Native
- TypeScript
- Tailwind CSS
- Transbank Webpay
- In-app purchases (App Store and Google Play)
- AWS (EC2, S3)
- Docker