Healthcare & Clinical Systems

Bayaz — a notebook for the human thread of patient care

A private, local-first "commonplace notebook" — a place to voice-capture the anecdotes, context, and stories around a patient that never fit in a clinical chart, so they aren't lost.

Tauri + Rust React 19 + Zustand On-device transcription Semantic search In Development

The chart records the disease, not the story

A clinical record captures labs, imaging, and procedures — precisely and correctly. It has no field for "her daughter flew in from abroad the night before the procedure" or "he'd asked the same question three visits running and this time I finally understood why." That context shapes care and is worth remembering, but it has nowhere to live — it either stays in memory (and fades) or gets typed nowhere in particular and is never found again.

Bayaz exists to give that thread a home, without turning it into a second chart or a compliance risk.

Speak the story; the app never files anything without asking

Bayaz is a private desktop app: press record, narrate a story about a patient (or an anonymous one, unattached to any record), and it transcribes on-device, tries to resolve which patient you mean, and then stops — waiting for an explicit confirmation before anything is saved. Once filed, narrations become searchable by meaning (not just keyword) and browsable by tag, and a "Resurface" view synthesizes everything ever narrated about one patient into a single read.

The capture ritual moves through fixed stages — record → transcribe → resolve identity → confirm → file — and "confirming" is a hard stop the app cannot skip past on its own.
Bayaz capture screen — narrating a story about a patient before it's resolved and filed

A state machine built around one rule: never file without a human decision

Confirm-before-filing, always
The capture flow's confirming and mergeConfirm stages are explicit stop points in the state machine — a narration is never auto-attached to a patient record without a human answering first.
Fuzzy identity resolution, three outcomes
Every narration resolves to an exact match, a needsConfirm set of candidates with a confidence and reason, or noMatch — with a merge-suggestion flow to prevent duplicate patient records across two hospital sites.
Anonymous stories are first-class
A narration can be filed with no patient attached at all — for a story worth remembering that isn't (or can't be) tied to a specific record.
On-device transcription and embeddings
Transcription runs locally via Imla; semantic search over narrations runs on local embeddings — nothing about a patient's story leaves the machine.
Resurfacing, not just retrieval
The Resurface view doesn't just list past narrations for a patient — it synthesizes them into a single continuity-of-care read, surfacing the thread rather than a log.
An inbox queue for asynchronous capture
Recordings can queue up and be worked through later; once a queued item is filed, its source recording is deleted — nothing lingers unfiled indefinitely.

Under the hood

ShellTauri v2 (Rust) desktop app for macOS
FrontendReact 19 + Zustand + TypeScript
TranscriptionOn-device via Imla (whisper.cpp + Metal)
SearchLocal embeddings for semantic search over narrations

Where it stands

In active development — a working local desktop build, currently the tool I use myself day to day, ahead of any wider release.

← PreviousEarmark / Gosha Next case studyPhotoMind →

Interested in tools that respect the private side of practice?

If you have a workflow where privacy and human judgment need to come before automation, that's exactly the kind of design problem this project is built around.