<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: aditya-bobate</title>
    <description>The latest articles on DEV Community by aditya-bobate (@adityabobate).</description>
    <link>https://dev.to/adityabobate</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4158942%2Fdcd31da6-7bd7-4410-8ed7-3db2bcf423d2.png</url>
      <title>DEV Community: aditya-bobate</title>
      <link>https://dev.to/adityabobate</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adityabobate"/>
    <language>en</language>
    <item>
      <title>I Built My Friend a Private Japanese Conversation Partner with Gemma</title>
      <dc:creator>aditya-bobate</dc:creator>
      <pubDate>Sat, 03 Oct 2026 07:42:45 +0000</pubDate>
      <link>https://dev.to/adityabobate/i-built-my-friend-a-private-japanese-conversation-partner-with-gemma-3pbf</link>
      <guid>https://dev.to/adityabobate/i-built-my-friend-a-private-japanese-conversation-partner-with-gemma-3pbf</guid>
      <description>&lt;p&gt;This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend&lt;br&gt;
What I Built&lt;br&gt;
I built SpeakMate, a private Japanese conversation partner for my friend.&lt;br&gt;
He's learning Japanese because he's preparing for an upcoming exchange program in Japan. The problem was simple: he needed someone to practice speaking Japanese with, but he didn't always have someone available.&lt;br&gt;
So instead of building another generic chatbot, I built something specifically for him.&lt;br&gt;
SpeakMate lets him:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎙️ Speak Japanese using his microphone&lt;/li&gt;
&lt;li&gt;📝 Get his speech transcribed locally&lt;/li&gt;
&lt;li&gt;🤖 Have a conversation with Gemma 3 4B&lt;/li&gt;
&lt;li&gt;✏️ Receive useful Japanese corrections&lt;/li&gt;
&lt;li&gt;💬 Get short explanations in English&lt;/li&gt;
&lt;li&gt;🔊 Hear the response spoken back in Japanese
The goal was simple:
Open SpeakMate → Speak Japanese → Keep talking.
Demo
The project currently runs locally because the AI models are designed to run on the user's own computer.
GitHub:
&lt;a href="https://github.com/aditya-bobate/SpeakMate" rel="noopener noreferrer"&gt;https://github.com/aditya-bobate/SpeakMate&lt;/a&gt;
The repository contains the complete source code and setup instructions.
Code
GitHub Repository:
&lt;a href="https://github.com/aditya-bobate/SpeakMate" rel="noopener noreferrer"&gt;https://github.com/aditya-bobate/SpeakMate&lt;/a&gt;
How I Built It
The most important design decision was making the AI local.
SpeakMate uses Gemma 3 4B through Ollama for the conversation and faster-whisper for speech recognition.
The architecture is:
Browser → MediaRecorder → FastAPI → faster-whisper → Japanese text → Gemma 3 4B via Ollama → Japanese response + correction → Browser Text-to-Speech
I built the backend with Python and FastAPI.
The frontend is intentionally simple: plain HTML, CSS and JavaScript.
For the conversation, I use Gemma 3 4B locally through Ollama. I designed the prompt to make Gemma behave more like a friendly Japanese-speaking friend rather than a textbook.
It is instructed to:&lt;/li&gt;
&lt;li&gt;Use natural but beginner-friendly Japanese&lt;/li&gt;
&lt;li&gt;Ask exactly one follow-up question&lt;/li&gt;
&lt;li&gt;Focus on practical situations&lt;/li&gt;
&lt;li&gt;Correct only meaningful mistakes&lt;/li&gt;
&lt;li&gt;Explain corrections briefly&lt;/li&gt;
&lt;li&gt;Encourage the learner instead of overwhelming them
For voice input, I initially experimented with browser speech recognition, but it wasn't reliable enough.
So I switched to a local faster-whisper pipeline.
The voice interaction works like this:
Microphone → MediaRecorder → /transcribe → faster-whisper → Japanese text → /chat → Gemma 3 4B → Response + correction → Browser TTS
Why Does Open Innovation Matter?
Language practice can contain personal conversations.
Instead of requiring a cloud AI API for every message, the core AI processing can happen on the user's own computer.
SpeakMate uses:&lt;/li&gt;
&lt;li&gt;Gemma 3 4B for conversation&lt;/li&gt;
&lt;li&gt;Ollama for local model inference&lt;/li&gt;
&lt;li&gt;faster-whisper for local speech recognition
This makes the project more private and gives me more control over the AI stack.
It also means the project isn't locked into a single closed API. The underlying local model can be changed or experimented with as the project evolves.
For my friend, this wasn't just a technical choice. It directly supported the problem I was trying to solve: giving him a private place to practice Japanese conversations.
Testing It With My Friend
This is the part that mattered most to me.
I actually handed the working version to the person I built it for.
His reaction was:
"I loved it. It was easy to use."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That was exactly what I wanted to hear.&lt;br&gt;
I wasn't trying to build the most complicated language-learning platform possible.&lt;br&gt;
I wanted to build something my friend could open and immediately start using.&lt;br&gt;
The feedback validated the simple interface and the conversational approach.&lt;br&gt;
Technical Stack&lt;br&gt;
AI Model: Gemma 3 4B&lt;br&gt;
Model Runtime: Ollama&lt;br&gt;
Speech Recognition: faster-whisper&lt;br&gt;
Backend: Python + FastAPI&lt;br&gt;
Frontend: HTML + CSS + JavaScript&lt;br&gt;
Text-to-Speech: Browser Speech Synthesis API&lt;br&gt;
What I'd Build Next&lt;br&gt;
If I continue working on SpeakMate, I'd like to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conversation scenarios for university, restaurants, travel and making friends&lt;/li&gt;
&lt;li&gt;Japanese vocabulary tracking&lt;/li&gt;
&lt;li&gt;Pronunciation feedback&lt;/li&gt;
&lt;li&gt;Learning progress tracking&lt;/li&gt;
&lt;li&gt;Better mobile support&lt;/li&gt;
&lt;li&gt;More local model options
My Agent Session
I did not use a DevRelay agent session for this project.
Prize Categories
Gemma
SpeakMate uses Gemma 3 4B as the core conversational AI model.
Why I Built This
My friend didn't need another AI demo.
He needed someone to practice Japanese with.
So I built him one.
And because the core AI runs locally with open models, the project can remain private, customizable, and something I can continue experimenting with.
That's what open innovation means to me in this project: having the freedom to build around the actual needs of a person instead of forcing the problem into a closed service.
GitHub: &lt;a href="https://github.com/aditya-bobate/SpeakMate" rel="noopener noreferrer"&gt;https://github.com/aditya-bobate/SpeakMate&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
