Eight weeks from the first prototype to a live product. This is the actual build log.
I'm writing this for two reasons. One: it's a useful record for me — by week six I'd already forgotten which features I'd shipped and which I'd cut. Two: if you're building a tool for yourself first and wondering whether it's allowed to be that scrappy, the answer is yes, and here's how it looked.
Week 1 — The personal pain
I had been running 200+ outbound dials a week on my own list of UK trades. The pattern was the same every time: I'd freeze on the third call of the morning, miss a branch I should have caught, and end up sending a "send me an email" prospect into the dead-zone of my inbox.
I tried writing a better script. Twice. It made things worse. The longer the script, the more there was to forget mid-call.
I started taking notes on the calls I lost — not the prospect's name, but the pattern. Same five seconds of brain-fade. Same three or four phrases triggering it. Same 2-3 second pause where I'd reach for a line and find nothing.
That's the moment the product was born. Not a market opportunity. A pain.
Week 2 — The hacky v0
The first prototype was three things glued together that, in hindsight, should not have worked:
- Audio Hijack capturing my Mac's mic + system audio.
- A Whisper transcription script I wrote on a Saturday afternoon to dump rolling 5-second windows of audio to text.
- A Notion page with my script tree on it, that I'd manually scroll while on calls.
You can imagine how badly this worked. The transcription was 4-second-delayed (Whisper, on my MacBook, locally). The Notion page didn't update — I had to Cmd-F to find the right node. I gave up by call 12.
But two things stuck. One: even a delayed transcript was useful. I could see what the prospect just said, in writing, after the fact, and that was somehow grounding. Two: a scripted tree, even on Notion, helped me spot which branch I should have taken.
I needed to make both things faster.
Week 3 — Deepgram replaces Whisper
The unlock was switching from Whisper to Deepgram's streaming API. Deepgram diarises both speakers (which Whisper doesn't, locally), and the latency dropped from ~4 seconds to ~150 milliseconds. That's the difference between "huh, the transcript is 4 seconds behind" and "the words are appearing as they speak them".
This was the moment the product clicked. Once the transcript was real-time, the matching problem became real-time-solvable too.
Cost note: Deepgram's pay-as-you-go pricing is roughly £0.004 per minute streamed. A 30-minute outbound session costs me 12p in transcription. Trivial.
Week 4 — The matcher
The first matcher was a giant if/else tree in TypeScript. It worked, sort of. It matched on substring patterns ("yes", "go on", "interested" → next-line-A). It missed almost everything that wasn't an exact phrase match.
I switched to Claude Haiku 4.5 as the matcher. Each new diarised line gets sent with the current node's outgoing branches as a prompt: "given the prospect just said X, which of these branches is the best match?". Claude returns the branch ID. The panel updates.
This was the second click moment. Claude routes nuance — "yeah I'm not really looking right now" matches obj-not-interested in 95% of cases without me writing exact-phrase rules.
Latency: Claude Haiku 4.5 returns in ~600 ms median. Deepgram's diarisation lands the line in ~150 ms. Total 847 ms median from prospect-finishes-speaking to next-line-on-screen. That's the number we put on the website.
Week 5 — The panel that almost shipped wrong
The desktop panel went through three iterations.
Version A — full-screen overlay. Looked dramatic. Got in the way of literally everything else on the screen. Killed.
Version B — bottom-bar like a Slack notification. Too easy to ignore. Eyes never go to the bottom of the screen during a call. Killed.
Version C — frameless 384-pixel panel pinned to the right edge, summoned with ⌘⇧A. This is the one. Eyes naturally rest on the right of the screen when you're on a call (because your call window is usually centre-left). The 384px width is wide enough for a script line + the next branches, narrow enough not to dominate.
I almost shipped Version B. Caught it in week 5 testing because I noticed I was talking over the panel updates instead of reading them. Width matters more than I expected.
Week 6 — The autodialer feature I cut
For about three days I was building an autodialer. The idea: Coach already knows your script tree, why not also dial the next number on the list, queue voicemails, etc?
I cut it on day four. Two reasons:
- Autodialers are a regulated mess in the UK (Ofcom's persistent-misuse rules are easier to violate than people realise). I didn't want to handle that compliance load.
- It diluted the product. Coach is a coaching tool. The moment it becomes a dialer, it's competing with PowerDialer / JustCall / Aircall, all of whom are better at dialing than I'd ever be solo.
Cutting features is hard. It was the right call.
Week 7 — Brand-locking
This was when I went from "thing that works for me" to "product I'd put on the internet". The visual brand decisions were:
- Lime green + neutral grey. Not the SaaS blue / purple cliche. Tactical-operator vibe, like Garmin Tactix or Teenage Engineering.
- Geometric chevron-bracket motif. A visual mark you can use anywhere — corners, logo, transitions.
- No emoji. No gradients. No glassmorphism. Linear / Glaido-grade restraint.
- The panel-mock as the hero of the marketing site. Don't show the website. Show the product, working, on someone's screen.
By the end of week 7 the marketing site existed and the product was live behind a Stripe paywall.
Week 8 — Founding round
Today is launch day for the founding round. 50 spots at half-price for life. I'm writing this post the morning of.
Things that are working: the product itself (6% → 12% booked-call rate is real on my own dials), the script-tree editor (visitors love being able to browse the tree before paying), the panel mock on the homepage (every visitor pauses on it).
Things still on the punch list for v1.5: hero demo video (I need to record it), comparison pages vs Gong / Salesloft, and a proper script library with pre-built trees for trades / agencies / SaaS BDRs.
What's next
The roadmap I'm publicly committing to:
- v1.1 (May 2026) — script library with 5 pre-built trees by trade type.
- v1.2 (June) — call disposition tagging post-hangup → analytics dashboard.
- v1.5 (Aug) — Team tier (multi-seat, shared script libraries).
- v2.0 (Oct) — Windows version (currently macOS only).
Founding members get every one of these at the locked-in £14.50/mo. Standard subscribers will pay current price + any uplifts.
If you want to be on the v1.0 list — the 200 dials I've been running on this thing already work. Coach isn't theoretical. It's running my own outbound right now, and it'll run yours from day one.
— Alix