<?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: Adpirs</title>
    <description>The latest articles on DEV Community by Adpirs (@adpirs).</description>
    <link>https://dev.to/adpirs</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%2F4155123%2Fb2fd55fd-3055-41b0-aa24-c4e37c1d60c4.jpeg</url>
      <title>DEV Community: Adpirs</title>
      <link>https://dev.to/adpirs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adpirs"/>
    <language>en</language>
    <item>
      <title>Speech Practice Partner</title>
      <dc:creator>Adpirs</dc:creator>
      <pubDate>Sat, 03 Oct 2026 21:44:09 +0000</pubDate>
      <link>https://dev.to/adpirs/speech-practice-partner-4h11</link>
      <guid>https://dev.to/adpirs/speech-practice-partner-4h11</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Most voice assistants decide you've finished speaking after about a second of silence. For someone who stammers, is nervous about speaking, or is searching for words (after a stroke, for example), that means being cut off again and again. It makes practising out loud feel worse, not better.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Speech Practice Partner&lt;/strong&gt;, a patient conversation partner that &lt;strong&gt;never interrupts&lt;/strong&gt;. You pick a topic you enjoy, press one big button and just talk. It waits as long as you need (you choose anywhere from 2 to 15 seconds of quiet), then replies in one or two short, gentle sentences. It never finishes your sentences, never corrects your grammar and never comments on pauses or repetition.&lt;/p&gt;

&lt;p&gt;I built it for anyone and everyone, who gets anxious speaking to people and wants a low-pressure place to practise.&lt;/p&gt;

&lt;p&gt;Things I cared about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Calm and simple:&lt;/strong&gt; one screen, one button, a soft orb that shows whether it is listening, hearing you, thinking or speaking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private:&lt;/strong&gt; everything runs on the laptop and nothing goes to the cloud. Only the written transcript and a few numbers are saved, and your voice is never recorded. One button deletes everything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progress without pressure:&lt;/strong&gt; a Progress page shows personal trends (pause length, pace, words per session). They are framed as trends, not scores, and the numbers are hidden during a session by default.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Video Link&lt;/strong&gt; :&lt;a href="https://youtu.be/UPSXFH25tTc?si=QE1RDLcW4migRK6D" rel="noopener noreferrer"&gt;https://youtu.be/UPSXFH25tTc?si=QE1RDLcW4migRK6D&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app has a &lt;code&gt;--demo&lt;/code&gt; mode that previews the whole interface with &lt;strong&gt;synthetic&lt;/strong&gt; sample data and a pretend conversation. Any trend charts in the demo come from that synthetic data and are not real people's results.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The whole pipeline runs locally:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mic → Silero VAD → faster-whisper → Gemma (via Ollama) → Piper voice&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Silero VAD&lt;/strong&gt; detects when you start and stop talking. I set the end-of-speech silence window myself, which is the heart of the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;faster-whisper&lt;/strong&gt; (&lt;code&gt;small.en&lt;/code&gt;) transcribes locally. I prompt it to keep repetitions and fillers instead of "cleaning them up".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma&lt;/strong&gt; (&lt;code&gt;gemma3:4b&lt;/code&gt;, open weights, run through &lt;strong&gt;Ollama&lt;/strong&gt;) is the conversation partner. A short system prompt keeps it warm, brief and non-corrective.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Piper&lt;/strong&gt; speaks the replies, with an adjustable slower voice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN&lt;/strong&gt; (optional, local) forecasts the next session's pause length and speaking rate from past sessions. It is backtested against a naive baseline, and it needs at least 8 real sessions before it will forecast. [Add your backtest result here once you have real sessions, or delete this line.]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flask + plain HTML/CSS/JS&lt;/strong&gt; make up the interface. There are no frontend frameworks and no CDN, so it works fully offline. The server only listens on &lt;code&gt;127.0.0.1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I started from a terminal-only prototype and turned it into a simple browser app: settings inside the app, friendly error messages (like "Open the Ollama app and try again"), a session you can end at any moment, and dark mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Control over the one setting that matters.&lt;/strong&gt; With a closed voice API, I can't change how long it waits before deciding you're done. With open components I could set that window to match the person, and tune it with them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy.&lt;/strong&gt; A person practising something vulnerable shouldn't have to send their voice to someone else's servers. Because every model runs locally, their speech never leaves the laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free, unlimited practice.&lt;/strong&gt; Confidence builds with repetition, and nobody has to worry about per-minute API costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tunable to the person.&lt;/strong&gt; The prompt, voice speed and wait time can all be adjusted after each session.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Gemma&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Intro...</title>
      <dc:creator>Adpirs</dc:creator>
      <pubDate>Thu, 01 Oct 2026 17:57:21 +0000</pubDate>
      <link>https://dev.to/adpirs/intro-3g7g</link>
      <guid>https://dev.to/adpirs/intro-3g7g</guid>
      <description>&lt;p&gt;Hi all, I am new to dev and I really like the UI of this app gives you that gamer like feeling when you see the text...lol (^_^)&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
