All articles

From beta to stable: shipping Scriba 1.0

What we learned tightening a local-first Mac app for production

Scriba 1.0 wasn't a marketing milestone we rushed. It was the point where the core loop — record, transcribe, chat, sync — stopped feeling like a beta experiment and started feeling like infrastructure people could rely on every day. Reaching stable meant saying no to features that compromised that loop.

What beta taught us

Early adopters pushed us hardest on audio integrity and sync edge cases. Sample-rate mismatches made playback drift. WebViews cached repaired WAVs. Outbox rows with empty IDs broke pushes. Each bug class became a guardrail in the stable branch — not a one-off fix we hoped wouldn't recur.

  • 16 kHz mono playback enforced through a single write path.
  • Automatic repair on meeting open with _prerepair/ backups.
  • Sync engine polling every 30 seconds with SQLite triggers feeding the outbox.
  • Crash-safe bulk import with retries and deferred jobs when quotas bite.
  • Session audit logging for login, logout, and trial-expiry events.

Shipping discipline

We run strict dev, beta, and main branches. Releases are built locally, signed, notarized, and tagged from a checklist — not dropped from a CI artifact no one opened. The in-app updater respects silent, optional, and mandatory modes so we can roll out fixes without nagging people who are heads-down in a client call.

Beta users lived through rough edges we can't pretend were charming. They reported sync conflicts at the worst times, hit quota walls during bulk imports, and taught us which error copy actually helps. Stable is our promise that those reports became tests, not tickets we quietly deprioritized.

Stable means a teacher can record office hours and a lawyer can record a deposition without wondering if today's build will eat yesterday's audio.

Beyond the version number

1.0 also meant this website, admin-curated What's New and Welcome Tour flows, testimonials on the sign-in screen, and finance tooling behind the admin portal. The desktop app is the product; the surrounding systems are how we operate it responsibly at scale without shipping a half-finished experience to paying customers.

What comes next

We're not done. Post-1.0 work is about polish: tighter conflict copy, faster embedding search, more languages, and continued hardening of anti-abuse without punishing legitimate users. Version 1.0 was the floor, not the ceiling. If you're on stable, thank you for the bug reports that got us here — keep them coming.

If you joined during beta, you already shaped what stable means. The best way to stay on the journey is simple: record a real meeting, break something if you can, and tell us. That's how 1.0 became trustworthy — and how 1.1 will too.

Keep reading