Scribe32: AI Clinical Scribe
What I did: I built Scribe32 end to end and I'm its sole maintainer. I designed the AWS architecture, wrote the Python backend and the web app, set up the CI/CD and the four environments, and I own incident response and releases. The practice uses it every day.
11daily users: 1 orthodontist, 10 clinical assistants
< $6/mototal AWS + Deepgram spend
~$0.45per user per month, vs $75 for the commercial scribe it replaced
4environments: prod, staging, demo, local
What it does
An assistant picks a patient and a note template, hits record, and has a normal conversation. When the visit ends, Scribe32 transcribes the audio with speaker labels and turns it into a structured clinical note (SOAP or a practice-specific template) that they review and paste into the chart.
Stack, and why
| Layer | Choice | Why |
|---|---|---|
| Compute | AWS SAM, Lambda (Python 3.12), API Gateway | Usage is bursty: busy clinic hours, idle nights and weekends. Pay-per-request serverless is what keeps the bill under $6 a month, and there are no servers for a one-person team to patch. |
| Data | DynamoDB (notes, patients, templates, users, audit log) | On-demand pricing, no connection pooling from Lambda, KMS encryption at rest and point-in-time recovery on the tables that matter. |
| Speech-to-text | Deepgram (Nova-2, diarization, smart formatting) | Accurate on clinical vocabulary, fast, and separates speakers so the note knows who said what. The API key lives in Secrets Manager. |
| Note generation | Amazon Bedrock (Claude Haiku) | A HIPAA-eligible service that keeps transcripts inside the AWS account, and a small fast model is plenty for structuring a transcript into a template, at a fraction of the cost. |
| Auth | Amazon Cognito with role-based access | Admins invite staff, manage templates and see the team; assistants just record. The API uses a Cognito authorizer by default. |
| Frontend | Vanilla JS + Vite | A small, fast single-page app with no framework to keep upgrading. Light and dark themes. |
| Delivery | GitHub Actions | Checks run sam build on every change; deploys go to staging from the staging branch and to prod and demo only from main. |
Considerations
- HIPAA-aware by design. Per-function least-privilege IAM (the generate function can only invoke Claude models), KMS encryption on every table, CloudTrail, and API access logs with the caller's Cognito identity.
- Audit trail that can't break the app. Every account and admin action is dual-written: a structured line to CloudWatch Logs and a row in a DynamoDB audit table with no TTL. If the audit write fails, it's logged and the user's action still succeeds.
- Cost guardrails. AWS Budgets alerts, right-sized Lambda memory and timeouts, and a public demo that is rate-limited per IP so it can't run up the bill.
- Safe releases with one maintainer. Separate prod, staging and demo stacks plus a local mock API mean I can test a change end to end without touching real patient data.
- Built around the clinic's workflow. Custom templates per visit type, one-click copy into the chart, search across every visit, and a leaderboard so the office can see adoption.