← Work

Flagship platform

Scribient

Ambient clinical intelligence built as a separable API, worker, and front, with compliance constraints treated as architecture, not a checklist.

Problem

Clinical product surfaces cannot pretend. PHI, billing, EHR, and AI share one trust boundary — auditors need package boundaries, operators need the system to keep running when a model call flakes.

What was built

NestJS API over Fastify, NestJS workers, Prisma/Postgres, Firestore session state, Next.js 15 front with vendored shared contracts. Encryption envelopes and hash-chained audit in packages every write path can call. Cloud Run deploy path.

Who used it

Built as a clinical ambient-intelligence platform for operators and auditors who need attributable AI paths — not a chat demo.

Measurable results

Internal packages
13 @scribient packages
Trust plane
HIPAA gates + AES-GCM/KMS + hash-chained audit
Worker AI path
OpenAI / Anthropic / GenAI / AssemblyAI
Deploy
Cloud Run

The constraint

Clinical product surfaces cannot pretend. PHI, billing, EHR, and AI all share one trust boundary. Auditors need package boundaries. Operators need the system to keep running when a model call flakes.

The decision

Split into NestJS API over Fastify, NestJS workers, Prisma/Postgres, Firestore session state, and a Next.js 15 front with vendored shared contracts. Encryption envelopes and hash-chained audit live in packages every write path can call. Cloud Run is the deploy target.

Architecture evidence

  • 13 internal @scribient packages including ai, audit, billing, encryption, ehr, messaging
  • Worker path: OpenAI, Anthropic, Google GenAI, AssemblyAI for NLP / ICD-CPT / DDx / CDS / RAG
  • HIPAA gates, AES-GCM + KMS envelope encryption, Stripe billing, AdvancedMD EHR client
  • Front: NextAuth, next-intl, Storybook, Playwright, Sentry, Upstash Redis

What I'd do differently

I would lock the OpenAPI contract earlier and treat the Nest migration waves as a published runbook from day one, so every contractor inherits the same threat model instead of rediscovering it.

NestJSFastifyPrismaNext.jsStripeCloud Run

Related dossier entries: Scribient.

Back to work