EuuuhFrench AI now combines native French audio examples, learner recording replay, mouth-shape guidance, correction prompts, progress signals, and API-backed pronunciation assessment. Feedback wording has also been refined so unclear recordings receive useful guidance rather than misleading scores.
This changelog keeps the public story readable. It does not list every commit. Instead, it follows the main release phases that changed what learners could actually do inside the app.
v0.0 - Idea and skeleton
The project began as a focused pronunciation tool for Chinese-speaking learners of French. The aim was deliberately narrow: not a full French course, but short, repeatable practice for difficult sounds.
The early skeleton established the app direction: lesson targets, native audio planning, recording and feedback routes, local progress ideas, and a future path for real pronunciation assessment.
v0.1 - First working MVP audio loop
The first stable MVP made the core learning flow usable. Learners could choose a target sound, listen to a native French example, record their own attempt, replay it, receive basic feedback, and try again.
This version proved the main interaction: pronunciation practice needs a model, a learner attempt, a replay moment, and a small correction prompt. Without that loop, extra features would not matter.
v0.2 to v0.6 - Assessment, onboarding, and mouth-shape support
The next phase made the prototype less like a demo and more like a learning tool. Recording behavior became more stable, Speechace-backed assessment was prepared and calibrated, and feedback became more careful about target detection.
Onboarding and guided practice were also improved so a new learner could understand what to do without reading a long explanation. Mouth-shape help started with French /y/ and gradually moved toward broader visual guidance for difficult sounds.
v1.0 - Polished MVP
Version 1.0 was the first version that felt like a real app. It combined native French audio examples, learner recording, replay, pronunciation feedback, retry support, mouth-shape guidance, a basic lesson chooser, a completion flow, a progress page, and clearer privacy and terms pages.
If real pronunciation scoring is not available, the app can use a preview mode so the learning flow remains usable while avoiding false assessment claims. The assessment layer was improved for target detection and feedback reliability, but it remains AI-assisted pronunciation feedback, not a claim of a proprietary AI model, and not a replacement for teaching.
Prototype status: v1.0 was the first working public MVP. It was still early, but the core learning flow was usable: native audio, recording, replay, pronunciation feedback, retry support, and video guidance for difficult sounds.
v1.1 to v1.3 - Practice modes and nasal vowels
After the MVP, the app expanded beyond isolated word practice. It added Quick Lesson, Word Practice, and Sentence Practice so learners could move between short sound work and more contextual French examples.
Nasal vowels became a major content milestone. The app added more practice for /ΙΜ/, /ΙΜ/, and /ΙΜ/, including better examples, feedback paths, and mouth-shape support. This mattered because nasal vowels are not just a spelling issue; they require learners to notice a different sound category.
v1.4 to v1.5 - Progress, contrast practice, and Smart Review
The app then became a more complete learning product. It added /u/ versus /y/ contrast work, local progress, optional account sync, PWA support, onboarding tutorial polish, streaks, and clearer privacy messaging.
Smart Review changed the feel of the app. Instead of only asking learners to pick something manually, EuuuhFrench AI began suggesting the next useful practice step. Contrast ladders such as rue/roue, tu/tout, peu/peur, deux/doux, and vin/vent made practice more precise.
v1.6 to v1.9 - Feedback quality, progress insight, and trust
This phase focused on making the coach more reliable and less harsh. Feedback became more pedagogical, especially for nasal contrasts, short words, unclear recordings, and provider-related uncertainty.
The Progress page also became more useful: repetition levels, lesson history, streaks, sync status, per-sound stats, and a daily 5-minute coach plan helped learners understand what they had practised and what to repeat next.
The trust work was important. Native audio reliability was checked, legal/about/progress copy was polished, and the app stayed careful about what automated pronunciation scoring can and cannot claim.
v1.10 - Current pronunciation coach polish
The current version is more compact and more focused. After recording, learners see the latest score, their own recording, the native speaker model, one pronunciation feedback card, collapsed attempt history, sound-specific Mandarin-friendly tips, and video support only after repeated difficulty.
Pass scores stay clean. A weak first attempt gets short written help. A weak second attempt can unlock video. Repeated difficulty keeps video available and offers continue or review-later actions. No-score attempts can still show useful sound tips unless the issue is a provider or API failure.
As of now, the project serves as a bridge between applied linguistics research and practical language education design: a focused pronunciation software for Chinese-speaking learners of French, built around concrete French pronunciation learning problems.
Technical changelog
These notes keep the development history compact, but closer to how the app is organized in code: routes, components, API boundaries, content files, tests, assets, and release checks.
v0.1 - MVP audio loop
app/routes for the first practice flowcomponents/practice/PracticeFlow.tsxcomponents/Recorder.tsxcomponents/TargetCard.tsxlib/pronunciation/*demo assessment adapterspublic/audio/fr/native French exampleslib/localProgress.tslocal attempt historylib/i18n.tsEN / FR / δΈζ copy
v0.2 to v0.6 - Provider and guidance layer
app/api/pronunciation/assess/route.tslib/pronunciation/apiAdapter.tslib/pronunciation/providers/*lib/coaching/rules.tslib/practice/stateMachine.tscomponents/OnboardingCard.tsxcomponents/HomePageClient.tsxpublic/video/mouth/mouth-shape support
v1.0 - Polished MVP
/practicerecording and retry flow/feedbacknormalized feedback view/progresslocal progress page/privacyand/termslegal pages/api/audio/examplenative audio endpoint/api/pronunciation/assessassessment boundaryapp/globals.cssmobile layout polishlib/i18n.tsmultilingual UI copy
v1.1 to v1.3 - Practice modes and nasal vowels
lib/content/practiceModes.tslib/content/lessons.tslib/audio/frenchExamples.tscomponents/practice/PracticeFlow.tsxpracticeModes.test.tsSpeechace mapper testspublic/video/mouth/sound-an.mp4public/video/mouth/sound-on.mp4
v1.4 to v1.5 - Progress, account, and Smart Review
components/ProgressSummary.tsxlib/progressDashboard.tslib/practice/smartReview.tslib/homePracticePlan.tslib/authClient.tsandauthActionslib/cloudProgress.tssupabase learner progress migrationsmanifestandservice workerPWA files
v1.6 to v1.9 - Feedback quality and trust layer
docs/v1.6-plan.mdlib/feedbackDisplay.tscompletionSummary.tsdailyCoachPlan.tsnativeAudioAudit.tssyncStatus.tssessionMemory.tsprogress insight tests
v1.10 - Compact pronunciation coach
learnerProfile.tspracticeCardStatevideo and tip gatesfeedbackDisplayattempt rulesPracticeFlowcompact result UIweakest / strongest / improvingsound signalscollapsed attempt historyMandarin-friendly sound tipsmobile spacing polish
App release checks
npm run lintnpm testnpm run buildgit diff --check