Skip to content
All projects

English Communication Trainer

Record yourself speaking, get a transcript and measured speech stats on your own GPU, then feedback from Claude.

Python
WhisperX
Silero VAD
SQLite
React
Claude Code

The problem

Practising spoken English alone has no feedback loop. Apps either score pronunciation and nothing else, or send my audio to a service I do not control.

How it works

  • Record in the browser. The backend transcribes with WhisperX on a local GPU and finds word timings, pauses and filler words.
  • All the numbers are computed in code, not by a model: words per minute, pause map, filler counts, target-word matches, a weighted score. Re-running a session gives the same numbers.
  • Claude only does the judgement part, working from the pre-computed summary instead of raw audio, which keeps the token cost low.
  • Vocabulary to practise is scheduled with spaced repetition.

A decision: Hand work to Claude through a queue, not an API call

Pressing Process marks a session as pending and transcribes it. I then run one command in Claude Code, which works through every pending session. The app holds no API key and a web page never calls a model.

What was hard

Whisper-style models tidy up speech and drop filler words, so a transcript alone says the delivery is cleaner than it is. A separate voice-activity pass (Silero) measures silence from the audio and is compared with the transcript.