<?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: Vishesh Gupta</title>
    <description>The latest articles on DEV Community by Vishesh Gupta (@vishesh_gupta_03).</description>
    <link>https://dev.to/vishesh_gupta_03</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%2F4171216%2F3710e59a-05b4-4d1f-af65-69d5d463774e.png</url>
      <title>DEV Community: Vishesh Gupta</title>
      <link>https://dev.to/vishesh_gupta_03</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vishesh_gupta_03"/>
    <language>en</language>
    <item>
      <title>FreeSpoke Local</title>
      <dc:creator>Vishesh Gupta</dc:creator>
      <pubDate>Sun, 18 Oct 2026 18:29:51 +0000</pubDate>
      <link>https://dev.to/vishesh_gupta_03/freespoke-local-1535</link>
      <guid>https://dev.to/vishesh_gupta_03/freespoke-local-1535</guid>
      <description>&lt;h2&gt;
  
  
  &lt;em&gt;This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle]&lt;/em&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FreeSpoke Local&lt;/strong&gt; is a zero-cloud, privacy-first generative AAC (Augmentative and Alternative Communication) voice engine designed for non-verbal individuals, stroke survivors with expressive aphasia, and people living with motor disabilities such as ALS or Cerebral Palsy.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;Traditional assistive speech devices (like Tobii Dynavox) cost between &lt;strong&gt;$5,000 and $15,000&lt;/strong&gt;. On these systems, someone typing with a single switch, an adaptive pointer, or an eye-tracker averages just &lt;strong&gt;2 to 4 words per minute&lt;/strong&gt;. Typing out &lt;em&gt;"Could you please help me reposition my legs? They are starting to cramp"&lt;/em&gt; takes over three agonizing minutes of physical effort. &lt;/p&gt;

&lt;p&gt;Cloud-based AI typing assistants exist, but if an individual enters a hospital basement, an elevator, or experiences a Wi-Fi dropout, &lt;strong&gt;they literally lose their voice&lt;/strong&gt;. Furthermore, forcing disabled individuals to pipe their most private, intimate personal thoughts and medical needs to corporate cloud APIs is an unacceptable compromise.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;p&gt;FreeSpoke Local lets the user type just &lt;strong&gt;two or three fragmented keywords&lt;/strong&gt; (e.g., &lt;code&gt;cold ... legs ... reposition&lt;/code&gt; or &lt;code&gt;tea ... milk&lt;/code&gt;). &lt;/p&gt;

&lt;p&gt;A local open-weight language model (&lt;code&gt;Qwen2.5-3B-Instruct&lt;/code&gt;) instantly expands those sparse fragments into three natural, first-person speech options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⚡ &lt;strong&gt;Quick:&lt;/strong&gt; Direct, urgent statement for immediate needs.&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Full:&lt;/strong&gt; Warm, polite, conversational sentence.&lt;/li&gt;
&lt;li&gt;❓ &lt;strong&gt;Inquiry:&lt;/strong&gt; A clarifying question for the caregiver.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tapping any option speaks the sentence aloud &lt;strong&gt;instantly using the browser's native speech synthesis engine&lt;/strong&gt; with sub-300ms response time and &lt;strong&gt;zero internet connection&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who Pays For It?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speech-Language Pathologists (SLPs) &amp;amp; Care Facilities:&lt;/strong&gt; Who need responsive, reliable tools for clients without waiting 6–12 months for medical insurance approval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Families and Caregivers:&lt;/strong&gt; Looking for an accessible solution that runs on laptops or tablets they already own.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; Sold as a &lt;strong&gt;$49 one-time lifetime license&lt;/strong&gt; (or $5/month for continuous support and localized vocabulary packs)—providing a humane alternative to the $10,000 medical device monopoly.&lt;/li&gt;
&lt;/ul&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Try it locally in 2 minutes (100% Offline):&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt;Install Ollama and pull the lightweight model: &lt;code&gt;ollama run qwen2.5:3b&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Clone the repo and install dependencies: &lt;code&gt;pip install streamlit ollama&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Turn off your Wi-Fi completely.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Launch the app: &lt;code&gt;streamlit run app.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;cold tea please&lt;/code&gt; and tap any generated card to hear your laptop speak immediately.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;{}&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Sparse-Intent Expansion &amp;amp; Speech Pipeline:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_options&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fragment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;setting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You are the voice of a non-verbal person using an AAC device.
Convert these sparse keywords into dignified, natural, first-person speech.
Listener: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;listener&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
Context: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;setting&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

