Every pitch deck wants voice effects in the cloud: upload audio, wait, download a result, pray the latency doesn't kill the bit. We wanted character voices on a keyed CB transmit — which means the conversion has to happen in the gap between "PTT down" and "audio hits the channel." That gap is not generous. It is also not negotiable.
The browser is a weird place to run heavy audio work. Memory ceilings, background tab kills, and phones that were never designed as performance rigs. We pushed voice processing off the critical UI path early. If something hiccups, the channel should still feel alive even if this particular transmission needs a beat to render.
Model size is the silent product decision. A richer voice might sound great in a demo video and struggle on a three-year-old Android tab. We bias toward presets that fit real devices: load once, warm up honestly, degrade gracefully when the phone says no. Users forgive "this voice isn't available on your phone." They do not forgive "the entire app crashed mid-key."
Privacy is the part we don't shut up about. Voice conversion on-device means your raw mic doesn't need a detour through our infrastructure to sound like a puppet, a robot, or whatever chaos the channel culture demands. CB radio is intimate, ephemeral, and often weird on purpose. Shipping voice to a third party by default would feel wrong even if it were cheap.
We're still exploring faster warm starts and better fallbacks on weaker hardware. But the core bet holds: a browser app can carry serious voice characters if you treat latency, memory, and failure like radio constraints — not like benchmark constraints.