← Work

Honing

A native iPhone app for the Dutch A2 civic integration exam. Spaced repetition over 1,032 cards, a simulator for all five parts, a plan from your exam date.

Track
built
Category
tool

Tools

  • Swift
  • SwiftUI
  • SwiftData
  • Node

A native iPhone app for the Dutch A2 civic integration exam. Solo project, SwiftUI over SwiftData, iOS 17 and up.

Passing the inburgeringsexamen means preparing for five separate parts: reading, listening, writing, speaking, and knowledge of Dutch society. Most learners study for it in the evenings, around work. The available material is scattered, and very little of it tells you whether you are actually ready.

A spaced repetition trainer over 1,032 cards in 35 topics, with seven drill types including listening and speaking. Every new card is taught before it is tested.

A full exam simulator: five parts, four complete forms each, in practice mode or as a timed mock. Practice questions are ordered adaptively, unseen first, then the ones you keep missing. Each part gets a readiness signal and a breakdown per skill.

A study planner that takes your exam date and splits the remaining days into a baseline phase, a building phase and a mock exam phase.

Fourteen graded readers sit beside all of it, with audio, per paragraph translation and comprehension questions, plus seven grammar sections with drills attached.

Sanne is an optional coach that answers questions about Dutch at A2 level. It runs on Apple's on device model and is grounded in a fixed set of verified grammar rules. Where the device cannot run it, the entry point is not shown at all, so the feature is absent rather than present and broken.

Engineering notes

The scheduling engine, the exam planner and the scoring are pure Foundation code, with no UI or database imports, so they run headless. Fifty unit tests cover them.

Content is generated, not hand written. A Node extractor reads the source material and writes three JSON bundles. Card ids stay stable across regenerations, so a content update never resets anyone's progress.

Speech uses two Apple backends behind one protocol: live on device transcription on newer systems, with a fallback for older ones. A single coordinator owns the audio session, so text to speech and the microphone cannot cut each other off.

The Xcode project is generated from a manifest rather than committed, which keeps project changes reviewable in a diff.

The design system uses tokens only. Type scales with the system setting, and contrast on the brand colour was corrected to meet WCAG AA in dark mode.

Privacy was a build constraint, not a policy page. There is no backend, no key in the binary and no analytics, so there is nothing to leak.

In TestFlight, in preparation for App Store release. Roughly 11,000 lines of Swift across 52 files.

