The International Phonetic Alphabet (IPA) is the universal way to write down how words sound. One set of symbols covers every sound in every language: it's the system behind pronunciation guides in dictionaries, language textbooks, and speech tools worldwide.
IPA Drill is the tool I built to learn it, designed and built end-to-end in conversation with Claude Code.
Typing interaction
The app shows a word in IPA transcription: I type the everyday spelling. Two attempts. Miss both and the app reveals the answer with a symbol-by-symbol breakdown (name, sound, and an example word) so I walk away knowing what I didn't.
Try it yourself:
/tuː/. When you answer correctly, the app echoes your exact word back: "Correct — too." An earlier version always responded with the primary dictionary spelling, no matter what the user had typed. So if you typed "too" and the app said "Correct — two," you were right, but it didn't feel that way. The fix was to reflect back what the user actually typed.Clicking interaction
Every IPA symbol in the transcription is a button. Click it to cycle through three states, once more to clear. Tags persist across sessions and carry through the word list, progress counter, and the trouble-spots drill.
App structure
The two core interactions (typing to answer, clicking to tag) happen in the Drill view. The other two views support the learning over time: Words gives you a full map of every word in the language color-coded by what you know, and Progress shows where you stand across the whole symbol set and lets you launch a targeted drill on your trouble spots.
Words view: every word in the active language, color-coded by symbol state. Language choice and theme persist across sessions.
Each language targets ~3.5 words per symbol — enough that every sound appears multiple times across the list, not just once. English has ~150 words across 43 symbols, with deliberate picks for rare sounds (the "oy" in boy, the "ch" in Scottish loch) and homophone groups: rain, rein, and reign all count for /reɪn/. Italian, French, and Japanese have ~100 words each at the same ratio.
Multi-language support
Beyond English, I added French, Italian, and Japanese, languages I've actually studied: heard spoken, tried to pronounce, and been corrected on. The architecture supports any language with a defined phoneme inventory and word list; eventually I'd like the app to cover every language anyone wants to learn.
Each language has its own IPA symbols, word list, and "Listen" voice. A dropdown in the nav lets you switch between them instantly. Progress is tracked per language: practicing French doesn't touch English.
Japanese presented a specific input challenge: the same word can be written in romaji (latin alphabet), kana (phonetic script), or kanji (logographic characters). All variations are accepted as correct answers.
Working method
Every iteration of IPA Drill was a conversation. I'd describe what I wanted, watch Claude generate a working prototype in the browser, use it, then feed back what wasn't right: this feels rushed when I get one right, move the success state inside the card, the slashes shouldn't share a color with the trouble-spot marker. That loop (describe, build, use, critique) produced everything on this page.
What Claude was good at: turning a rough description into a working artifact quickly, generating design alternates on request, catching edge cases I hadn't thought of, and handling large refactors (like expanding from English-only to four languages) without breaking existing behavior.
What I had to drive: every interaction decision; the core philosophy (the user self-assesses, the app doesn't grade); what to cut (Reveal, Skip, the card counter, the symbol legend); and the writing throughout. Claude executes quickly and confidently. Knowing whether the direction is right (and when to change it) is the designer's job, and it didn't get automated away.
How it came together