Learn French, freely.

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.
![]() | ![]() |
![]() | ![]() |

APP: https://excusemyfrench.org/
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.
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.
| OpenMoji | the flashcard and vocabulary pictures | CC BY-SA 4.0 |
| Handlee | the handwriting on the exercise page | SIL Open Font License 1.1 |
| Bootstrap 4 | the CSS base | MIT |
| React | the interface | MIT |
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
43 commits
JavaScript
87.5%
CSS
12.2%
Learn French, freely.

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.
![]() | ![]() |
![]() | ![]() |

APP: https://excusemyfrench.org/
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.
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.
| OpenMoji | the flashcard and vocabulary pictures | CC BY-SA 4.0 |
| Handlee | the handwriting on the exercise page | SIL Open Font License 1.1 |
| Bootstrap 4 | the CSS base | MIT |
| React | the interface | MIT |
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
43 commits
JavaScript
87.5%
CSS
12.2%