Screens

  1. The day screen in dark mode, headed Honing, Inburgering A2, with twenty cards to do and a streak of zero. A card called Jouw dagplan says each day is a review and one exam part, and to set an exam date for a plan made to measure; under it sits one block, the daily review of twenty minutes, at 0 of 1 blocks. Below, a card asks whether you are ready for today, with 53 reviews waiting topped up with new cards, over an orange Oefenen button. Two rows follow, practise your mistakes and test yourself.
  2. The exam plan sheet. A switch reads I have an exam date, the date under it is 17 December 2026, and a line counts 102 days left. Below that, study time per day offered as five lengths with thirty minutes chosen, and a daily reminder set for half past seven.
    The date is the only input. Everything the app schedules after this counts backwards from it.
  3. The topics screen, in dark mode. Under Onderwerpen and a line inviting you to pick a topic to focus on, a section headed A1, Fundament, 13 topics, lists them as cards with a card count each: numbers 34, colours 11, days and months 23, family 14, things at home 20, verbs 42, articles 16.
  4. A new word, shown before it is tested, at 1 of 16 in a practice round on articles. A card marked Nieuw woord reads water beside a speaker button, and a note under it says water is a het word: het water is koud. At the bottom a line says look at the word, then practise it, above one button, Ik snap het.
  5. The same word a moment later, now tested. The prompt asks for the right form of water, het is chosen and marked correct above de, and a hint repeats that water is a het word, with a link to hear het water. Four buttons follow with their intervals: again in one minute, hard in one minute, good in ten minutes, easy in four days.
  6. A daily review

    The daily review, card 1 of 20. It asks what Zullen we een terrasje pakken ofzo? means, with a speaker button beside it, and offers four English lines: can you pass the salt, here you go; your change, thank you; thanks and goodbye; shall we grab a drink somewhere or something.
    The same card answered. Shall we grab a drink somewhere or something is marked correct and the other three fade. A hint in Dutch explains ofzo as short for of iets dergelijks, put at the end of a sentence to keep it vague. Four buttons carry their intervals: one minute, one minute, ten minutes, four days.
    The scheduler is printed on the buttons that set it. Four intervals, and the one you press is what decides when the card comes back.
    Card 2 of 20 asks which word you hear, under a large speaker button to play it again. Kosten is chosen and marked correct over kopen, and a hint sets kopen, to buy, against kosten, to cost. The four intervals under it are ten minutes, fifteen days, one month and two months.
    Card 3 of 20, a sentence with a gap: Vroeger vierde ik mijn verjaardag met een, glossed kids' party. The typed answer kinderfeestje is marked good with its article, het, and the sentence above now reads het kinderfeestje. Intervals of ten minutes, sixteen days, one month and two months.
    Card 12 of 20 asks how you say to pay attention in Dutch. The answer box is empty and a red bar gives the right answer, opletten, with a speaker button. A hint under it reads Let goed op de bordjes. Intervals of one minute, ten minutes, one day and four days.
    The end of the session, under a party popper: Sessie klaar, twenty cards reviewed and 131 XP. Three tiles read 20 good, 0 again and 100 percent accurate, above one button, Klaar.

  7. The exam screen in dark mode. Under Examen and a line saying the A2 integration exam has five parts with four versions each, a row offers to set an exam date so that Honing plans every day toward it. The five parts follow with their question counts, time limits and pass marks: reading marked Bijna, almost, and listening Nog niet, not yet, each with its practice score so far, then writing, speaking and knowledge of Dutch society marked Onbekend, unknown.
  8. The listening part up close: 45 minutes, 25 questions, a pass mark around 68 percent, multiple choice over short conversations, voicemails and announcements. A card headed as if you sat the exam tomorrow says there is no mock yet and to do a baseline first. Below it, a breakdown per skill, detail, main idea, inference, signal words, numbers and time, each with a bar and a score, and a line saying most points are lost on detail questions, at 40 percent. At the foot, a practice round that picks new questions first, then frequent mistakes, then ones from long ago.
  9. A listening practice question, 1 of 10. A message card says you hear the weather forecast on the radio, with a play button, marked heard once. The question asks what the weather is this afternoon, with three answers: sunny and warm, rain and strong wind, dry with fog.
  10. A reading mock in progress. A timer runs at the top beside the question count, an email from a doctor's practice sits above the question, and three lettered answers wait under it.
  11. The readers screen, Verhalen: read, listen and answer the questions, 0 of 14 read. Filters for all, A2 minus and A2, then short stories of one to two minutes, each with a genre, a word count, a time and two questions: Het signaal, science fiction; De sleutel, a thriller; De laatste bus, action.
  12. A story open: De sleutel, A2, thriller, two minutes, with a button to listen to all of it and a note to tap a paragraph for its translation. Short paragraphs follow, each with its own speaker button, about Sam finding a small cold key with a number on it in the pocket of a second hand jacket.
  13. The end of the same story: a word list pairing Dutch with English, the key, the pocket, the locker, to tremble, the envelope, each with a speaker button. Then two comprehension questions with three answers each: where does Sam find the key, and why is the ending strange.
  14. A language coach called Sanne, marked beta. A line says she runs on the iPhone itself, so questions stay on the device. Four suggested questions sit under it, on de and het, on the difference between two past tenses, on separable verbs, and on correcting a written sentence.

More apps

See all 27