US Citizenship Test Prep
A cross-platform study companion for the US naturalization test, on iPhone and Android.
React NativeExpoTypeScriptiOS & Android

What it is
A mobile app for studying the US naturalization test, the civics and English exam every applicant takes during their citizenship interview. It covers the civics questions in both the 100-question and the newer 128-question versions, the N400 interview questions, and the official reading and writing portions, with audio for every item. The full study set works offline, so it is as useful on a crowded bus as it is at a kitchen table.
Why I built it
Most people preparing for this test are doing it on their own. Many immigrants arrive with very little and spend their days working, so studying has to fit into whatever time is left: a commute, a lunch break, the quiet minutes before bed. There are not many programs that help people prepare for the citizenship test, so for most applicants self-study is really the only option. I built this to help that self-study stay on track and feel less daunting, something that works in a tired hour at the end of a long day and does not assume a quiet room or a steady connection. It started as a pocket-sized companion to my web-based Mock Interview, built on the same source material.
What makes it different
For most applicants the hardest part is not the facts, it is doing this in English under pressure. Most are not native speakers, and in a nervous moment just understanding the spoken question can be the first hurdle, before there is any chance to answer it well. The Listening and Speaking mode is built for exactly that. You hear a question and answer out loud, and on-device speech recognition transcribes what you said and grades it word by word, so you can practice both understanding and answering until it feels routine. Because the speech recognition runs entirely on the device, whatever you say into the microphone stays on the phone. None of it is sent to a server, so you can speak freely and practice as much as you need without worrying about where your voice goes.
It also goes past the civics trivia most apps stop at. The same flow covers the N400 interview questions, the parts about your own application that an officer actually asks. And because a few civics answers depend on where you live, the app can look up your real US Representative and Senators from your address, so the questions about who represents you show your answers instead of a placeholder. The address is used once for that lookup and never stored.
The rest is about meeting people where they are: an interface in five languages (English, Vietnamese, Chinese, Spanish, and Filipino), audio narration in several voices including a few premium cloud ones, the shorter 20-question test that applicants 65 and older with long residency are allowed to take, and no paywall. The app is free, supported only by non-personalized ads.
The rewrite, and the stack
The app began as a Java project in Android Studio, Android only. That left every iPhone user out, and keeping a second native codebase just to reach them was not realistic for a solo project. So I rewrote it from the ground up in React Native and Expo with TypeScript. One codebase now ships to both the App Store and Google Play, running on Expo SDK 54 with Hermes and the New Architecture.
Rewriting a working app is not free, and I will not pretend it was. But the payoff was concrete: one place to fix a bug, one design to keep consistent, and a route to iOS that did not exist before. The parts that took the most care were getting on-device speech recognition to grade answers reliably, bundling the content and a default voice so the core study experience works without a connection, and the address lookup: Google shut down its old civic-data API in 2025, so it now runs through a small proxy I host that keeps the data provider's key off the device and returns only the officials' names. The original Java version is preserved in the project's history, so nothing was lost in the move.