<?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>Forem: Tamesh Sivaguru</title>
    <description>The latest articles on Forem by Tamesh Sivaguru (@tams89).</description>
    <link>https://forem.com/tams89</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1423364%2Fcc905ba5-5cec-4800-b52f-dfa1bbb6abdd.png</url>
      <title>Forem: Tamesh Sivaguru</title>
      <link>https://forem.com/tams89</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tams89"/>
    <language>en</language>
    <item>
      <title>Take your voice anywhere, transcribe on YOUR hardware.</title>
      <dc:creator>Tamesh Sivaguru</dc:creator>
      <pubDate>Sun, 15 Feb 2026 19:44:35 +0000</pubDate>
      <link>https://forem.com/tams89/take-your-voice-anywhere-transcribe-on-your-hardware-52j1</link>
      <guid>https://forem.com/tams89/take-your-voice-anywhere-transcribe-on-your-hardware-52j1</guid>
      <description>&lt;p&gt;*This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge*&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🎤 Whisper-Typing Mobile
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Privacy-First Speech-to-Text, Anywhere.
&lt;/h3&gt;

&lt;p&gt;I transformed an existing open-source Windows desktop app into a full-scale, cross-platform mobile ecosystem in a &lt;strong&gt;single 3-hour session&lt;/strong&gt; using the GitHub Copilot CLI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Challenge:&lt;/strong&gt; How do you use high-end speech-to-text on a phone while keeping audio data 100% private and avoiding expensive cloud API fees?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Solution:&lt;/strong&gt; A self-hosted mobile architecture that leverages your home PC’s GPU power over a secure mesh network.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 The Build at a Glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Time to Build&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~3 Hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lines of Code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~6,500 production lines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Files Created&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;50+ files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8 Phases (Backend ➔ Docker ➔ Mobile ➔ Docs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Production-Ready&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🛠️ The Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Flutter (Material Design 3) + gRPC Client&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python 3.13 + FastAPI + gRPC + Protocol Buffers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference:&lt;/strong&gt; &lt;code&gt;faster-whisper&lt;/code&gt; + Ollama (NVIDIA CUDA 12.4)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Networking:&lt;/strong&gt; Tailscale Mesh Network (Encrypted Tunnel)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevOps:&lt;/strong&gt; Docker with GPU Passthrough&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏗️ Architecture Overview
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────┐
│  Android Phone  │  Push-to-talk recording
│  Flutter App    │  Real-time transcription
└────────┬────────┘
         │ 
         │ gRPC over Tailscale (E2E Encrypted)
         ▼
┌──────────────────────────────────────────┐
│            Docker Container              │
│  ┌──────────────────┐                    │
│  │   gRPC Server    │ Port 50051         │
│  │ (Transcription)  │                    │
│  └──────────────────┘                    │
│  ┌──────────────────┐                    │
│  │  Web Admin Panel │ Port 8080          │
│  │ (Configuration)  │                    │
│  └──────────────────┘                    │
│  ┌──────────────────┐                    │
│  │    Whisper AI    │ Utilizes Home GPU  │
│  │  faster-whisper  │ via NVIDIA CUDA    │
│  └──────────────────┘                    │
└──────────────────────────────────────────┘

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivsl7axivz8zoc9r2bt9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivsl7axivz8zoc9r2bt9.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📱 Mobile App
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Push-to-Talk:&lt;/strong&gt; Simple, intuitive recording interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Improvement:&lt;/strong&gt; Integrated Gemini support to polish transcriptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Onboarding Wizard:&lt;/strong&gt; A 4-page setup flow for permissions and connection testing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;History &amp;amp; Clipboard:&lt;/strong&gt; Session-based history with one-tap copy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔌 Backend &amp;amp; Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy-First:&lt;/strong&gt; Your voice never touches the cloud. Phone ➔ Tailscale ➔ Your PC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware Ownership:&lt;/strong&gt; Use your own NVIDIA GPU for blazing-fast local transcription.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Admin:&lt;/strong&gt; Browser-based monitoring and configuration—no SSH required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-Command Deploy:&lt;/strong&gt; &lt;code&gt;docker-compose up -d&lt;/code&gt; and you're live.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧠 My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;This wasn't just "autocomplete"—it was a senior pair programmer. Here is how the CLI changed the game:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. From Idea to Production in 180 Minutes
&lt;/h3&gt;

&lt;p&gt;Starting from a Windows-only desktop app, I asked the CLI to plan a cross-platform expansion. It designed an 8-phase architecture and helped me execute every single one. Without it, this would have been 2–3 weeks of research and prototyping.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Context-Aware Engineering
&lt;/h3&gt;

&lt;p&gt;The CLI didn't just write code; it wrote &lt;strong&gt;my&lt;/strong&gt; code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It respected my strict linting rules (&lt;code&gt;ruff&lt;/code&gt; with ALL enabled).&lt;/li&gt;
&lt;li&gt;It matched my Google-format docstring style.&lt;/li&gt;
&lt;li&gt;It understood Python 3.10+ type hint requirements automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Copilot knew to use lazy logging to comply with &lt;code&gt;ruff G004&lt;/code&gt; and used Python 3.10+ generics without being prompted.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Generated by Copilot CLI to match my project standards
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Iterator&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;

&lt;span class="n"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getLogger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;transcribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;audio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Transcribes audio using faster-whisper.

    Args:
        audio: Raw audio bytes in WAV format.
    Returns:
        Transcribed text string.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Processing audio: %s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;audio_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Validated for lazy logging
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Documentation as a First-Class Citizen
&lt;/h3&gt;

&lt;p&gt;Normally, documentation is the last thing developers do. The CLI made it part of the flow, generating 7 comprehensive guides (Docker, Backend, User Guides, and QA procedures) that were accurate to the code we just wrote.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 The "Aha!" Moments
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Parallel Tool Calling:&lt;/strong&gt; Watching the CLI read three files simultaneously to understand a cross-service bug was eye-opening.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Retention:&lt;/strong&gt; It remembered a Tailscale IP discussion from Phase 1 while we were working on Phase 8.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error Recovery:&lt;/strong&gt; When a command failed, it didn't quit; it analyzed the stack trace, proposed a fix, and kept moving.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔗 Links &amp;amp; Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Experimental Code:&lt;/strong&gt; &lt;a href="https://github.com/tams89/whisper-typing/tree/feature/mobile-backend-api" rel="noopener noreferrer"&gt;GitHub Repository (Mobile Branch)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Final Verdict:&lt;/strong&gt; The Copilot CLI doesn't replace developer judgment—it amplifies it. It handled the mechanical boilerplate with zero fatigue, allowing me to focus entirely on the privacy architecture and user experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlunf5652ltuz9amxbf8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwlunf5652ltuz9amxbf8.png" alt=" " width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
  </channel>
</rss>
