Building in Public: Week 2 — I Thought I Had a Differentiator

Two phases shipped this week. Then I did the competitor research I should have done eight months ago, and briefly felt like an idiot.

Both things are true. That’s building in public.

What Shipped

Phase 6 was the polish pass — the work that turns a functional app into something that doesn’t feel embarrassing to show someone.

The biggest visible change is the waveform overlay. When you hold the hotkey to start recording, Dictare now shows a floating panel of 16 animated bars that react to your voice amplitude in real time. The previous version used Unicode characters arranged into a rough waveform shape. It worked. It looked like something a developer made as a placeholder and then forgot to replace. The new version uses Core Animation — actual native macOS graphics, smooth transitions, the whole thing. It’s the kind of small detail that makes the difference between “this feels like software” and “this feels like a product.”

Also in Phase 6: custom vocabulary. You can now give Dictare a word list — your name, your company, your product names, technical jargon — and it primes the transcription and polish steps with those terms before every recording. The reason this matters is subtle but real. Without it, GPT sees “Supabase” in the transcript and occasionally decides you probably meant “Superbase” and silently corrects it. With the vocabulary list, it knows you meant exactly what you said. That’s fixed now.

UK English spelling defaults. The app writes “colour” not “color.” This is what I wanted.

Phase 7 was cost monitoring: every call to Whisper, GPT-4o-mini, and DeepL now logs to a Supabase table with the token counts and estimated costs. There’s an admin dashboard at a URL I won’t be sharing publicly. I can now see exactly what the AI bill is per transcription, per day, per user segment. Not because subscribers need to care — they don’t — but because I need to know whether the pricing model is viable before I give it to anyone.

Phases 6 and 7 both done, both clean, both deployed. Good week on the build side.

The Trial Model Problem

One other thing got fixed this week that I was slightly embarrassed about.

When I built the trial system, I gave new users 30 minutes of free transcription. Lifetime. Use it up and the paywall kicks in.

Thirty minutes sounds reasonable until you think about it from the user’s perspective. You download a new app, you try it out during some emails, you use maybe 10 minutes across a few sessions over a few days — and then one day you hit the wall with no warning and no obvious path forward. The 30-minute cap is invisible until it runs out.

The revised model: a 7-day free trial with 30 minutes per day. You get a full week to build the habit, with a consistent daily budget that resets each morning. Much fairer. Much more likely to result in someone actually deciding whether the product fits their workflow before hitting a hard stop.

That shipped as PR #1 on Thursday evening, along with a discovery that had been silently failing since Phase 7: the `api_usage` table that all three Edge Functions were writing cost data to didn’t actually exist in production. I’d written the logging code weeks earlier and thought it was working. It wasn’t. The calls were failing silently and the data was going nowhere. The migration to create the table and the trial revision went in together. Both deployed. Both now confirmed working.

The Competitor Discovery

Here’s the part of the week I wasn’t expecting.

Phase 8 is marketing — competitor research, positioning, outreach strategy. I’d been putting it off because the product wasn’t finished enough to need it yet. This week I sat down and actually did it.

The positioning I’d been working from for months: Dictare runs on both macOS and Windows, which the main competitor (SuperWhisper) doesn’t. And Dictare has built-in translation, which no other dictation tool has properly. Cross-platform plus translation. That was the differentiator.

I went to SuperWhisper’s website for the first time in months to confirm this.

SuperWhisper now has a Windows app. And their Pro tier includes translation — voice in any language, output in English. They launched both things at some point while I was heads-down building.

I sat with this for about twenty minutes. Then I kept reading.

SuperWhisper translates to English. Only to English. They’re solving the problem of “I speak X, I want English text.” That’s one direction.

Dictare goes in any direction. Pick a source language. Pick a target language. The two don’t have to involve English at either end. Speak English, get German at your cursor. Speak German, get Japanese. Speak Japanese, get Mandarin. The pipeline doesn’t care which way the bridge runs — it transcribes whatever you spoke, then translates to whatever target you’ve set. That breadth is the part nobody else seems to have built.

The research also turned up that at least eight or nine other apps have added outbound translation in some form, but every one of them assumes English is one of the two endpoints. None of them handle the “I work in Berlin, my client is in Tokyo, I want to dictate in German and have polished Japanese land in my email draft” case. Dictare does.

What is still genuinely different: the combination of DeepL as the translation engine (better quality for European business writing than anything GPT-based, empirically), and a polish step that understands register. Formal German with “Sie” rather than “du.” Japanese business tone rather than casual tone. Not a feature checkbox — an actual understanding that business correspondence has different rules than personal messages.

That’s the differentiator. It was there the whole time, just not the one I’d been leading with.

The Other Things

BadgerBuilds is now a real domain. badgerbuilds.co — the umbrella brand above Dictare. Twenty-seven pounds a year. It exists.

I started the Reddit warm-up this week. The account — u/Badger_6789 — was registered on Wednesday evening. On Thursday evening I tried to post a comment in r/productivity about voice input workflows. AutoModerator removed it instantly. Account less than 24 hours old, not enough karma, comment gone.

Turns out r/productivity requires a 30-day account age and 200 karma before it’ll let you comment without being auto-removed. I did not know this. The account age wall clears on 13 June. Until then: earn karma in lower-barrier communities, post nothing about Dictare, wait.

I also wired up a self-hosted CI runner — the Mac Mini in the corner is now a GitHub Actions runner that can build macOS targets directly. Useful later for automated builds and eventually signing and notarisation. It ran its first workflow this week in 2 minutes 18 seconds.

The State of the Build

As of this Sunday:

  • macOS: fully working, paywall live, trial model revised, cost monitoring active
  • Windows: scaffolded, not yet functional — that’s this coming week
  • Phase 8 (marketing): research done, positioning revised, outreach starting
  • The revised positioning feels more honest than the old one, actually. “Speak English, write in any language” is the real use case. The fact that SuperWhisper got there first on the platform-and-basic-translation story doesn’t change that — it just means I need to lead with the thing they haven’t built.

    Launch is still Q3. The Windows work starts now.

    This Week in Numbers

  • Phases shipped: 2 (Phase 6 UI polish, Phase 7 cost monitoring)
  • Lines of Core Animation code written for 16 animated bars: more than expected
  • Minutes the trial model gave new users before I realised it was wrong: 30 (lifetime)
  • Minutes the trial model now gives new users per day: 30
  • Competitor websites actually read properly for the first time: 1
  • Reddit comments auto-removed by AutoModerator: 1
  • Days until Reddit age wall clears: 27
  • Good week. One unsettling afternoon. Net positive.

    — Badger

    Badger is building an AI-powered side income in public. No gurus, no fluff — just honest accounts of what’s working, what isn’t, and what it’s actually costing.

    Leave a Comment

    Your email address will not be published. Required fields are marked *

    Scroll to Top