Back to all work

Case study · 2026

Lumen

A lab report PDF becomes a dashboard you can read in ten seconds — parsed, scored, charted and interpreted, with a designed PDF back out.

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind v4
  • FastAPI
  • pdfplumber
  • jsPDF
  • LLM

The problem

A lab report is a wall of numbers. Forty biomarkers, each with a value and a reference range, and no indication of which three actually matter. Reading one properly takes a clinician a few minutes and a patient considerably longer, if they manage it at all.

Lumen takes the PDF and gives back a dashboard. Parsing, scoring and charting happen in a single pass, and the AI read-out writes itself the moment parsing finishes — there is no Analyze button to press.

What it does

  • Drop in one PDF or several. No account, no sign-up, no intake form.
  • Bubble sizes are proportional to how many markers landed in each state, and the fingerprint grid puts one dot per biomarker so an unhealthy panel is visible before you read a word.
  • Every marker is plotted on its own reference-range track, so 158 reads as how far out of range it is, not merely that it is.
  • Priority markers are ranked by severity first, then by actual distance from the reference band — a genuine triage rather than whatever panel parsed first.
  • The PDF export draws the score dial, distribution bar, panel chart and every range plot as real vector shapes, so text stays selectable and nothing blurs at any zoom.
  • Reports are parsed in memory and never stored. Close the tab and it is gone.
Lumen upload screen
Fig. 1 Drop the file. That is the whole interaction.
Lumen health overview dashboard in light theme
Fig. 2 The dashboard builds itself — parsing, scoring and charting in one pass.
Lumen AI analysis panel
Fig. 3 No Analyze button. The write-up appears the moment parsing finishes.
Lumen biomarker cards grouped by panel
Fig. 4 Every marker plotted on its own reference-range track.
Lumen priority markers list
Fig. 5 Ranked by severity, then by distance from the reference band.
Lumen exported PDF cover page
Fig. 6 The export is vector, not a text dump — sharp at any zoom.

What was hard

Lab PDFs have no schema

Every laboratory lays its report out differently, and a marker's name, value, unit and range can sit in four unrelated places on the page. The parser works from geometry rather than text order, which is the only thing that generalises across labs.

A score has to be defensible

Panel scores run 0–100, and the number is only useful if it moves for a reason. Scoring works off distance from the reference band, weighted by severity, so a marker sitting just outside a range never reads the same as one sitting far outside it.

Vector PDF, not a screenshot

Exporting the dashboard as an image would have taken an afternoon. Redrawing the dial, distribution bar, panel chart and every range plot as jsPDF vector primitives took considerably longer, and it is the reason the report survives being printed.

Amir Trs Biomedical AI Engineer

Built with Next.js and Tailwind · 2026-08-26