Inspiration

Most language learners can read a foreign language but freeze when it's time to speak. I've watched friends with high TOEFL scores struggle to order coffee. The gap isn't knowledge, it's the lack of real speaking practice with real feedback.

Apps like Duolingo teach scripted vocabulary in isolation. The real path to fluency is speaking about your actual life, every day, and being corrected by something that explains why in your own language , not the one you're still trying to learn.

I built Cadence as the speaking coach I wished existed when I was learning my second language.

What it does

Cadence is a voice diary that turns your real life into language fluency. Open the app, get a daily prompt ("What did you eat today?"), and answer it out loud in the language you're learning. Cadence:

  1. Transcribes your speech in real-time (MeDo STT)
  2. Returns a structured correction, red underlines on what's wrong, green pills showing the fix
  3. Explains every change in YOUR native language with category tags: grammar · gender · tense · idiom · vocab · pronunciation · word_order
  4. Shows "🗝️ The Local's Secret", the idiom or phrase a native speaker would actually use
  5. Compares your voice to the native version with back-to-back audio playback
  6. Shadow practice, repeat the corrected sentence and get a real-time similarity score
  7. Coach chat, tap "Ask the coach" for a deeper explanation with contextual examples (each with TTS playback)
  8. Tracks your progress, streak chip, naturalness score progression, recurring mistake patterns
  9. Supports 9 languages bidirectionally, including Mandarin ↔ English with pinyin pronunciation guides

How we built it

I built Cadence in 8 layered MeDo sessions, using Deep Build for major feature layers and Fast Build for targeted fixes:

  • Session 1: Voice recording with MeDo STT, daily prompts, streak tracking, database schema
  • Session 2: LLM correction pipeline with structured JSON output
  • Session 3: Correction diff UI, red underlines, green pills, expandable why cards
  • Session 4: TTS playback with speed controls + Diary tab with activity heatmap
  • Session 5: Shadow practice with similarity scoring
  • Session 6: Coach Chat with contextual examples
  • Session 7: Insights dashboard + multi-language seed (pinyin, rōmaji, Revised Romanization)
  • Session 8: Polish, "The Local's Secret," audio comparison, scoring rubric refinement

The core innovation: treating the LLM as a structured output engine, not a chatbot. Every correction comes back as a precise JSON schema:

{
  "corrected": "Es en blanco y negro",
  "changes": [{
    "original": "blanco y blanco",
    "replacement": "blanco y negro",
    "category": "vocab",
    "why": "您应使用'negro'(黑色)而不是重复'blanco'(白色)。"
  }],
  "naturalness_score": 9,
  "idiom_upgrade": "Es en blanco y negro, sin una sola pista"
}```

## Challenges we ran into

1. **Browser STT pre-roll**. MediaRecorder drops the first 200-500ms of audio. Worked around with display logic that gracefully handles partial transcriptions.
2. **Multilingual TTS**. MeDo's TTS is optimized for Mandarin; non-Mandarin languages fall back to generic English. Replaced it with the Web Speech API, mapping each target language to a locale-matched voice (es-ES, fr-FR, ja-JP, etc.).
3. **Navigation regression**. A refactor in one session disconnected the Today screen's LLM result state from the correction render. Lost ~75 credits debugging before reverting to a stable version and re-applying the fix surgically.
4. **CJK similarity scoring**. Shadow practice originally used word-level similarity, which fails for Mandarin/Japanese/Korean (no word spaces). Switched to character-level comparison with diacritic normalization.
5. **LLM score anchoring**. The naturalness score defaulted to 8/10 on every input. Fixed by adding an explicit 0-10 rubric to the system prompt with anchor descriptions for each band.

## Accomplishments that we're proud of

1. Structured JSON corrections with 7 change categories, every explanation in the learner's native language
2. 🗝️ The Local's Secret, a genuinely delightful feature surfacing the cultural idiom a native would actually reach for
3. Audio comparison, hear your voice, then hear the native version, back-to-back
4. 9 languages bidirectionally, including Mandarin ↔ English with pinyin guides for Chinese-native learners
5. Shipped end-to-end on MeDo in 8 layered sessions

## What we learned

1. **Build incrementally**. Deep Builds for new layers, Fast Builds for targeted fixes. Never refactor working code unnecessarily.
2. **Structured LLM output beats chat.** Using the LLM as a JSON schema engine produced a more polished, debuggable, and impressive UX than freeform conversation would have.
3. **Localize the explanation, not the interface.** The interface can stay in the learning language. The corrections MUST be in the learner's native language. This insight unlocked the whole product.
4. **Replace plugins when necessary.** MeDo's TTS is Mandarin-optimized; Web Speech API was the right call for multilingual TTS. Plugins aren't sacred, choose what serves your users.

## What's next for Cadence

**Pronunciation scoring**, beyond text similarity, real phoneme-level assessment
**Adaptive prompts**,  using recurring mistake patterns to generate prompts targeting each learner's specific weaknesses
**Audio memory**, long-term storage so users can listen to their voice from 3 months ago and hear how much they've grown
**Voice persona selection**, formal, casual, regional native voices to match real-world contexts

Built With

Share this project:

Updates

Submission history