<?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: Anthony Erazo</title>
    <description>The latest articles on Forem by Anthony Erazo (@anthonyerazo).</description>
    <link>https://forem.com/anthonyerazo</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%2F3742853%2Ffbdbd54d-7a11-409d-9da5-567bd7f69533.jpeg</url>
      <title>Forem: Anthony Erazo</title>
      <link>https://forem.com/anthonyerazo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/anthonyerazo"/>
    <language>en</language>
    <item>
      <title>Click, Speak, Type: A Windows Dictation MVP (Offline, Vosk)</title>
      <dc:creator>Anthony Erazo</dc:creator>
      <pubDate>Sat, 14 Feb 2026 04:51:31 +0000</pubDate>
      <link>https://forem.com/anthonyerazo/click-speak-type-a-windows-dictation-mvp-offline-vosk-51oc</link>
      <guid>https://forem.com/anthonyerazo/click-speak-type-a-windows-dictation-mvp-offline-vosk-51oc</guid>
      <description>&lt;p&gt;&lt;em&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;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Windows Voice Dictation Tool&lt;/strong&gt; 🎙️🖱️⌨️ — a lightweight dictation app for &lt;strong&gt;Windows&lt;/strong&gt; that converts &lt;strong&gt;speech to text&lt;/strong&gt; and types it directly into &lt;strong&gt;any active application&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is simple: instead of being limited to one editor, you can click anywhere (Notepad, Word, browser text boxes, chats, IDEs) and dictate as if your voice were the keyboard.&lt;/p&gt;

&lt;p&gt;It runs &lt;strong&gt;offline&lt;/strong&gt; using &lt;strong&gt;Vosk&lt;/strong&gt;, so after the first setup there are &lt;strong&gt;no accounts, no API keys, and no data sent to servers&lt;/strong&gt;. Privacy-friendly by design&lt;/p&gt;

