Doch: Brief it in English, it calls in German
Problem
A lot of life in Germany still runs through the phone: the Hausverwaltung, the doctor's practice, the insurer. Emails and chats go through a translator. A phone call can't, so people who don't speak German put it off or hand it to someone else.
What I did
Designed and built it alone in five weeks with Claude Code: two voice agents on Claude, calls placed from your own mobile number, a Next.js app and a design system of its own. Then I pointed it at 35 real German businesses.
Result
The tech held: about 0.8 seconds per model reply, and Doch held the line twice to ask me something. Trust didn't. Of 26 people who picked up, most hung up at the moment Doch said it was an AI. Four stayed to answer.
Businesses called
Stayed to answer after the AI line
Model reply time
Eval situations
Real calls on 15, 23 and 30 October 2026, picked by hand and logged from the agent's own transcripts. Reply time is the model's median across 31 replies on ten calls, not the silence a person hears. Small sample, read as directional.
The product
One designer. Two agents. Real calls.
Live app at doch.akberahmed.com
You brief Doch in English, by voice. It turns your answers into a plan you check before it dials: who it's calling, why, which times it can agree to, and what it will and won't share. Then it calls the business in German from your own mobile number, with live English captions as it goes.
If something comes up that isn't in the plan, Doch says “Einen Moment bitte”, holds the line and asks you on screen. Afterwards you get a report of what was agreed and what was shared about you.
Watch a real call to a Berlin bike shop, from briefing to report. The briefing runs at double speed and the call in real time. Screen recording, no call audio.

