We already wrote about templating one app across niches with the Legi & Amenzi series — same shell, different Romanian legal domain each time. Civio looked, on paper, like the same trick played across borders: Romania, then Germany, then the US. It wasn't. Each country doesn't just ask different questions — it structures the entire test differently, and that reshaped more of the app than we expected going in.
Three formats, not one format in three languages
Civio: Become Romanian draws from a bank of 590+ questions across seven categories — history, geography, the constitution, national symbols, culture, international institutions, European values — and the actual exam is 10 random questions pulled from all of them. It's broad and shallow by design.
Civio: Become German is the opposite shape. The BAMF catalog behind the Einbürgerungstest has 420+ questions: 293 general ones across ten fixed topics, plus 128 state-specific questions — one set per Bundesland. The real exam is a fixed 33 questions: 30 general plus 3 from whichever of the 16 states you live in. That state-specific layer alone meant the app needed a state selector that actually changes which question pool it's quizzing you on, not just a translated label.
Civio: Become American is narrower still — 127 official USCIS questions — but the real test only asks 20 of them per sitting: 17 general civics questions plus 3 drawn from your state, and current USCIS policy stops the interview the moment an applicant answers enough correctly, which is its own quirk to explain accurately in an exam-mode simulation.
What stayed the same
Underneath the format differences, the actual product shell barely changed: category-based practice quizzes with instant feedback, an exam mode that mirrors the real test's shape as closely as possible, and spaced repetition — we use a Leitner-system scheduler in all three — so questions you keep missing resurface more often than ones you've already nailed. That core loop is what made a second and third market feasible in the first place; without it, each localization would have been a rebuild instead of a reconfiguration.
The one thing that didn't fit the template at all
Romania's citizenship process isn't just a written test — it includes an interview with a language component, a "topic ticket" the applicant has to speak to, and specific anthem stanzas they're expected to know. None of that maps onto the German or American process, so it lives only in the Romanian app. We built it as its own module rather than forcing it into the shared quiz engine, specifically so it could stay Romania-only without leaving dead code or half-working settings in the other two apps.
Why this still beat building three apps from scratch
The temptation with country-specific content is to assume localization means "translate the strings." It doesn't — it means re-deriving the actual exam mechanics from each country's official source (Romania's National Authority for Citizenship and the CNRR/UNHCR interview guide; Germany's BAMF catalog; the US's own official USCIS question set) and making sure the practice experience matches what applicants will actually sit through. But the shared engine — quiz rendering, spaced repetition, exam simulation, progress tracking, subscription handling — meant that work was additive, not repeated. Three markets shipped faster than one market built three separate times would have.
If you're weighing whether an app idea can travel beyond its first market, the honest question isn't "can we translate it" — it's "how much of the actual logic, not just the copy, is specific to where it started." That answer tells you whether you're localizing or rebuilding.