This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
I built a japanese tutor for my 11-yo brother. This is a local-first japanese-tutor app which teaches Hiragana as per his Ume curriculum, and doesn't require internet for him to study.
His first language is Hindi, and almost every beginner resource for Japanese assumes you know English.
So the tutor teaches in Hindi: each character comes with a Hindi hint (like comparing か to the क in "कल"(tomorrow), an example word with its Hindi meaning, and audio for both. He taps the mic, says the word, and the app tells him whether it heard it right.
If he gets it wrong, a small local model explains what to fix in simple Hindi.
He can also ask the tutor questions, and the ones that aren't about Japanese get saved for me to answer myself.
Demo
Code
Nihongo 101 🇯🇵
This project is built for Hacktoberfest Weekend Challenge: Build for a Friend.
Nihongo 101 is a small Japanese tutor I built for my little brother, who is in 6th grade and wants to learn Japanese. His first language is Hindi, so the tutor teaches through Hindi instead of English: every new sound comes with a Hindi hint, and the Hindi shrinks as he progresses.
Demo
Click the GIF to watch full demo.
Why I made this
My brother is excited about learning Japanese, but almost every beginner resource assumes you are fluent in English, or if it's in your first language, the lessons are paid. Duolingo doesn't help here because it does not provide offline support, and internet means distractions for a now-6th grader SO I thought, he shouldn't have to learn through a second language(English) just to learn a third one(Japanese). So I made something…
How I Built It
Open source at its core (everyth runs on my laptop):
- faster-whisper (open-weight Whisper) transcribes his speech. He says a word, the audio goes to a small FastAPI server on the same machine, and the transcript is compared to the expected word. I normalize both (katakana to hiragana, no spaces or punctuation) and keep a list of accepted alternatives, because Whisper often writes kanji instead of hiragana.
-
Gemma, through Ollama, explains his mistakes in Hindi and answers his questions. My
llm.pytalks to any OpenAI-compatible API and reads the model from.env, so swapping models is a two-line change. Example changing the model from gemma3 4b to 8b. FastAPI for the server, and plain HTML and JavaScript for the app. No framework, nothing heavy.
ElevenLabs: The lesson audio was generated once with ElevenLabs and saved as mp3 files, so the app plays local files at run time. I used it because good Hindi and Japanese voices matter for pronunciation, and I only needed it once.
Design choices I made on purpose:
- The curriculum is fixed and handwritten. Small models make mistakes, and a kid will believe them, so the model never teaches new content. It listens, explains and answers.
- Hindi is the bridge. Hiragana sounds map closely to Devanagari letters, so hints use letters he already knows.
- Guardrails live in code, not just in prompts. I tested the tutor with a question about a pop group, and the 4B model confidently made up details, even though its prompt said to stick to Japanese. So now a code gate runs before the model: if a question doesn't look related to Japanese, the model isn't called, and the question is saved to a file for me. There's also a low temperature, a short reply limit, a fallback message if the model fails, and a note under every answer that itcould be wrong.
What my brother said?
"Di, this is so cool!" well he was sat on the laptop until 10-12 lessons while we tested the app for fun, speaking right or wrong pronunciation in mic to see how the llm answers. It was a fun session for him to take part in testing the app and checking for flaws. Also, I have promised to lend him the laptop for an hour a day so he can practice Hiragana quickly and get ahead of his classmates lol.
Why Does Open Innovation Matter?
- His data stays his. Recordings of a child's voice and his mistakes are transcribed on his own laptop and thrown away, no privacy leaks. His questions are saved in a plain text file I can read, not on someone else's server.
- The tutor does not require internet once the models are downloaded, which matters for a study tool.
- It costs nothing to run. No per-request fees, no API key for daily use.
- I could change how it behaves. I could swap models, tighten the prompts, put a gate in front of the model, and compare models on real Hindi questions. When the model drifted off-topic, I could fix it on my side instead of waiting for a provider. I can change lessons and generate audio for more words/letters/scripts.
My Agent Session
I used Copilot for pair programming, which is not compatible with DevRelay.
Prize Categories
- Best Use of ElevenLabs: lesson audio (Japanese) generated with ElevenLabs.
- Best Use of Gemma: Gemma runs locally through Ollama for mistake explanations and tutor answers.
- Best Use of GitHub Copilot: Copilot was used for pair programming for initial setup of gemma via ollama (running the llm locally), frontend through index.html, and debugging issues while running the app.


Top comments (0)