Building My Own US Citizenship Test Flashcard Prep Tool
Table of Contents
Mike Masnick of Techdirt has a really insightful write-up that I highly recommend you check out (part one and part two). What strikes me about Mike’s outline is that he doesn’t take an outright “everything AI is bad” stance, but rather finds exactly where AI is useful - a great tool for building tailored solutions to problems (which is something I alluded to in my last blog post on agents).
Build me a modern test prep tool #
This reminded me how recently, as I was preparing for my US citizenship test (I passed), I realized that there was no good flashcard prep solution for the test itself. The United States Citizenship and Immigration Services (USCIS) provides a helpful text file with the entire question bank, but of course I won’t be preparing from a .txt
page. I needed something a bit more interactive, and bummer - nothing out there fit what I, myself, wanted to have.
This is where I went head-first into building my own little web-based experience - no frameworks, no custom libraries, just a plain, vanilla JavaScript, HTML, and CSS web page that can take all 100 questions and present them in a user-friendly way, whether I am on my desktop computer or my phone.
I’ll cut to the chase - this is what it looks like:

I loved tinkering with the LLM to get it to build proper “flashcard-style” animations as if the card is tossed to a side - the initial version was pretty boring. But instead of me just talking about it, you can see the project in action, since it’s now properly hosted and even has its own short domain - usctest.com
.
The idea started from a spec that guided the LLM through GitHub Copilot to the initial version. It wasn’t very good but I wasn’t expecting it to be - it created the necessary scaffolding, and then I nudged it to where it needs to be, both design and interaction-wise. It took me less than one day to make that entire experience live. As Mike said:
This isn’t just “AI-assisted coding” where you still need to understand programming. This is describing what you want in plain English and iterating until it works. No coding knowledge required — my own coding skills are basically non-existent as the last time I really did anything directly with code was in the 1990s. It turns out to be quite powerful. And liberating.
In the context of my work, I still leveraged quite a bit of my coding knowledge. I am not anywhere close to an expert web developer but I am confident enough to use the tools well. The speed of iteration was incredible - I went from idea, to working app, to a better design, to the application being hosted online in a few hours. Pretty powerful and liberating, indeed.
Conclusion #
You can check out the entire code on GitHub. I am sure for a trained CSS and JavaScript expert there likely are going to be quite a few “Come on Den, this is how it should work instead!” scattered across the code base, but here is the thing - to solve my problem (I want to prepare myself for the test in an interactive way), none of that mattered. Herein lies the beauty of this approach to building personalized solution to things - you want the problem solved first, and focus on everything else later.
I think we’ll see more of it, and especially for skilled engineers, going from idea to a stable implementation with the help of AI is going to be an absolute key future career differentiator.