Mirror
AI communication coaching for founders who think in their second language.
Role
Founder & product designer
Product
AI coaching for leaders
Stage
Zero to one


What nobody's building
Founders replay their meetings at night
Something felt off — but they can't name what, and nothing tells them whether they're getting better.
Granola, Otter, Fireflies all solve the same thing: memory. Who said what, what was decided. None of them touch improvement — how you came across, and whether you're improving at it. For a non-native speaker in a high-stakes English meeting, that's what costs you the deal.
Coaching over documentation
I didn't build an all-in-one meeting tool. I built post-meeting communication coaching for one narrow user: Eastern European founders in high-stakes English meetings with Western counterparts. Narrowing it that hard is what made it worth something to the person who needed it.
Deciding what to build
Synthetic respondents
I had exactly one user I could watch up close — a founder living this every day. One user isn't much to build on, so I did something slightly ridiculous: I tested a wider set of metrics on five founders who don't exist — AI-generated respondents with different communication styles and cultural backgrounds. (No, not a replacement for real interviews. A way to find out which signals would travel before I spent a month building the wrong ones.)
Clarity and tone won by a mile. Interruptions barely moved them — and I kept it anyway, for the founders who get talked over and never get the floor back. Four shipped. The rest I cut.
Why I deleted the scores
The first version gave you scores. Clarity: 6.2 / 10. It looked professional. It was a guess in a lab coat — clarity came from one unreliable input, and that decimal implied a calibration that never existed.
A confident number the system can't back up is just a lie with a decimal point. And a coaching product you can't trust is an anxiety machine with a dashboard.
So I deleted every score. Talk-time became a plain observation instead of a grade. Tone became two labels instead of a fake number. Clarity became things you can actually check — your main point arrived four minutes into a 32-minute call — things you can argue with, and fix. It's much harder to design around honest facts than a satisfying number. But the number was lying.
Designing how the model behaves
The hardest design work wasn't in the UI
In a normal product, you design screens. In an AI product, the bigger question is how the model should behave — what it's allowed to guess, where it isn't, and what it must never fake. That's where most of my hours went.
The first version ignored that line completely: one giant prompt counted, interpreted, and coached all at once — so it fudged the numbers to fit the story. A cleverer prompt was never going to fix that. A boundary did. Counting is deterministic, so it belongs in code. Interpretation is probabilistic, so it belongs in the model. I moved every measurement into Python and split the rest: one prompt became three calls, then two, each with one job.
Some of this I only learned by arguing with the thing. I wanted Mirror to stop quoting the user's own hedging back at them, so I asked the prompt to filter it out. Nicely. Four times. The model just couldn't catch its own hedging reliably, so I stopped negotiating and moved the rule into plain Python. Knowing when to coach the model and when to overrule it with code is most of this job now.
(I also pulled a feature I'd already built — auto-drafted repair messages — when real use didn't justify it.)
Voice Profile: whose job is it to figure this out?
To coach you, Mirror has to know which voice in the room is yours. Version one solved this by assuming you were always Speaker B — bold, and wrong the second you weren't. The obvious fix is to just ask: "which speaker are you?" after every upload. But that hands the product's job back to you, every upload, forever. That's a design failure wearing a feature's clothes.
Instead: a one-time voice enrollment. Thirty seconds, once, and Mirror recognizes you in every meeting after — however many people are in the room. (Under the hood, a voiceprint via SpeechBrain ECAPA-TDNN, matched on each upload.) The right call wasn't the simplest to build. "Ask every time" was simpler, and worse.
Where it stands
My one real user runs Mirror on actual meetings, daily — it survived contact with a real workflow, which is where most side projects go to die. One committed user isn't traction, and I'm not going to dress it up as more than that.
What I'm deliberately not showing you is a before/after chart. The only numbers clean enough to draw one are the scores I deleted, so using them now would contradict the decision this whole product rests on. I'd rather be honest than have a nicer chart.

