The problem
Muscle anatomy in the first years of medical school is a memory exercise. A student has to hold, for hundreds of muscles, where each one starts, where it ends, which nerve drives it and which artery feeds it. Textbooks list the facts. They do not ask for them.
Students at the University of Lausanne also learn in French, against a specific curriculum, and are graded on the Swiss 1–6 scale. A generic flashcard app gets none of that right.
The product
Anatomie UNIL is a quiz app for iPhone and iPad. The content covers the upper limb (Membre supérieur), the lower limb (Membre inférieur) and the trunk (Tronc), or all three at once (Tout).
Each muscle is asked four ways: Origine, Terminaison, Innervation, Vascularisation. A quiz is a set of multiple-choice questions with a per-question timer. After each answer the correct option is shown, and a review follows at the end.
The result is converted to the Swiss grade, with the pass mark at 4. History and statistics show progress session by session, so a student can see which region or question type is weakest before the exam.
The app is free for 10 questions per rolling 24 hours. Unlimited use is a StoreKit 2 purchase.
How it’s made
The first version was a Xamarin.iOS app, first committed in 2015. The current app is a native rewrite: Swift and SwiftUI, MVVM, SwiftData for persistence with a custom V1 to V2 migration plan. Firebase provides anonymous auth, analytics, crash reporting and remote config. There are no third-party UI libraries.
The rewrite began in September 2025, partly with Claude Code agents; the production notes below give the share. The repository carries Claude Code review and assistant workflows, agent guidance for cheap xcodebuild runs, and a test suite covering the quiz service, the persistence fallback and the muscle data itself.
Fastlane handles test runs and App Store screenshots. A small Astro site serves as the landing page.
The muscle data is hand-written Swift, not a database file. It is versioned in git and reviewed in pull requests like any other code.
Details
The curriculum data is treated as code under test. The integrity tests check naming conventions, disambiguation and an allowlist of abbreviations, because an ambiguous answer is a wrong grade.
The interface uses semantic colour sets, light and dark mode, VoiceOver labels, Dynamic Type clamping and Reduce Motion handling.
The 30-second film borrows the language of an anatomical atlas plate. A muscle is drawn on, labelled with numbered callouts for its four questions, then the app is shown answering one. The grade scale morphs from a ring into a ruler. The palette is one electric cobalt (#003AFF) on ink and paper; green and red appear only for correct and incorrect.