This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
What I Built
In French primary schools, children learn poems by heart. Every few weeks the homework diary says apprendre la poésie, and a few days later the child stands up in class and recites it. At home, in between, someone has to hold the book and listen: line after line, evening after evening, often while cooking.
Puesia does the listening. Puesia is Corsican for poetry; I live in Ajaccio.
The child opens tonight's poem on the family Mac, hides the text and presses Je récite. When she is done, Puesia shows the poem again with her mistakes marked: a swapped word in red, with what it heard next to it, a skipped line highlighted, a missing word underlined. A short summary is read aloud. If she gets stuck in the middle, she presses Je bloque !: the recording pauses, Puesia works out where she stopped and reads her the start of the next line.
It also helps with the week. The child dictates her homework diary (« pour lundi, apprendre la poésie ; pour demain, exercices 4 et 5 page 32 »), and Puesia spreads the poem over the evenings that are left: listen to it first, then one stanza a night, then the whole poem the evening before.
Everything runs on the Mac: Whisper listens, my code judges, Piper speaks, Gemma 4 reads the homework diary. The child's voice never leaves the house and is never written to disk.
Who would pay for it? Parents of children aged 6 to 11 who can't be the listener every evening: shift workers, single parents, parents who don't read French easily and can't check a recitation, or read the poem aloud for the child to learn by ear. At our house, honestly, this isn't a problem: I'm home in the evening, and my daughter, who is ten, recites to me. She was the tester. I'm the one who said I'd pay for it, and how much is in My First User.
Demo
These screenshots come from the real app with a synthetic voice, because my daughter's poem and her voice stay at home. The poem is Verlaine's Chanson d'automne, read by the Piper voice Tom with two mistakes on purpose: ton cœur instead of mon cœur, and line 9 skipped.
The evening view, after adding three pieces of homework (typed into the box for the screenshot; at home they were dictated):
The poem after the recitation. The swapped word is in red with what Whisper heard, the skipped line is highlighted:
And the summary that is read aloud:
That run caught both mistakes and nothing else. On an earlier run of the same recitation, it also flagged the last line: Whisper heard fée instead of feuille. The voice said feuille. That is the kind of false alarm the benchmark below counts.
Code
sintineddi
/
puesia
An evening recitation partner for French schoolchildren, running on the family Mac: Whisper listens, the code checks word by word, Piper speaks, Gemma 4 plans the week.
How I Built It
Who does what
| Piece | Job |
|---|---|
Whisper large-v3-turbo (MLX, on the Mac) |
Turns the recitation into text, in about a second for twenty seconds of speech |
| My code | Compares that text with the poem, word by word, and decides what is a mistake |
| Piper | Reads the poem, the hint and the summary aloud, in the voice the child picks |
Gemma 4 e4b (Ollama) |
Proposes the homework tasks from the dictated diary |
I didn't ask a language model to judge the recitation. A child should get the same verdict twice for the same recitation, and when Puesia says you skipped line 9, I want to be able to show why. So the judging is code: about 500 lines of Python, with tests for every case below.
French is full of words that sound the same
A transcription is spelling, and a recitation is sound. Whisper may write vert where the poem says vers, pleurent where it says pleure, temps where it says tant: the child said the right thing, but the spelling differs. If Puesia counted those, it would scold a child for Whisper's spelling.
So the comparison first turns every word into a rough sound key: about thirty rules for French endings, nasals and silent letters. Vers, vert, verre and ver get the same key. Mon and ton, un and une, petit and petite don't, because those are real mistakes a child makes. Then it aligns the poem with the transcription (an edit distance that also accepts de ça for deçà ) and forgives hesitations, euh and restarts.
The rules are tested on pairs like these, and several came from the benchmark: when the false alarms were sorted by cause, maître heard as mettre, or au temps heard as autant, were my rules' fault, not Whisper's.
The more you help Whisper, the less it hears the mistakes
Whisper accepts an initial_prompt: text it has supposedly just heard. Giving it the poem looks like an obvious improvement. It knows every word in advance, so it should mishear less. I measured it before trusting it.
The benchmark builds recitations of five public-domain poems (Verlaine, Hugo, Rimbaud and two La Fontaine fables) with Piper voices. It injects 60 mistakes (skipped lines, skipped words, words swapped for a close or a distant one) plus clean and hesitant recitations, adds background noise to some, and runs everything through three sizes of Whisper, with and without the poem as a prompt. That makes 90 recitations per configuration, all on my laptop.
| Whisper | Mistakes caught | False alarms per 100 words | Time per recitation |
|---|---|---|---|
turbo, no text (what Puesia uses) |
57 / 60 | 3.5 | 2.0 s |
turbo, with the poem |
50 / 60 | 1.9 | 2.1 s |
medium, no text |
57 / 60 | 4.8 | 3.0 s |
medium, with the poem |
40 / 60 | 2.4 | 3.1 s |
small, no text |
56 / 60 | 8.4 | 1.3 s |
With the poem, Whisper makes fewer false alarms, and it hides real mistakes. The voice says Blessent ton cœur; medium with the poem writes Blessent mon cœur. It stops being only a listener and becomes a reader. You can even see it in the punctuation: given Le Corbeau et le Renard, turbo with the poem writes the fable's own capitals and guillemets, « Hé ! bonjour, Monsieur du Corbeau », which a voice can't pronounce. The bigger model is the more obedient one: medium hides 18 mistakes that it catches without the prompt.
For a tool whose whole job is to notice what the child got wrong, that is the wrong trade. Puesia doesn't give Whisper the text.
I also tried the obvious fix for false alarms: Whisper gives each word a probability, so a wrong word heard with low confidence could be shown as "to check" instead of "wrong". It doesn't separate the two cases. A real swap surprises Whisper's language model as much as a mishearing, so lowering the alarms that way also loses real mistakes (turbo catches 13 of 15 close swaps instead of 15 at a 0.5 threshold). The option is in the code and switched off.
The false alarms that remain are mostly real mishearings, and many come from the same place as the prompt problem: Whisper's sense of what French usually sounds like. Ni l'or du soir becomes ni l'heure du soir; tenait en son bec becomes dans son bec. The voice matters a lot. With Tom, turbo makes 0.8 false alarms per 100 words; with the UPMC voices, 5.7.
The big limit: these are synthetic adult voices, not children. The benchmark tells me which setting to choose, not how well Puesia hears a ten-year-old. That came from my daughter.
Gemma proposes, the code checks
The homework diary is where a language model earns its place. Children dictate homework in every possible order (« euh, pour vendredi, la poésie, et lundi en histoire apprendre la leçon sur les Gaulois »), and Gemma 4 e4b turns it into a list: subject, task, and the exact passage of the dictation it comes from.
Then the code checks every item:
- The passage must really be in the dictation, word for word and in order. A task made by gluing two halves of different sentences together is rejected.
- The code reads the dates itself, in the child's words around that passage: demain, jeudi, pour le 16, la semaine prochaine. Gemma doesn't give the date. In « pour jeudi apprendre la poésie et pour vendredi faire les exercices », each task keeps its own day.
- Known poem titles are masked when reading dates, so Demain, dès l'aube isn't due tomorrow.
- If Gemma rewrites a detail (exercices 6 et 5 when the child said 4 et 5), the child sees her own words, not Gemma's.
- A poem mentioned in the diary is linked to its text as soon as the text is added, and the plan becomes one stanza a night.
On my laptop, Gemma takes 6 to 11 seconds once it is loaded. The first evening it wasn't loaded yet, the first dictation was slow, and we reloaded the page while it was still working. Puesia now loads Gemma at startup and shows a counter while it waits.
We tried it on this week's poem
On Wednesday evening, my daughter tried Puesia on her real homework: a three-stanza autumn poem for Friday, copied in from the school sheet.
It worked. The summary caught the mistakes she made, and once she used Je bloque ! to get going again. Her homework dictation went into the week too, with one slip worth telling: la poésie came out of Whisper as la poser, which isn't a word Puesia can link to a poem. A child's voice is harder for Whisper than an adult's, and that sentence is the reason I won't publish an accuracy figure for children until I have measured one.
Two things changed that same evening. First, she didn't like the default voice, so Puesia now offers four French voices, a speed and a tone, with a button to try them. Then we wanted a more natural reading. Piper was reading each line as a sentence of its own, falling at every line end. It now reads a whole stanza at once, with a short pause at the end of each line, so the voice follows the poem's sentences. I checked with Whisper that the poem stays just as clear read that way.
Why Does Open Innovation Matter?
A child's voice stays at home. The recording goes from the microphone to the Mac's memory, is transcribed, and is forgotten. There is no account and no upload. For a product whose users are six to eleven, I don't want to have to explain where their voices go.
It makes "a few euros" possible. A cloud speech API is billed by the minute, and a child who practises a poem ten times a week is a lot of minutes for a tool that would sell for a few euros. Here the cost per recitation is a bit of electricity. That is also how I could afford the benchmark: 540 transcriptions, plus every run I threw away while fixing my own rules.
I could look inside the listening. The finding that matters most for Puesia, that the prompt makes Whisper deaf to mistakes, came from changing how Whisper decodes and reading each word's probability. I controlled every setting, ran the same audio through three model sizes, and kept what the code needed.
The licences shape the business. Open doesn't mean free of rules. Whisper is MIT. Piper is GPL-3.0. Of the voices, Siwis comes from a CC-BY dataset, Jessica and Pierre from a CC-BY-SA one, and Tom from an AGPL one. Gemma comes with its own terms of use. Selling Puesia is allowed, but the code has to stay open. So the side hustle isn't secret code: it is a signed installer that works the first time, the voices already downloaded, and help when the microphone doesn't. I think that is fair for a few euros.
The next step needs open weights. The honest weakness is children's voices. With open weights, Whisper can be fine-tuned on recordings of children reciting, made with their parents' consent, and the result can stay on the families' own machines.
My Agent Session
I built Puesia with Claude Code.
My First User
My daughter, ten, was the first user, on her real poem of the week. It caught her mistakes. She didn't like the first voice, so Puesia got a voice picker the same evening, and the poem is now read stanza by stanza.
She also said something I didn't expect. She is more tense reciting to the computer than to me. Scared isn't the word, but it puts pressure on her. A parent listens with a smile and lets a small slip go; a screen with red words feels like an exam board. French readers of a certain age will think of Les Sous-doués passent le bac, Claude Zidi's 1980 comedy where a class of hopeless students tries every trick in the book to get through the bac. A ten-year-old reciting an autumn poem in the kitchen shouldn't feel she is sitting the bac, and in Puesia the only whisper from the back of the room is allowed: it's called Je bloque ! So the next version needs a gentler practice mode: encouragement before corrections, and perhaps no red at all until the evening before the poem is due.
Would someone pay? I would. For a few euros, it would be worth it. No other parent has tried it yet, so that is one answer, from someone who doesn't really need it. The parents who do need it are the ones I'll show it to next.
Prize Categories
Best Use of Gemma.



Top comments (0)