Learn ATC
Developed together with our joint-venture partner Clesk Digital: a training platform for student pilots that combines an AI air-traffic-control simulator with structured lessons and the official exam questions for the PPL theory and the radio exams.
Challenge
Radio communication is learned by speaking. Phraseology on paper is one thing; answering a controller in real time with the right callsign, frequency and readback is another. Student pilots need a place to practise the conversation itself before they sit in the aircraft, next to the theory and the exam questions they have to pass anyway.
What we built
We built LearnATC as one platform in the browser. The AI simulator puts the student on frequency with a virtual controller along real or custom routes, in a beginner mode with suggestions or with pro settings for frequency changes, flight plan, radio noise and aircraft choice. Around it sit a listening trainer, a spelling trainer for the NATO/ICAO alphabet, scenarios without fixed solution paths, structured lessons that link the theory to matching exercises, and the question banks: the official ECQB-PPL questions, licensed from Aircademy, plus the BZF and AZF radio questions.
Three decisions shaped the build. First, almost everything runs over one WebSocket connection: the backend has 125 WebSocket controllers against 38 classic HTTP controllers, so a simulator reply, a quiz result or a progress update reaches the screen without the page asking for it again and again. Second, the Android app is not a second codebase: Capacitor builds it from the same Nuxt code as the website, so a feature ships to both at once. Third, the world map is our own: we build the vector base map for Europe and North America with Planetiler and serve it from our own tile server, styled for aviation with aerodromes and runways. The build was long and heavy on disk, but the map does not depend on a paid map service, and we can change the aviation layers ourselves.
Stack
The Blax Stack, WebSocket-first as always: Laravel and Nuxt in TypeScript with Tailwind CSS, MySQL, Docker and Traefik. The Android app is built from the same Nuxt code with Capacitor. Stripe handles payments, Tiptap the rich-text editing, MapLibre GL the maps, and a self-hosted Matomo the analytics. Everything runs on our servers at Hetzner in Germany.
Result
LearnATC is live at learn-atc.com. It runs in the browser without installation and as an Android app, offers more than 3,000 practice questions including the official ECQB-PPL bank, has questions in at least ten languages and is hosted in the EU. We develop it together with Clesk Digital and host and operate it on our servers, so the stack we recommend to clients is the one we run in production every day. What a reader can take from it: if your product is interactive, decide on live data at the start, and if you need an app, check whether it can come out of the code you already have before you plan a second one.

Want something like this for your business?
Tell us what you need. We will get back to you within one business day.

You talk to Fabian Wagner, founder
No sales desk in between: he reads every enquiry himself.
Prefer a call? +•• ••• ••• •• ••