← back to work
2026 · Product direction & decisions; AI agent (Claude) as builder

Amber — Family Bloodwork Dashboard

Lab report PDFs in, one offline health dashboard out — with AI-verified extraction and recommendations that remember.

ai-agentshealthopen-sourceprivacy
Amber — Family Bloodwork Dashboard interface
1 file
// the whole dashboard — works offline, any device
minutes
// from lab PDF to updated family trends
100%
// private — health data never leaves your machine
stack: Hermes agent platformPythonpdfplumberMulti-model LLMsCloudflare Pages

Why this build

Every family accumulates lab reports as PDFs in a portal — and nobody can answer “is my cholesterol trending better since 2024?” without opening six files and squinting. Amber is my answer, and also a deliberate exercise in a harder product problem than a dashboard: an AI pipeline you can trust with health data, where extraction errors are unacceptable and privacy is architectural, not a policy page.

The product

Drop a lab PDF into a folder (one folder per family member), tell the agent to process it, and Amber extracts every blood marker, verifies the extraction, validates it against a schema with plausibility bounds, writes a plain-English recommendation, and rebuilds a single offline HTML dashboard — person tabs, an in-range ring, a report timeline, trend charts against each marker’s reference range, and the full recommendation history.

🎭 Click through the live demo (fictional data) · 💻 Source on GitHub

The design bet: scripts where determinism matters, LLMs where judgement does

The five-stage pipeline splits cleanly. Deterministic Python does the parsing, validation, and HTML generation — the things that must behave identically every run. An LLM is used at exactly two points: verifying the extraction against the raw PDF text (every stored value carries its source line; the printed value is never trusted blindly), and writing the recommendation, which reads the previous one first so guidance has memory — “ferritin was low last time and wasn’t retested” is the kind of continuity a stateless summarizer can’t produce.

Real-world PDFs earned their scars: two-letter HI/LO flags, >=-style range notation, narrative guideline lines that look like results (a plausibility guard stops a sentence mentioning “2013 CDA Guidelines” from becoming an HbA1c of 2013), month-first dates where the PDF content must win over the filename, and a filename parser where the folder — not the file name — decides identity.

Privacy as architecture

The dashboard is one self-contained HTML file with zero external requests — no CDN, no fonts, no analytics — because health data shouldn’t touch a network to be viewed. The open-source release gitignores data/ by default, ships only fictional people (generated by the same synthetic-PDF tooling the 43-test regression suite uses), and the live demo is built entirely from that fictional data. The real install runs privately on my machine; nothing about my family exists in the public repo or its git history.

What I’d tell another PM

The interesting work wasn’t the charts — it was deciding where the model belongs. Extraction verification and memory-threaded recommendations are genuinely better with a frontier LLM; everything else got cheaper, faster, and more testable as plain code. That boundary — and a test suite that pins it down with golden fixtures — is what makes an AI product dependable instead of demo-ware.


← back to all work