<?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: Daniel García</title>
    <description>The latest articles on DEV Community by Daniel García (@daniel_garca_a286345a4cb).</description>
    <link>https://dev.to/daniel_garca_a286345a4cb</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%2F2372763%2F9f7f5a12-9b1d-4d1f-afac-e1e2333846e4.png</url>
      <title>DEV Community: Daniel García</title>
      <link>https://dev.to/daniel_garca_a286345a4cb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/daniel_garca_a286345a4cb"/>
    <language>en</language>
    <item>
      <title>The voice agent stack: what fits in a browser tab, and what you end up paying for</title>
      <dc:creator>Daniel García</dc:creator>
      <pubDate>Mon, 09 Nov 2026 15:23:18 +0000</pubDate>
      <link>https://dev.to/daniel_garca_a286345a4cb/the-voice-agent-stack-what-fits-in-a-browser-tab-and-what-you-end-up-paying-for-3lm4</link>
      <guid>https://dev.to/daniel_garca_a286345a4cb/the-voice-agent-stack-what-fits-in-a-browser-tab-and-what-you-end-up-paying-for-3lm4</guid>
      <description>&lt;p&gt;VAD, speech recognition and an 82M-parameter TTS now run free inside a browser tab. The interesting question is where that stops. Here is the line, and the cloud stack I would wire up on the other side.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: three links below are affiliate links, marked with (af). If you sign up through them, I earn a commission at no extra cost to you. The criteria are the same ones I use when nothing is at stake.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What runs in the tab for free.&lt;/strong&gt; Silero VAD as ONNX in the browser. Whisper-class ASR dueling live on your microphone. An 82M-parameter TTS (Kokoro) reading text in a tab, weights and all. All of it through transformers.js on WebGPU or WASM, no server, no API key, no bill per user. I keep these instruments up as static pages; open the &lt;a href="https://iamdgarcia-latency-gap-simulator.static.hf.space" rel="noopener noreferrer"&gt;latency waterfall&lt;/a&gt; and watch where a turn actually spends its milliseconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where the tab ends.&lt;/strong&gt; Three ceilings, in the order I hit them. First, the model: an 8B-class LLM fits in a tab, the model you want for real decisions does not. Second, the platform: a real deployment needs a domain, websocket endpoints, logs, a backend that survives a phone refresh; static hosting does not give you those. Third, the voice: an 82M TTS is impressive and still recognizably synthetic; brand-grade voices are server models, and the reference cascade in the literature measures them seriously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The stack I would wire up on the other side.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Host the orchestrator on &lt;a href="https://dev.to[AFFILIATE-RAILWAY]"&gt;Railway (af)&lt;/a&gt;: websockets, a domain and logs from a git push. The latency wins live in the event loop.&lt;/li&gt;
&lt;li&gt;Serve open models through &lt;a href="https://dev.to[AFFILIATE-NOVITA]"&gt;Novita AI (af)&lt;/a&gt;: per-token API instead of GPUs and vLLM babysitting. OpenAI-shaped endpoint, so swapping providers is a config change.&lt;/li&gt;
&lt;li&gt;Premium voice on &lt;a href="https://dev.to[AFFILIATE-ELEVENLABS]"&gt;ElevenLabs (af)&lt;/a&gt;: the reference cascade measures 755ms to first audio with per-sentence streaming (arXiv 2603.05413). Premium voices are what you pay for.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why this split is the honest default.&lt;/strong&gt; In-browser parts have zero marginal cost per user, keep audio on-device, and ship as a static page that stays up. Cloud parts buy quality ceilings the tab cannot reach yet: cloud speech-to-speech sits around 702ms audio-to-audio in the current literature, and a well-tuned cascade of cheap parts can land close to that. Pay for the ceilings; run everything else in the tab.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>webdev</category>
      <category>voice</category>
    </item>
  </channel>
</rss>
