In production with practicing veterinarians

SOAP notes that write themselves, while you focus on the pet.

VetScribe records a consultation, transcribes the conversation, and produces a clean, structured SOAP note in under a minute — on web or on the iPhone in your scrub pocket.

Audio → Deepgram transcription → Claude Sonnet 4.6 → structured note. Roughly 30–45 seconds end to end.

1–2 hrs
The typical vet spends this much per shift writing notes after appointments.
~40 sec
VetScribe's median time from end-of-visit to a finished SOAP note ready for review.
$0.04
Average AI cost per visit. Surfaced transparently in the app's Usage view.
What it does

A full clinical scribe, not a transcription toy.

VetScribe is shipped, used in real appointments, and shaped by ongoing feedback from practicing vets.

Record anywhere

Native iOS recording with offline queueing, plus a web recorder for clinic workstations. Auto-recovery if anything crashes mid-visit.

Structured SOAP output

Subjective, Objective, Assessment, Plan — generated to the format clinics actually use, with veterinary terminology preserved verbatim.

Multi-pet visits

One household, one appointment, separate notes per pet. Claude is prompted to disambiguate which animal each finding belongs to.

PDF record intake

Drop in prior records or referral packets. The app extracts history, prior diagnoses, and medications into searchable summaries.

Refinements & discharge

One-tap polish, rewrite, or expand any SOAP section. Generate client-friendly discharge instructions from the same source.

Team workspaces

Invite associates, share patient history, track per-user usage. Role-aware admin tooling for clinic owners.

How it works

Four steps, roughly forty seconds.

Every visit moves through the same pipeline. Every step is observable, costed, and re-runnable from the visit detail page.

  1. 01

    Record

    Tap record at the start of the appointment. Audio is captured locally with automatic chunking and crash recovery so an unexpected reload doesn't lose the visit.

  2. 02

    Transcribe

    On stop, audio uploads to a streaming Deepgram Nova endpoint. The transcript is cleaned with a domain-specific pass before any clinical reasoning happens.

  3. 03

    Generate

    Claude Sonnet 4.6 generates a structured SOAP note from the cleaned transcript using a prompt tuned on real veterinary visits — preserving drug names, dosages, and exam findings.

  4. 04

    Refine & share

    The vet reviews, optionally requests refinements (shorter, more clinical, expand the plan, etc.), and can spin off a client-friendly discharge summary from the same source.

Under the hood

Engineered like a real product, not a demo.

One TypeScript codebase covers a Next.js web app, a Next.js API layer, and a React Native client — all shipped continuously.

AI
  • Claude Sonnet 4.6 (Anthropic) — SOAP generation, refinements, discharge
  • Deepgram Nova — streaming medical transcription
  • Prompt cache + structured outputs for cost & latency control
Web
  • Next.js 16 + React 19 (App Router, RSC)
  • TypeScript end to end
  • Tailwind v4
  • Deployed on Vercel
Mobile
  • React Native + Expo (expo-router)
  • Native audio capture with offline queueing
  • EAS Update — OTA rollouts to TestFlight without rebuilds
Backend
  • Supabase Postgres + Row-Level Security
  • Supabase Auth (magic link + OAuth)
  • Per-user / per-team usage accounting at the API boundary
Engineering decisions

The trade-offs behind the build.

A scribe app is only as useful as it is reliable. These are the constraints the product was designed around.

Cost-aware AI

Every model call is logged with token counts and dollar cost, surfaced in a per-user Usage page. The clinic can see what each visit cost to process — and so can I.

Resilient capture

Recording state is persisted client-side every few seconds. If the browser or app dies mid-visit, the next launch detects the orphan and offers to recover and upload.

Same-day shipping loop

Vet feedback button → tagged in admin dashboard → fix → EAS Update OTA → in the user's hands within hours, often without a TestFlight rebuild.

RLS-first data model

All patient data is partitioned by user and team via Supabase Row-Level Security. Admin tools use a service role only at clearly delineated boundaries.

About the builder

Elliott Crane

I designed, built, and continue to operate VetScribe end to end — product, infrastructure, AI pipeline, mobile, web, and the conversations with the veterinarians using it every day.

What I'd be excited to talk about

  • Designing AI features that hold up under real clinical use — not just demos.
  • Shipping a multi-platform product (web + iOS) as a solo developer with continuous OTA delivery.
  • Building tight, fast feedback loops between users and the codebase.
  • Cost, latency, and reliability trade-offs in an LLM-heavy product pipeline.