All posts

I built a voice companion that listens in six languages

Manas speaks Hindi, Bengali, Tamil, Telugu, Marathi and English. It took one prompt, one follow-up question, and $11.79 — and it still isn't finished.

Every mental wellness app I've tried wants me to type. In English. Into a text box, in complete sentences, while feeling the opposite of articulate.

My grandmother would never use one. Not because she couldn't — because the thing she'd want to say doesn't exist in English for her. It exists in Bengali, out loud, at 11pm, probably in fragments. That gap between the language you're offered and the language you actually think in is where most of these products lose the people who need them most.

So I tried building the opposite: no typing, no English requirement, no signup wall. Just a button that says begin, in whichever of six languages you tap.

One prompt, one question back

Same routine as last week's build log: open Something, hit New agent, type one sentence badly.

"built me a multilingual voice agent wit indian languages for mind wellness also the history and context should be there for the sessions. make abeautiful aestic ui too pls."

Three typos and one genuinely important requirement buried in the middle — history and context should be there for the sessions. A wellness companion that forgets you between calls isn't a companion, it's a form.

It asked exactly one thing back: which languages should callers be able to pick from. Not "what's your tech stack", not "describe your user personas". Just the one decision that actually changes what gets built.

Language
हिन्दीHindithe default nobody actually defaults to
বাংলাBengalithe one I built this for
தமிழ்Tamillongest tail of dialect variation
తెలుగుTelugubadly served by voice UIs generally
मराठीMarathistrong regional demand, thin tooling
EnglishEnglishalways included, rarely the point

I selected all of them. The build started immediately: Now writing all the files — starting with the spec and the call screen. Then, a beat later, Now applying the beautiful violet wellness… — which is the first time I've watched a tool interpret "abeautiful aestic ui" and not produce a dashboard with three gradient cards.

Fig 01 — The brief, the language question, and the live preview already rendering the language chooser on the right. Seven files in the workspace — no framework sprawl.
Fig 01 — The brief, the language question, and the live preview already rendering the language chooser on the right. Seven files in the workspace — no framework sprawl.

"have a separate screen pls"

The first version dropped callers straight into the language grid. Functional, but wrong for this. Someone opening a wellness app at midnight needs half a second of "you're in the right place" before they're asked to make a choice.

So I typed, in exactly this register: "have a separate screen pls in first then go to this screen".

The reply came back as Got it — a beautiful landing/welcome screen first, then the call screen, followed by a rewrite of the frontend and a deploy. About 30 seconds later it was live at gilded-pike-redwood.trysomething.site. I did not specify what the welcome screen should say. What it wrote:

  • "You are not alone." — set in italic violet, above the fold
  • "Your mind deserves a gentle space." — the headline
  • "A compassionate voice companion for mindfulness and reflection — in your language, at your pace."

At your pace is doing quiet work there. I'd have written something worse and more clinical.

Fig 02 — One sentence of feedback, one frontend rewrite, one deploy. The whole exchange fits in the space this caption occupies.
Fig 02 — One sentence of feedback, one frontend rewrite, one deploy. The whole exchange fits in the space this caption occupies.

Meet Manas

Here's the live call screen. A violet orb that moves while it listens, the agent's name, a line confirming which language you're in — "Speaking in English. Take a gentle breath — Manas is here with you." — and one button.

Three things about this screen I'd defend in a design review:

The mic warning is honest. "Your browser will ask for mic access" sits under the button, before the browser prompt fires. Nobody gets ambushed by a permission dialog while already anxious.

The three pillars are promises, not features. Mindful Guidance / Session Memory / Safe Space, each with three words underneath: Breathing & grounding, Context across calls, No judgment. One of those three is a claim the software has to keep, and I'll come back to it.

There's a language pill in the corner. You can switch mid-session without going back to the start. Sounds trivial; isn't. People codeswitch when they get emotional — that's the entire reason this exists.

Fig 03 — The deployed call screen. The orb is generated, not a stock asset — and it reacts to voice activity during a session.
Fig 03 — The deployed call screen. The orb is generated, not a stock asset — and it reacts to voice activity during a session.

What's actually running under it

The Flow tab draws the architecture it generated, which is worth reading closely because I never specified any of it:

  • Knowledge Base, retrieval enabled, feeding the agent — this is the "history and context" clause from my prompt, turned into infrastructure
  • Capabilities — one tool, a data store, so sessions can be written as well as read
  • Manas — Mind Wellness Voice, tagged SONNET, PUBLIC, VOICE
  • Voice call served over LiveKit and WebRTC

Two tags in there deserve more attention than a small grey pill gets. VOICE means real-time audio, not a chat widget with a speaker icon. And PUBLIC means anyone with the URL can start a session — fine for a demo, a decision you should make on purpose for anything else.

The bit I keep thinking about: "the history and context should be there for the sessions" is eleven words of half-formed intent, and it came out the other side as a retrieval-enabled knowledge base wired to a data-store tool. That's the jump. Not the code generation — the translation from a vague human requirement into the right architectural shape.

Fig 04 — The generated architecture. Knowledge base in by retrieval, tools in from capabilities, LiveKit out to the caller.
Fig 04 — The generated architecture. Knowledge base in by retrieval, tools in from capabilities, LiveKit out to the caller.

Where the language actually lives

Midway through, the switcher stopped appearing in my browser and I assumed the build was broken. It wasn't — the explanation was in the build stream, and it's the clearest description of multilingual voice I've read:

Once they pick and tap the button, the entire call — STT, TTS, greeting — runs in that language.

That's the whole design. Language isn't a translation layer bolted on top of an English pipeline; it's selected before the call opens and applied to every stage of it. Speech recognition, speech synthesis, and the opening line all switch together. You never get the failure mode where the agent understands your Tamil and answers in English.

