Scriba 1.0.22 ships two things we've wanted for a while: playback that heals itself when sample rates drift, and a proper home for the product on the web. Both sound small until you've lived with the bugs they fix.
Self-healing playback
Every meeting's canonical WAV is 16 kHz mono. When the file header disagrees with the actual samples, playback comes out slow or fast — a bug class that kept resurfacing in edge cases. 1.0.22 detects the mismatch on open, backs up the original, resamples to the true length, and rewrites at 16 kHz before you press play.
- Repair runs once per meeting open, guarded by a single writer lock.
- Original audio is preserved in a sibling _prerepair/ directory.
- The player cache-busts by file mtime so WKWebView never replays stale bytes.
Cache-busted WAVs
macOS WebViews cache asset:// URLs aggressively. After a repair, the URL looked the same but the bytes changed — so users heard the pre-repair file until they restarted the app. We now append the file's modification time to the asset URL. Simple, deterministic, and it survives restarts.
Local-first means the file on disk is the source of truth. If the UI shows repaired audio, the bytes behind that URL must match — every time.
A new home on the web
You're reading this on getscriba.app — our marketing site, built in the same design system as the app. Blog posts, changelog entries, and feature pages now share one typography and spacing scale. Expect more product writing here as we ship.
What's next
We're polishing bulk import recovery paths and tightening sync conflict copy. If you're on 1.0.22, update from the in-app checker or download the latest build from Pricing.