Celebio/excuse-my-french

3

stars

43

commits

JavaScript

primary language

Aug 29, 2026

updated

README

Excuse My French

Learn French, freely.

An exercise page: the sentence to transform, written on Seyès
paper

A French grammar exercise generator (sentence transformation, conjugation, pronouns, negation, dictation, vocabulary) built around an engine that produces exercises endlessly, finds your weak points, and picks exactly what you should work on next. In your browser, and nowhere else.

A flashcard: a picture and four French wordsA dictation: a Listen button and a line to fill
My weaknesses: exercises to revisit, with the dominant error typeAdaptive practice: session length and the target success rate

By notion: mastery measured notion by notion


>>> CLICK HERE TO USE THE APP <<<

Use the hosted app:

APP: https://excusemyfrench.org/

Or install locally:

npm install
npx playwright install chromium   # once, for the tests
npm run dev                       # http://localhost:5173/
npm test                          # the Playwright suite

The pedagogical content, exercises, dictionary, conjugations, vocabulary, notions, explanations, lives in content/ as JSON and Markdown: readable, editable, and reusable without touching the engine.

The architecture is described in CLAUDE.md.

The values

  • Made with love: first for one person, then for everyone.
  • Open source: obvious here
  • Local first: your progress stays in your browser as long as you decide it to, and most of the app works with no internet connection (you can use it as a PWA)
  • AI/ML for good: your level is estimated statistically; weaknesses are detected per grammar concept; the exercises offered are neither too hard nor too easy.
  • Learning over retention: no mechanic that optimises time spent in the app without serving the learning. Your dopamine is precious; save it for learning.

Licences

Everything under content/ is CC BY-SA 4.0. Everything else in this repository is AGPL-3.0-or-later.

content/ is the pedagogical corpus: exercises, dictionary, conjugations, vocabulary, notions, placement questions and explanations. It is published as-is into dist/content/ at build time, to be read and reused without the engine. The rest, the generation engine, the analysis, the interface and the tooling, is software: a software licence fits it, and a Creative Commons licence does not, as Creative Commons itself recommends.

One architectural invariant keeps the boundary legible: human-authored educational material meant to be shown or reproduced as content belongs in content/. Algorithms may of course carry linguistic rules; nobody chases a constant or an if.

Material the app produces, generated exercises and sentences, printed worksheets, is made available under CC BY-SA 4.0, to the extent that any rights subsist in it. A worksheet printed for a class is the teacher's.

  • LICENSE: GNU AGPL v3 or later, for the software.
  • content/LICENSE: CC BY-SA 4.0, for the corpus.
  • package.json declares AGPL-3.0-or-later: that field describes the package, and the corpus exception is the one stated here.

Contributions are accepted under the licence of the files they touch: CC BY-SA 4.0 for content/, AGPL-3.0-or-later everywhere else. No copyright assignment, no CLA. To date the author is the sole copyright holder of the project.

Credits

OpenMojithe flashcard and vocabulary picturesCC BY-SA 4.0
Handleethe handwriting on the exercise pageSIL Open Font License 1.1
Bootstrap 4the CSS baseMIT
Reactthe interfaceMIT

The first two are vendored in the repository rather than loaded from a CDN, so the app works offline and tells no one which exercise you are doing. Their licences travel with them, in public/openmoji/LICENSE.txt and public/fonts/Handlee-OFL.txt.


Hoping you enjoy Excuse My French, and that it serves you well.

Onur Çelebi

Contributors

Celebio

43 commits

Celebio/excuse-my-french

3

stars

43

commits

JavaScript

primary language

Aug 29, 2026

updated

README

Excuse My French

Learn French, freely.

An exercise page: the sentence to transform, written on Seyès
paper

A French grammar exercise generator (sentence transformation, conjugation, pronouns, negation, dictation, vocabulary) built around an engine that produces exercises endlessly, finds your weak points, and picks exactly what you should work on next. In your browser, and nowhere else.

A flashcard: a picture and four French wordsA dictation: a Listen button and a line to fill
My weaknesses: exercises to revisit, with the dominant error typeAdaptive practice: session length and the target success rate

By notion: mastery measured notion by notion


>>> CLICK HERE TO USE THE APP <<<

Use the hosted app:

APP: https://excusemyfrench.org/

Or install locally:

npm install
npx playwright install chromium   # once, for the tests
npm run dev                       # http://localhost:5173/
npm test                          # the Playwright suite

The pedagogical content, exercises, dictionary, conjugations, vocabulary, notions, explanations, lives in content/ as JSON and Markdown: readable, editable, and reusable without touching the engine.

The architecture is described in CLAUDE.md.

The values

  • Made with love: first for one person, then for everyone.
  • Open source: obvious here
  • Local first: your progress stays in your browser as long as you decide it to, and most of the app works with no internet connection (you can use it as a PWA)
  • AI/ML for good: your level is estimated statistically; weaknesses are detected per grammar concept; the exercises offered are neither too hard nor too easy.
  • Learning over retention: no mechanic that optimises time spent in the app without serving the learning. Your dopamine is precious; save it for learning.

Licences

Everything under content/ is CC BY-SA 4.0. Everything else in this repository is AGPL-3.0-or-later.

content/ is the pedagogical corpus: exercises, dictionary, conjugations, vocabulary, notions, placement questions and explanations. It is published as-is into dist/content/ at build time, to be read and reused without the engine. The rest, the generation engine, the analysis, the interface and the tooling, is software: a software licence fits it, and a Creative Commons licence does not, as Creative Commons itself recommends.

One architectural invariant keeps the boundary legible: human-authored educational material meant to be shown or reproduced as content belongs in content/. Algorithms may of course carry linguistic rules; nobody chases a constant or an if.

Material the app produces, generated exercises and sentences, printed worksheets, is made available under CC BY-SA 4.0, to the extent that any rights subsist in it. A worksheet printed for a class is the teacher's.

  • LICENSE: GNU AGPL v3 or later, for the software.
  • content/LICENSE: CC BY-SA 4.0, for the corpus.
  • package.json declares AGPL-3.0-or-later: that field describes the package, and the corpus exception is the one stated here.

Contributions are accepted under the licence of the files they touch: CC BY-SA 4.0 for content/, AGPL-3.0-or-later everywhere else. No copyright assignment, no CLA. To date the author is the sole copyright holder of the project.

Credits

OpenMojithe flashcard and vocabulary picturesCC BY-SA 4.0
Handleethe handwriting on the exercise pageSIL Open Font License 1.1
Bootstrap 4the CSS baseMIT
Reactthe interfaceMIT

The first two are vendored in the repository rather than loaded from a CDN, so the app works offline and tells no one which exercise you are doing. Their licences travel with them, in public/openmoji/LICENSE.txt and public/fonts/Handlee-OFL.txt.


Hoping you enjoy Excuse My French, and that it serves you well.

Onur Çelebi

Contributors

Celebio

43 commits

Languages

JavaScript

87.5%

CSS

12.2%