Context
A call I kept putting off
I've lived in Berlin since 2016 and I still put off phone calls in German. The other person speeds up, I lose the thread, and they wait while I reach for a translator app. A lot of life here still runs through the phone: the Hausverwaltung, the doctor's practice, the insurer.
So I built Doch, named after what Germans say when they mean “on the contrary”. “I can't make this call in German.” Doch. You brief it in English, it calls the business in German, it checks with you if something comes up you didn't cover, and it tells you what was agreed.
It was also the hardest version of the trust problem I'd met on Roam: an agent that speaks for you, to a stranger, in a language you can't follow. So I designed it around six moments where people stop trusting an agent, and tested them on real calls.
Design decisions
Four decisions that shaped Doch
01
Designing what it says no to
The first test call broke three rules while trying to help: it offered to search for a doctor, noted a slot after 8 pm and asked for a date of birth out loud. Now Doch calls only the number you give it, weekdays 8:00 to 18:00, and never says private details aloud. 41 written situations test each rule.
02
No take-over button
The prototype had a “Take over the call” button. I cut it: if you could follow the German, you wouldn't need Doch. Instead the agent calls an ask_user tool, Doch says “Einen Moment bitte”, and a Needs you sheet slides up with the question in English and answers to tap.
03
Captions, because I couldn't follow my own call
Testing the German agent myself, I hung up because I couldn't follow it. That's every Doch user. So the live screen shows each line in English as it's said, with the German underneath, and the background glows in the colour of whoever is speaking.
04
Two Voices, a design system of its own
Teal is always the business, coral is always Doch, and you're neutral, so you can tell who's speaking at a glance. Primitives feed semantic tokens named by role, so when Doch stopped sharing your colour I re-pointed a handful of tokens instead of every component.
Trust moments
Six moments where trust breaks
I designed Doch around six moments where people stop trusting an agent, and built each one in. On real calls, trust broke somewhere else: at the moment Doch said it was an AI.
| Status | Moment | In Doch | |
|---|---|---|---|
| 01 | Tested | Confidence and escalation | When something isn't in the plan, Doch says “Einen Moment bitte” and asks you on screen. It held the line twice on real calls. |
| 02 | Built | Explainable rationale | The report says why Doch made each choice, like taking Thursday because you said weekday mornings. Not tested with users. |
| 03 | Built | Intent preview and autonomy | Before it dials, you see the plan: who, why, which times it can agree to, what it will share. Both testers read it closely. |
| 04 | Built | Action audit and undo | A report of what was agreed and what was shared about you. A call can’t be undone, so the preview carries more weight. Rewritten after it said “Call finished” when nothing was agreed. |
| 05 | Partly | Latency | About 0.8 seconds per model reply. The silence a person actually hears isn't measured yet. |
| 06 | Not yet | Interruption | No take-over by design. You answer Doch's questions, you never join the call. Not properly tested. |
Design system
Two Voices: who's speaking, at a glance
A Doch call has three participants and only two voices on the line: the business in German, and Doch speaking for you. You're watching from your phone, usually without following the German, so the screen has to tell you who's speaking without a label. I built the system in one morning with Claude, on the components Doch already had.
Choosing the pair
I tested three token sets on the same three screens, each with a colour per speaker. Warm sand's terracotta and olive nearly merge for red-green colour blindness. Head office separated best but felt like the institutions you're calling. Teal and coral won: warm for your side, cool for theirs, 180° apart, so where the call screen's glows meet they fade to off-white, not brown.
Doch | Design Tokens
Tokens, then components
Each colour became a ten-step primitive scale. Components never touch the primitives; they point at semantic tokens named by role, like the business's bubble and Doch's bubble, which live as CSS custom properties in one stylesheet. Badges take their tone from their label, and the error red holds about 5:1 on the app's backgrounds.
Tokens and components, straight to code
The same pipeline, traced through two components. The Needs you badge follows a status colour, Doch's bubble follows a role. Each time, the value set in the design system is the exact token the shipped CSS renders from.
The Needs you badge. Its colours live in the design system, not on the component.
Each colour is one named token, the only place the raw hex is written.
The badge picks its tone from its label, so a new status can't end up the wrong colour.
Doch's line on the live call. It takes Doch's colour on every screen, never yours.
Role tokens point at primitives. When Doch stopped sharing your colour, only these lines changed.
The bubble asks for the role, not the colour. Doch sits on the right, the business on the left.
User testing
What 35 real calls taught me
Two expats ran a real errand of their own on the working app, in moderated sessions on 15 and 16 October. Then I pointed Doch at 35 real German businesses: pharmacies, bike shops, hotels, nail salons, a florist. The tech held. Trust broke somewhere I hadn't designed for.
Method
Moderated sessions with two testers on the working app. Then 35 calls I placed myself on 15, 23 and 30 October, logged from the agent's own transcripts.
Task
Testers: an errand of their own they'd been putting off. Calls: a short, simple request to a small business, the kind of call an expat puts off.
Participants
Two expats living in Berlin. Then 35 businesses I picked by hand: pharmacies, bike shops, hotels, nail salons and a florist.
Of 35 calls, 26 had a person pick up. Four of them stayed on the line long enough to answer Doch's question.
real businesses called
had a person pick up the phone
stayed on the line and answered
times Doch held the line to ask me
What I found
01
The stress moved, it didn't go away
Neither tester's call went through. One AI line went into a queue recording, then the report said “Call finished” when nothing was agreed. Watching the call brought back the same anxiety as making it.
02
Trust broke at the AI line
Doch has to say it's an AI (EU AI Act, Article 50). Of 26 people who picked up, 14 hung up during that line and 3 more at the check question before it, mostly two to six seconds in.
03
Rewording the opening barely helped
1 of 8 people stayed before I changed the opening, 3 of 15 after. The check question meant to catch wrong numbers caught one, while 3 of 6 people hung up on it. A safeguard became a second gate.
04
When Doch had to ask me, it worked
At Honigmond Hotel the person asked for the request by email. Doch held the line, the Needs you sheet came up, and I answered nine seconds into a 30-second countdown. Both business voice assistants it met just worked.
From 35 calls to 4 conversations
The biggest drop is at the AI line. Most hang-ups came faster than the line itself, so I suspect people react to the voice or the unknown number before the words land.

The four who stayed
They were small, local places with a one-sentence answer to give, like the Berlin bike shop in the video near the top. And when a business's own voice assistant picked up, both times the call just worked. The friction sits on the human side, at the moment someone learns they're talking to a machine.
The line every call has to pass
„Ich bin die digitale Sprachassistentin von Herrn Ahmed. Darf ich kurz eine Frage stellen?“
Doch, right after the business confirms its name. “I’m Mr Ahmed’s digital voice assistant. May I ask a quick question?”
Reflection
What a month of calls taught me
The tech works. Trust is the unsolved part
Replies came in under a second, the hold worked and the plan held. None of that matters if the person hangs up in the first six seconds.
Disclosure is the front door
Every trust moment I designed sits behind one sentence the law requires. That sentence is now the design problem, not the screens after it.
A safeguard can become a gate
The check question was there to protect the call. It cost more people than it saved. Every step added to the opening has to earn its seconds.
A report has to be honest about failure
“Call finished” over a call where nothing was agreed is worse than no report. The audit trail is only useful if it says when things went wrong.
Next steps
What comes next
35 calls picked by hand is a small sample. Next I'd listen to the first six seconds of every hang-up to separate the voice from the words, test whether a human reason before the AI line keeps people on (within what the law allows), and measure the silence a person actually hears. Then the calls that matter most: a real booking, and how long a receptionist will hold.
If you run a small business in Germany and an AI has ever called you, I'd like to know what you'd have wanted it to say first.


