Search by tag: SwiftUI
1 article
Eurogeo — learn Europe's flags and capitals offline
Eurogeo is out on the Google Play Store. It is a geography quiz centred on Europe.
In this release it asks about the countries' flags, their capitals, and the links between the two. Unlock new challenges as you climb levels. No account needed, no useless screens — open the app and you are already playing.
How the difficulty opens up
There are eighteen levels currently. Each one either adds a new kind of question, or widens the grid of answers to increase difficulty.
A level is bought with a run of correct answers in a row, and what it costs is drawn from a range rather than fixed — a fixed cost is a tell, and a player who learns the next game always arrives on the eighth answer starts counting instead of playing. A wrong answer restarts the count, but never takes back a level you have already earned.
Under the hood
Eurogeo is a Kotlin Multiplatform app, on the same foundation as Training Diary. The domain, data and presentation layers are written once in Kotlin — both platforms drive the same QuizViewModel — and each platform draws its own UI: Jetpack Compose on Android, SwiftUI on iOS. Text metrics, the accessibility tree and system-bar behaviour are then the platform's own rather than an approximation of them.
The content ships with the app. It lands in Room 3 on first launch, seeded from bundled JSON, with progress kept in DataStore. The release build is shrunk and obfuscated by R8, and warnings are compiled as errors on both platforms, which is what keeps deprecated APIs from quietly accumulating between releases.
Everything was written test-first, and the merge gate runs close to three hundred instrumented tests on a real phone and a real tablet. Both form factors matter: the layout changes above 600dp, so the tablet exercises paths a phone never reaches.
Accessibility
Colour is measured rather than chosen by eye. The quiz plays over a photograph, so every plate opacity and every ink colour is priced against that image's measured luminance and held to WCAG contrast ratios by a test that fails the build.
Screen readers get their own vocabulary. Flags are labelled by appearance, so TalkBack and VoiceOver can describe one without naming the country and giving the answer away. The score is announced as a sentence — "Streak 13, best 42, level 3" — and read after the question and the choices rather than before them.
Cards grow with the system text size instead of truncating, so a country name is never broken across a line, and every tap target meets the 48dp minimum.
If you enjoy Europe one country at a time, Eurolinguo does the same for its languages.