Skip to content

htlin222/mtb-platform

Repository files navigation

MTB Platform — an AI-assisted Molecular Tumor Board for community cancer centers

Live demo Deploy to Cloudflare Pages License: MIT Built with Claude Code

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-gene PICO evidence knowledge card with PRISMA 2020 selection funnel and GRADE certainty rating in a molecular tumor board report

Highlights

  • 🧬 Per-patient molecular report — ESCAT-tiered variants, OncoKB-matched therapies, TMB / MSI / HRD biomarkers, copy-number & fusions, from real ngs-tertiary-analysis-skills pipeline 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 human action.
  • 🧾 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.

Screenshots

Worklist — shared multi-team inbox Report — re-annotation + board sign-off
Molecular tumor board worklist showing per-patient NGS reports with ESCAT actionable-finding counts and review status Per-patient molecular report with variant re-annotation alert and actionable-finding selection for the tumor board
Case deck — title slide (PHI blurred) Case deck — actionable findings
Molecular tumor board case-presentation deck title slide with blurred patient name for PHI safety Case-presentation slide listing actionable ESCAT tier I and II findings with matched targeted therapies

Cohort analytics — pan-cancer biomarker landscape, therapy-match rate, recurrent oncogenic drivers, and an ASHOP-style sample-matrix oncoprint.

Real-world pan-cancer cohort dashboard: biomarker landscape, OncoKB therapy-match rate, recurrent oncogenic drivers, and sample-matrix oncoprint

How it works

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.

Tech stack

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.

Getting started

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.

License

MIT · Built with Claude Code for Built with Claude: Life Sciences.

About

AI-assisted molecular tumor board for community cancer centers: NGS → per-patient report, per-gene PICO/PRISMA/GRADE literature appraisal, and a board-ready case deck. React + Cloudflare Pages + Anthropic.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors