Fonema landing page: Be understood the first time, with a side view of the mouth showing the tongue.

A pronunciation coach I owned from the first question to a working app

A daily pronunciation practice for Portuguese speakers learning American English. I started it for my wife and me, to work on our accents, and took it from research to a working app.

Client
Own product
Year
2026
Scope
  • Edtech
  • Pronunciation
  • Bilingual
  • Web app
  • UI/UX design
  • User research
  • Learning design
  • Gamification
  • Product ownership

Overview

Brazilian learners often know the words and still get asked to repeat them.

The gap is a few sounds that Portuguese does not have, or makes differently: an extra vowel after a final consonant, the R at the start of a word read as an H, the L at the end turning into a W.

So how do you show which sound was off, and the movement that fixes it?

And how do you say so honestly when the engine cannot tell? Fonema is a web app that helps a learner say a word right on their own, in a few minutes a day, and shows whether they are improving. It teaches, not only grades: hear the model, say the word, see exactly what to fix, try again, and see real progress.

The word cap with a large button: See how your mouth makes this word.
Say it
After a miss: the move that fixes it, above the mouth view.
After a miss
A clear result with Say it again beside Continue.
Clear

My role

There was no brief, no teacher on the team and no learner data, so I started from evidence.

I watched 20 videos by teachers who work with Brazilian students and counted what they name. The three most named problems:

  1. The R at the start of a word said like an H, so "rug" becomes "hug" (11 of 20 videos).
  2. The L at the end of a word turning into a W (9 of 20).
  3. An extra vowel after a final consonant, so "work" becomes "workee" (8 of 20).

The counts shaped which sounds the course teaches. From there I designed a learning model of seven rungs for every sound, levels built from those rungs, a placement test, and exams that give no feedback and compare the learner with their own first attempt.

I also read what already exists (BoldVoice, ELSA Speak, Speak and Duolingo) from their public pages, and chose a narrower ground: one language pair built around Brazilian errors, honest feedback, and no stored voice.

The Your sounds page with a mouth view for the vowel ee.
The sound map: every sound with its mouth view, in Portuguese or English

Decisions

Key product decisions

I began with no curriculum, no feedback model and no agreed rules for the game layer, so I made each question a written decision before building against it. I kept a log of 80 numbered decisions, each with a reason and a status, and set the scope by what the product refuses: no ads, no leaderboard, no hearts and no random rewards.

Decision 1

Follow the word the learner is saying

Instead of one mouth-view example per lesson, which in testing showed the same example for every word, I decided to show the mouth view per word: the word's sounds in order, the full movement for the sound being checked, opening by itself after a miss.

The loop, recorded from the running app. Real scoring engine, synthetic voice, demo profile

Decision 2

Say "can't tell" instead of guessing

Instead of guessing a score when the recording is too quiet, too short, clipped or noisy, I decided to say which one it was, and when it does judge, check one sound at a time and show the match percentage as an estimate next to the verdict.

A wrong "you got it wrong" costs more trust than a missing answer, even if a learner sometimes gets "move a little closer to the microphone".

A recording that is too quiet gets "Can't tell" and a reason. A closer second try is judged

Decision 3

The model speaks first

Instead of letting a learner say a word with no model, and then practise their own guess, I decided to have the voice say the word before the record button unlocks, and again before every retry. Exams do the opposite: no model and no feedback, so they measure.

Decision 4

One rule for the game layer, with four tests

Instead of leaderboards, hearts and random rewards, I decided to let a game element earn its place only if it shows the learner something true about their speaking, or gives them a choice.

Every idea had to pass four tests: does it report something real, can the learner ignore it, does anything get taken away or make them feel guilty for stopping, and does it stay quiet in an exam. A streak with up to two freezes passed, as did personal records and awards in tiers that only go up.

The Records page with career bests and awards in tiers.
Records and awards: bests, tiers and a medal set I designed with its own symbols

Engineering x design

I directed the build with Claude Code.

I decided what to make and why. It wrote and tested code under my direction, and the decision log, the research notes and the tests were the gates every change had to pass. The scoring engine builds on open source: OpenPronounce by Jean-François Lépine (MIT licence), the wav2vec2 phone model and the Kokoro voices (Apache-2.0). The product, the course design, the game layer, the research and the interface are mine.

A tour on desktop: the public page, today's practice, the map of sounds and the records. Demo profile with sample progress

Outcome

A working app with 626 words, 80 decisions and 935 tests.

A placement, lessons with a mouth view for every word, level exams, streaks with freezes, personal records and awards, a Second Wind round, sign-in by invitation, and a privacy design that keeps no recordings. It is in closed alpha, with 626 course words and their sounds, 80 logged decisions with their reasons, and 935 automated tests.

What is next

A closed alpha with Brazilian learners and English teachers.

Next comes a review of the course by a phonetician, and one thing the game layer cannot tell me yet: whether practice time and the clear rate move together. Then other first languages, starting with Spanish, each with its own error list and its own course instead of a translation.