Output ONLY valid JSON in this exact structure:
{{
    &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;quick&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Direct, immediate statement&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,
    &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;conversational&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Warm, polite, full sentence&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,
    &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A related inquiry or question to the caregiver&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;
}}&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ollama&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;qwen2.5:3b&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Keywords: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;fragment&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;temperature&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;p&gt;FreeSpoke Local is built entirely with open-source tools optimized to run smoothly on everyday consumer hardware (tested on standard M-series Macs and budget Intel i5 Windows laptops):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Local Open-Weight Model (&lt;code&gt;Qwen2.5-3B-Instruct&lt;/code&gt;):&lt;/strong&gt; Quantized to 4-bit and executed locally via &lt;strong&gt;Ollama&lt;/strong&gt;. At just ~2GB in memory, it delivers sub-second generation speeds on standard CPUs without requiring an expensive discrete GPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Output Structuring:&lt;/strong&gt; Using Ollama’s native JSON schema constraints, the model strictly outputs the three target communication variations (Quick, Conversational, Question) without conversational filler or hallucinated formatting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch &amp;amp; Eye-Tracker Accessible Interface:&lt;/strong&gt; Built with &lt;strong&gt;Streamlit&lt;/strong&gt;, styled with high-contrast, oversized target hitboxes designed for users operating head-mice, switches, or eye-gaze dwell pointers. State caching via &lt;code&gt;st.session_state&lt;/code&gt; prevents accidental text regeneration during screen reruns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Latency In-Browser Speech Synthesis:&lt;/strong&gt; Rather than fighting OS-level audio threading bugs or requiring heavy external text-to-speech weights, the frontend uses an embedded HTML5 &lt;strong&gt;Web Speech API&lt;/strong&gt; bridge. It plays through the user's active sound device with &lt;strong&gt;zero server round-trips&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;In assistive technology, &lt;strong&gt;closed cloud AI is fundamentally disqualified&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Voice Uptime is Human Dignity:&lt;/strong&gt; When a person cannot speak, their voice cannot be dependent on Wi-Fi stability, API rate limits, or cloud service outages. If someone is in an elevator or the home internet goes down, their ability to express pain or say goodnight to their family must never be taken away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Absolute Sanctuary for Private Conversations:&lt;/strong&gt; AAC users communicate their most vulnerable moments: toileting requests, physical pain, medication side effects, and intimate conversations with loved ones. Piping those intimate thoughts to third-party cloud servers for model training is an unacceptable violation of privacy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disrupting the Medical Device Cartel:&lt;/strong&gt; Commercial assistive device manufacturers charge 100x hardware markups by exploiting medical billing codes. Open-weight models allow us to turn an ordinary $200 refurbished laptop or tablet into a high-speed communication tool that anyone can afford.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Who Tested It:
&lt;/h3&gt;

&lt;p&gt;I tested FreeSpoke Local with &lt;strong&gt;David&lt;/strong&gt; (61, a retired engineer recovering from a stroke that resulted in severe expressive aphasia) and his partner &lt;strong&gt;Sarah&lt;/strong&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Test:
&lt;/h3&gt;

&lt;p&gt;David retains full cognitive capacity, but typing complete sentences on a standard on-screen keyboard is physically exhausting, averaging around 3 words per minute.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We opened FreeSpoke on David's laptop with the Wi-Fi disabled.&lt;/li&gt;
&lt;li&gt;David typed three words: &lt;code&gt;cold garden chair&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In under 400 milliseconds&lt;/strong&gt;, FreeSpoke presented three distinct speech cards:

&lt;ul&gt;
&lt;li&gt;⚡ &lt;em&gt;Quick:&lt;/em&gt; "I'm cold out here, can we go inside?"&lt;/li&gt;
&lt;li&gt;💬 &lt;em&gt;Full:&lt;/em&gt; "Could you grab my jacket? I'd like to stay in the garden a little longer."&lt;/li&gt;
&lt;li&gt;❓ &lt;em&gt;Inquiry:&lt;/em&gt; "Can you move my chair into the sun?"&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;David clicked the second card. The laptop spoke the sentence aloud clearly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Feedback:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Normally he gets frustrated, gives up, and just says 'cold' and I have to play a guessing game,"&lt;/em&gt; Sarah shared. &lt;em&gt;"He hasn't spoken a complete, nuanced sentence like that in over a year."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;David’s functional communication rate jumped from &lt;strong&gt;3.2 words per minute to over 24 words per minute&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Did They Pay?
&lt;/h3&gt;

&lt;p&gt;Sarah offered to pay &lt;strong&gt;$100 immediately&lt;/strong&gt; for a permanent offline copy on David’s laptop so they would not have to continue fighting their insurance provider for an overpriced dedicated speech tablet.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Best Local / Edge AI Application&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Most Impactful Social Good / Healthcare Project&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>New to Community</title>
      <dc:creator>Vishesh Gupta</dc:creator>
      <pubDate>Sun, 11 Oct 2026 16:13:29 +0000</pubDate>
      <link>https://dev.to/vishesh_gupta_03/new-to-community-545d</link>
      <guid>https://dev.to/vishesh_gupta_03/new-to-community-545d</guid>
      <description>&lt;p&gt;Hello Everyone@ !!!&lt;/p&gt;

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