&lt;p&gt;Key features I implemented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Universal text input&lt;/strong&gt;: types into the focused app (Notepad, Word, web, chat, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global hotkey&lt;/strong&gt;: &lt;code&gt;CTRL + ALT + D&lt;/code&gt; to start/stop dictation from anywhere&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real-time transcription&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GUI settings (Tkinter)&lt;/strong&gt;: enable/disable, choose language/model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model manager&lt;/strong&gt;: detects installed models and can auto-download a default model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-language (English + Spanish)&lt;/strong&gt; when models are installed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System tray&lt;/strong&gt; for quick status/controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/AnthonyErazo/Voice-Dictation" rel="noopener noreferrer"&gt;AnthonyErazo/Voice-Dictation&lt;/a&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Short demo (3 minutes)
&lt;/h3&gt;

&lt;p&gt;This is the fast walkthrough showing the app working end-to-end.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vimeo.com/1164898566?share=copy&amp;amp;fl=sv&amp;amp;fe=ci" rel="noopener noreferrer"&gt;Watch the 3-min demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;

&lt;iframe src="https://player.vimeo.com/video/1164898566" width="710" height="399"&gt;
&lt;/iframe&gt;


&lt;/p&gt;




&lt;h3&gt;
  
  
  Full walkthrough (28 minutes)
&lt;/h3&gt;

&lt;p&gt;If you want the complete build process (planning, prompts, iterations, debugging, and final run), here is the full recording.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vimeo.com/1164898615?fl=ip&amp;amp;fe=ec" rel="noopener noreferrer"&gt;Watch the full 28-min walkthrough&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;

&lt;iframe src="https://player.vimeo.com/video/1164898615" width="710" height="399"&gt;
&lt;/iframe&gt;


&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshot
&lt;/h3&gt;

&lt;p&gt;Here’s the app running: GUI settings + live dictation into a document ✨&lt;br&gt;&lt;br&gt;
(If you open the video you’ll see the full flow end-to-end.)&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%2Fn9nkjkjqpcrtgaowi64f.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%2Fn9nkjkjqpcrtgaowi64f.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;I used &lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt; as my “terminal teammate” to build this MVP quickly and iteratively.&lt;/p&gt;

&lt;p&gt;What Copilot CLI helped me with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scaffolding the Python project structure (modules, responsibilities, clean separation)&lt;/li&gt;
&lt;li&gt;Implementing the dictation loop (audio capture, recognition, text injection)&lt;/li&gt;
&lt;li&gt;Designing the &lt;strong&gt;GUI logic&lt;/strong&gt; (Tkinter settings + model/language selection)&lt;/li&gt;
&lt;li&gt;Adding the &lt;strong&gt;model detection/download&lt;/strong&gt; behavior so the app is usable on first run&lt;/li&gt;
&lt;li&gt;Debugging issues and refining edge cases (hotkey behavior, freezing UI, model switching)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I kept the development prompts/notes in the repository as well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompts log: &lt;a href="https://github.com/AnthonyErazo/Voice-Dictation/blob/main/prompt/prompts.md" rel="noopener noreferrer"&gt;prompts.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Quick note on accuracy
&lt;/h3&gt;

&lt;p&gt;Vosk accuracy depends a lot on the chosen model (small vs medium vs large) and your microphone/noise.&lt;br&gt;&lt;br&gt;
This MVP is a solid baseline and can later be improved by swapping engines or integrating more advanced local models.&lt;/p&gt;




</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>Terminal Tutor - an interactive Git CLI coach built with GitHub Copilot CLI</title>
      <dc:creator>Anthony Erazo</dc:creator>
      <pubDate>Sat, 14 Feb 2026 04:33:20 +0000</pubDate>
      <link>https://forem.com/anthonyerazo/terminal-tutor-an-interactive-git-cli-coach-built-with-github-copilot-cli-1522</link>
      <guid>https://forem.com/anthonyerazo/terminal-tutor-an-interactive-git-cli-coach-built-with-github-copilot-cli-1522</guid>
      <description>&lt;p&gt;&lt;em&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;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Terminal Tutor&lt;/strong&gt;, an interactive command line tutor that teaches Git basics through hands-on practice.&lt;/p&gt;

&lt;p&gt;Instead of showing theory, Terminal Tutor gives you a sequence of goals (initialize a repo, create a file, stage it, commit it, create a branch, etc.). You type &lt;strong&gt;real Git commands&lt;/strong&gt; and the app validates the &lt;strong&gt;actual state&lt;/strong&gt; of the filesystem and Git repository after each step.&lt;/p&gt;

&lt;p&gt;A key focus of this MVP is &lt;strong&gt;cross-platform reliability&lt;/strong&gt;. On Windows, the filesystem is often case-insensitive, while Git tracks exact filename casing. That mismatch can confuse beginners (for example, creating &lt;code&gt;readme.md&lt;/code&gt; when the lesson expects &lt;code&gt;README.md&lt;/code&gt;). Terminal Tutor detects these cases, tolerates them, and guides the user without blocking progress.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/AnthonyErazo/Terminal-Tutor" rel="noopener noreferrer"&gt;Terminal Tutor on GitHub&lt;/a&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Video walkthrough
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://vimeo.com/1164898220?share=copy&amp;amp;fl=sv&amp;amp;fe=ci" rel="noopener noreferrer"&gt;Watch the video on Vimeo&lt;/a&gt;&lt;br&gt;


&lt;iframe src="https://player.vimeo.com/video/1164898220" width="710" height="399"&gt;
&lt;/iframe&gt;


&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots (app in action)
&lt;/h3&gt;

&lt;p&gt;Below are screenshots of the tutor running (not only build logs).&lt;/p&gt;

&lt;p&gt;Tutor running a Git lesson (step view)&lt;br&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%2Fcpwg04x5797mmim0yrur.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%2Fcpwg04x5797mmim0yrur.png" alt=" "&gt;&lt;/a&gt;&lt;br&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%2Fos2yy3190dd6lbibypra.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%2Fos2yy3190dd6lbibypra.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Validation feedback after staging and committing&lt;br&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%2Fa6wfc6iep2m8mrzurppg.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%2Fa6wfc6iep2m8mrzurppg.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;I used &lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt; as my terminal pair programmer across the whole build.&lt;/p&gt;

&lt;p&gt;How Copilot CLI helped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project scaffolding&lt;/strong&gt;: generate the initial Node.js + TypeScript CLI structure and wire up Commander + interactive prompts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debugging and iteration&lt;/strong&gt;: when validation failed on Windows (Git output parsing and filename casing edge cases), I described the failure and Copilot proposed fixes plus verification commands. I applied changes, rebuilt, and re-tested until the lesson flow was stable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improving UX&lt;/strong&gt;: Copilot helped refine error messages, hints, and step feedback so the tutor is clearer for beginners.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also kept a short prompt log inside the repo and show Copilot CLI usage directly in the video.&lt;/p&gt;




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