Precision-oncology decision support that turns real NGS tertiary-analysis output into a per-patient molecular report, grounds every recommendation in appraised literature (PICO · PRISMA · GRADE), and generates a board-ready case presentation.
Built for a community cancer center — one that runs next-generation sequencing but can't staff the specialty molecular-tumor-board (MTB) panel a university hospital has. The platform reads genuine OncoKB / ESCAT annotation, matches FDA and investigational therapies, appraises the evidence per gene, and re-annotates signed reports so a variant reported as a VUS today is flagged the day it becomes actionable.
▶️ Try the live demo → https://mtb-platform.pages.dev/No login, no install — the app runs fully client-side. Bring your own VCF (parsed in-browser, nothing uploaded) or open a sample patient report.
- 🧬 Per-patient molecular report — ESCAT-tiered variants, OncoKB-matched
therapies, TMB / MSI / HRD biomarkers, copy-number & fusions, from real
ngs-tertiary-analysis-skillspipeline output. - 📚 Per-gene PICO literature review — each alteration becomes a PICO question appraised as a systematic review (PRISMA 2020 selection + GRADE certainty), or derived from retrieved PubMed evidence, with one-click live synthesis via robust-lit-review and the Anthropic API.
- 🤖 Visible appraisal agent — "Run robust-lit-review" is a streamed, self-correcting loop, not one call: Claude appraises → every cited PMID is verified live against PubMed (NCBI E-utilities) and the retrieved set → if any citation is hallucinated or dead, it's fed back and Claude revises without it. The trace and a green/red citation ledger are shown as it runs, so the self-check is on screen, not implied.
- 📝 AMA-default citations (Vancouver / APA) with clipboard copy, reference-list export, and a mybib.com hand-off.
- 🩺 Case-presentation deck — a keyboard-navigable, print-to-PDF slide deck for the live board meeting, with blur-until-click patient identity and AI-drafted narration.
- 🔁 Re-annotation — signed reports are re-screened against updated knowledge bases; newly actionable variants raise an alert.
- 🎯 Mutation Mapper — cBioPortal-style lollipop plots (Pfam domains, ESCAT rings, recurrence scaling) per mutation and cohort-wide, so hotspots and functional context are visible at a glance.
- 🗒️ Anchored clinician notes — jot a note on the thing you're looking at (a variant,
a therapy, a report section), not a free-floating scratchpad. Notes are editable,
aggregated in a per-report Notes tab, export with the case as JSON, and every
add/edit/delete is logged to the audit trail as a
humanaction. - 🧾 Full audit trail — every operation across every process lands in one append-only
log, tagged by trust class:
code(deterministic),model(a Claude call, with the model id),external(a third-party fetch, e.g. PubMed),human(a clinician action — sign-off, endorse/dissent). Each event carries a content fingerprint; the log is a global slide-out drawer, filterable and exportable to JSON. The anti-hallucination answer to "which step did what?" — nothing happens off the record. - 🛡️ Responsible AI by default — every Claude call is grounded in the provided
evidence, refusals (
stop_reason: "refusal") are handled gracefully with a fallback to deterministic findings, and a citation checker verifies every PMID/DOI resolves. - 🧪 Live VCF upload, animated tertiary-analysis pipeline view, tumor-board voting, cohort oncoprint dashboard, and IGV.js genome browser.
| Worklist — shared multi-team inbox | Report — re-annotation + board sign-off |
|---|---|
![]() |
![]() |
| Case deck — title slide (PHI blurred) | Case deck — actionable findings |
![]() |
![]() |
Cohort analytics — pan-cancer biomarker landscape, therapy-match rate, recurrent oncogenic drivers, and an ASHOP-style sample-matrix oncoprint.
NGS pipeline reports/ → scripts/build-data.mjs → public/data/*.json → React SPA
│
Anthropic API (Cloudflare Pages Functions) ┘
/api/summary · /api/litreview · /api/narrate
The molecular content is the genuine analysis result read directly from each
sample's pipeline artifacts (ESCAT tiers, OncoKB oncogenicity & matched treatments,
biomarkers, CNV/fusions, PubMed hits). Patient identity is mocked per sample and
PHI-free — real patient directories never enter the repo. Every AI feature is an
Anthropic Pages Function that degrades gracefully (HTTP 503) when no key is set, so
the app runs fully offline. In this high-stakes domain the AI is grounded in the
provided studies, and a Claude refusal returns a structured error the UI falls
back from — never rendering a refusal as clinical advice. Run
pnpm check:citations to verify every PMID/DOI in the data still resolves before a demo.
Vite · React · TypeScript · GitLab Pajamas design tokens (no UI-framework dependency) · react-router-dom (HashRouter) · IGV.js · Chart.js · Vitest · Cloudflare Pages + Functions · Anthropic API · GitHub Actions CI/CD.
The application lives in mtb-platform/ — see its
README for development, data generation, and the
optional Anthropic API-key setup.
cd mtb-platform
pnpm install
pnpm dev # local dev server
pnpm test # Vitest (pure-logic libs)
pnpm build # production build → dist/Pushes to main build and deploy to Cloudflare Pages via
.github/workflows/deploy.yml.
MIT · Built with Claude Code for Built with Claude: Life Sciences.