The switcher itself only renders when languages has more than one entry, which is a sensible default and mildly disorienting to hit unannounced. My actual problem was a stale cached bundle. The fix was a hard refresh, which the agent suggested before I'd finished describing the symptom.

Worth stealing — Choose language before the session opens, not during. It costs one extra screen and removes an entire category of failure — mismatched recognition, wrong-language greetings, an agent confidently transcribing Bengali as garbled Hindi. One tap up front beats graceful degradation later.

What it cost: $11.79

Same as last time, here's the whole bill rather than the flattering half of it:

Multilingual Wellness Voice Companion376a90457d59
Turns17
Distinct users4
Tokens in740.5k
Tokens out26.5k
Deployment events20
Credits spent11,793
USD charged$11.79

One month, 8 Jul – 6 Aug 2026. First successful deploy: 28 Jul, 10:36.

Eleven dollars and seventy-nine cents, across 17 turns and four people. For comparison, the Linear issue manager I built the week before cost $35.13 over 35 turns — roughly the same per turn, on a completely different kind of app. Voice didn't cost meaningfully more to build than a CRUD dashboard, which was not what I expected going in.

Twenty deployment events is the number that tells the real story. That's twenty times I changed something and pushed it live, at roughly 30 seconds each. The cost of being wrong was ten minutes total.

One caveat worth stating plainly: these are build-and-iterate numbers with four users. Real voice traffic bills per minute of audio, and that scales with people talking, not with you typing. Don't budget from this figure.

Fig 05 — Analytics and the deployment log side by side. The two credit spikes are the build session and the welcome-screen rewrite.
Fig 05 — Analytics and the deployment log side by side. The two credit spikes are the build session and the welcome-screen rewrite.

The part I won't ship without

Everything above took under an hour. This section is why the agent is still sitting on a demo URL instead of being shared around.

A wellness companion is not a bug tracker. If the Linear agent files a ticket in the wrong team, I fix a prompt. If a voice agent is the thing someone talks to at 3am on their worst night, the failure modes are a different category entirely — and "it's just for mindfulness and reflection" is not a defence when the caller doesn't know that.

Four things I'm building before this goes anywhere real:

1. It has to say what it is

The greeting should state, in the caller's chosen language, that Manas is an AI companion for reflection and breathing — not a therapist, not a doctor, not a crisis service. Warm, ten seconds, before the first question. If someone has to infer that from a landing page, the app has already failed them.

2. It has to know when to stop and hand over

The single most important behaviour is recognising when a conversation has moved past reflection, and responding by pointing to a real human service — a verified helpline for the caller's own region, in their own language, spoken aloud and shown on screen. This needs to be written explicitly into system_prompt.md and tested against realistic phrasing in each of the six languages, not just English. Regional numbers change; whatever gets configured needs verifying against the official source, not a model's memory.

That retrieval-enabled knowledge base is storing the most sensitive category of data a person can generate. Right now it stores by default, silently. Callers need to be told what's kept, and be able to wipe it in one tap without reading a policy.

4. PUBLIC was a default, not a decision

Anyone with the link can open a session. That's correct for a demo I'm writing about and wrong for anything with real users attached to stored history.

Please read this bit — Manas is a personal experiment in reflective conversation, not a mental health service, and nothing in this post should be read as clinical advice. If you're struggling, a voice agent is not the right thing to reach for — talk to a qualified professional, or contact a mental health helpline in your country.

Would I build it again?

Yes, and I'd start from the safety prompt instead of arriving at it in section seven.

What genuinely surprised me wasn't that voice worked, or that it was cheap. It's how little of the hour went into the parts I expected to be hard. Speech recognition in six languages: one multi-select. Session memory across calls: eleven vague words in the original prompt. The welcome screen that says "you are not alone": nine words of feedback typed with no punctuation.

Every minute I didn't spend on plumbing is a minute available for the part that actually matters — what the thing says when someone tells it something heavy. That's still my job. It should be.

FAQ

How do you build a voice agent that speaks Indian languages?

Describe it in a sentence, then pick the languages from the multi-select the builder offers. Selecting Hindi, Bengali, Tamil, Telugu, Marathi and English wires speech-to-text, text-to-speech and the greeting to run in whichever language the caller taps — no per-language configuration, no code.

What does a multilingual voice agent cost to run?

This one spent 11,793 credits — about $11.79 — across 17 turns, 4 users and 20 deployments in a month. That covers building and light testing. Live voice traffic bills per minute of audio, so real usage scales with call volume rather than build effort.

Does the agent remember previous sessions?

Yes — a knowledge base with retrieval plus a data-store tool give it context across calls. That's what makes a companion feel continuous instead of starting cold. It also means you're storing sensitive conversation history, so consent and a delete path need designing deliberately rather than inheriting the default.

Is a wellness voice agent a substitute for therapy?

No, and it shouldn't be presented as one. Reflection, breathing and thinking out loud are within reach; assessing risk and providing treatment are not. Any agent in this space needs an explicit disclosure in the greeting and a tested path to a verified human helpline for the caller's region.

What technology powers the calls?

The Flow view shows calls served over LiveKit using WebRTC, the agent running on Sonnet, a knowledge base connected by retrieval, and one data-store tool. The entire graph was generated from the initial prompt.

How long did it take end to end?

Under an hour from first prompt to a live URL, including the welcome-screen rewrite. Individual deploys took about 30 seconds. The safety work described above is a longer job, and the right one to spend time on.


Talk your next agent into existence

Describe it in one sentence — typos allowed. Something writes the code, wires the voice, and puts it on a live URL in about 30 seconds. Start building free →

Build the thing you just read about

Start with a sentence. Leave with a working agentic app.

Join the beta
I built a voice companion that listens in six languages — Something · Something