Skip to content
Multi-tenant SaaS and on-premise platform with AI assistance, Healthcare education, radiology training

Radbase

A de-identified teaching-case archive for hospital radiology departments, with a mandatory consultant sign-off, AI-suggested tagging and a cited reference library.

Radbase case library with faceted filters and diagnosis chips marking confirmed and AI-suggested tags
The case library: facets with live counts, and AI suggestions drawn dashed with their confidence until a person confirms them.

Radbase turns the imaging studies and reports that radiology departments already produce into a teaching library that trainees can search. A resident uploads a DICOM study and its report. The system removes identifying information from the image headers, from text burned into the pixels and from the report itself. A consultant confirms the result, and only then does the case join the department's archive.

Once published, a case can be browsed in a faceted library, read in a built-in DICOM viewer, collected into teaching sets, quizzed on with spaced repetition, and read alongside a licensed reference library whose answers cite their sources. It is an educational tool: it has no reporting or dictation features, and AI output is always presented as a suggestion for a teacher to check.

Radbase is pre-pilot. The full case pipeline runs on the development stack; hospital deployment and a consultant-labelled AI evaluation are the next milestones. No usage figures exist yet, and none are claimed here.

Problem

Real cases teach best, and they are full of patient data

Radiology trainees learn from real cases, and departments are full of them. In practice those cases are collected informally: screenshots in messaging groups, folders on shared drives, slide decks that go stale. Nothing is categorised or searchable, and a collection often leaves with the person who built it.

A shared archive is simple in principle and hard to build responsibly, because every study carries patient information in three places: the DICOM headers, text burned into the pixels by ultrasound machines and screen captures, and the free-text report. Missing any one of them publishes patient data to a whole department. Hospitals also expect the system to run on their own hardware, inside their own network.

Radbase marketing home page headline beside its four stated privacy promises
The public home page and its four privacy promises.
Approach

Privacy enforced by permissions, not good intentions

The de-identification boundary is enforced by storage permissions. Uploads go straight from the browser into a quarantine bucket that only the Python processing worker can read. The API can write a presigned upload into it and nothing more, so even a serious flaw in the API tier cannot reach raw patient data.

A person decides what gets published. The pipeline never publishes anything itself: every case stops at a review screen where a consultant sees each image that had a text detection, the redactions already applied and the rewritten report. High-risk modalities cannot be passed by the person who uploaded them, a case whose pixels were never OCR-scanned cannot be passed at all, and publishing re-checks the decision on the server.

AI only suggests. Classification and report extraction run on de-identified text, every suggested tag must quote the passage it came from, and suggestions stay visibly unconfirmed until a person confirms them.

De-identification review screen showing the rewritten report with placeholders where identifiers were
The review gate every case must clear. Identifiers are replaced with placeholders such as [NAME] and [DATE].
Solution

From upload to a published, citable teaching case

A guided upload wizard accepts ZIP and RAR archives, DICOM files, pasted report text and PDF reports, and streams live processing progress back to the browser. Original filenames are never stored, because they routinely contain patient names. An optional gateway accepts studies pushed straight from the PACS workstation.

The worker rebuilds DICOM headers from an allowlist based on DICOM PS3.15, burns redactions into the stored pixels after OCR, and replaces identifiers in reports with placeholders such as [NAME] and [DATE] so sentences keep their teaching value. Every run writes an append-only record of what was removed, never the removed values.

Published cases appear in a faceted library, a 3D anatomical navigator and a taxonomy tree. Each hospital is isolated by forced PostgreSQL row-level security, and the whole stack installs on a single on-premise machine with preflight checks, encrypted backups and versioned upgrades.

Key features
  • Three-layer de-identification

    DICOM headers rebuilt from an allowlist, burned-in pixel text found by OCR and redacted in the stored pixels, and report identifiers replaced with placeholders that keep the sentence readable.

  • Consultant review gate

    Pass, redact more with drawn boxes applied to the stored pixels, or reject. Independent review is required for high-risk image types, and a case with no OCR scan cannot be passed.

  • AI tagging that shows its evidence

    Classification and report extraction quote the passage behind every value, may explicitly decline to answer, and stay marked as suggestions until a person confirms them.

  • Reference library with citations

    Answers drawn only from licensed sources, every sentence tied to a numbered passage, and an explicit refusal when the library holds nothing relevant.

  • Case library, viewer and quiz

    Faceted search with live counts, a Cornerstone3D DICOM reader, teaching collections and FSRS spaced-repetition quizzes.

  • Built for on-premise hospitals

    A single-machine install with preflight checks, an air-gap bundle, encrypted backups with a restore drill, and upgrade and rollback scripts.

Tables of DICOM tags removed or replaced and tags retained, with the reason for each
What the header pass removed and what it kept, with the reason for each tag.
Review queue grouped by reason with countdowns against the 72 hour raw upload purge
The review queue, with each quarantined upload counting down to its 72 hour purge.
Case reader with series rail, measurement tools and a case panel of diagnosis, history and tags
The case reader. Synthetic capture data, so the image viewer is intentionally empty.
Reference library licence register listing each source's licence basis and indexing state
The licence register behind the cited reference library.
Taxonomy explorer with classification axes and a tree whose counts roll up from child terms
The taxonomy explorer, with counts rolling up from child terms.
Spaced-repetition quiz queue listing due, new and scheduled cards
The spaced-repetition quiz queue.
Case reader detail panel on a phone showing diagnosis, attributes and teaching points
The case panel on a phone.
De-identification review on a phone with the same gate statement as desktop
The de-identification review on a phone.
Under the hood
  1. 01

    Credentials guard raw patient data

    Storage access is split across three service accounts. The API has no credential that can read quarantine, so the most important privacy property survives a code mistake.

  2. 02

    Two isolation layers per hospital

    Application role checks plus forced row-level security in PostgreSQL. The API refuses to start under a database role that could bypass those policies, and CI fails any table without one.

  3. 03

    Two runtimes for a reason

    Next.js 15 and NestJS 10 in TypeScript for everything user-facing, and a Python 3.12 worker on ARQ for DICOM, OCR and report processing, the only process allowed to touch raw uploads.

  4. 04

    Model-agnostic AI layer

    A provider abstraction with a Claude adapter using structured outputs, prompt caching and batch processing, a mock adapter for CI, and an evaluation harness ready for consultant-labelled cases.

  5. 05

    Hybrid retrieval, honestly reported

    Full-text search and pgvector retrieval merged by reciprocal rank fusion, with an optional reranker. Each answer states whether it was lexical-only or hybrid and whether reranking ran.

  6. 06

    Tested at depth

    CI runs type checks including mypy strict, unit and integration suites and a 56-study synthetic DICOM corpus with planted fake identifiers, about 2,200 automated tests in total.

Outcome
  • A department can collect teaching cases in one place without putting raw patient data in front of the application tier.
  • Every case needs a named consultant's sign-off before anyone else can see it.
  • Trainees can find cases by facet, anatomy or text, read them in a DICOM viewer and ask questions answered only from licensed, cited sources.
  • A hospital can run the complete system on one machine inside its own network.

Next project

Twill Press StudioApparel printing and custom garments