How I built a mobile-first, offline-first product that turns mental-health consultation audio into an editable, versioned, and auditable clinical-note draft.
At a glance
Role
Sole author · product design, architecture, and full-stack engineering
Private source repository and no public demo. This case study publishes the verified architecture, behavior, and quality gate without exposing clinical data.
Disclosure boundary
Disclosure boundary
Audit basisReviewed against the private repository, its automated checks, and the project technical brief. The product is presented as an engineering MVP, not certified medical software or commercially validated adoption.
Published here
Product flow, system boundaries, stack, engineering decisions, and failure handling.
Verified lint, typecheck, test, and production-build status as of the review date.
Explicit limits around human review, privacy, beta readiness, and regulatory work.
Kept private
Private source code, credentials, deployment details, and any real or representative clinical records.
A public demo until security, privacy, consent, retention, and market-specific requirements are reviewed.
01 / Overview
PsiNota explores a complete product problem rather than an isolated model call: preserve a consultation recording, process it reliably, produce a structured draft, and keep the professional in control of the final clinical note.
02 / The problem
The problem
A transcript does not remove the documentation burden by itself. Relevant information still has to be structured, reviewed, corrected, finalized, and traced without losing the original recording when connectivity is unreliable.
03 / My responsibility
My responsibility
Designed the product states and implemented authentication, consultation tracking, browser recording, resumable uploads, asynchronous processing, review, versioning, finalization, and audit history.
Built the React PWA and Express API, modeled the PostgreSQL domain, integrated transcription and structured extraction, and packaged the system for a pragmatic Docker Compose deployment.
Defined backend invariants for user isolation, sequential note versions, immutable finalized notes, persisted jobs, retries, and auditable state changes.
Constraints
Constraints
AI output had to remain an editable draft and require explicit professional approval; it could not become a clinical decision.
The recording is the hardest input to reproduce, so intermittent connectivity could not be allowed to discard it.
The MVP needed low-cost deployment and recoverable processing without introducing distributed infrastructure before product validation.
04 / Architecture
Architecture
Consultation-to-note path
The PWA protects capture locally and uploads directly or in chunks. The API validates identity and ownership, creates a persisted job, and streams progress. A transactional worker transcribes, extracts, renders, versions, and audits the draft in PostgreSQL.
Threat modeling, encrypted audio storage, verified deletion, restore drills, Playwright coverage, operational metrics, and validation with consented fictitious or de-identified data.
10 / What I would improve next
What I would improve next
Cover the critical create, capture, process, edit, and finalize journey with Playwright and ephemeral PostgreSQL integration tests.
Complete a threat model, encrypt audio at rest, verify retention-driven deletion, and rehearse backup restore before any real-data beta.
Run a small consented beta and measure processing success, median draft latency, editing rate, time saved, return use, and unit cost without promoting targets into outcomes.
The résumé provides the complete career context. For client-sensitive details, contact me and I can discuss the work at the appropriate disclosure level.