← All talks

Client story · Hospital medical physics team · January 2026

Shipping a Hospital's Imaging App, with versioned containers.

A hospital medical physics team's X-ray image analysis app moved from manual deployments to container images built automatically for every release, ready to share with other hospitals.

The situation

A team of researchers had built a Streamlit app for X-ray image analysis. The app worked; getting it into production didn't.

Deployments were manual, and there was no reliable way to tell which version was running where. That made every update and every fix a risk.

Client

Hospital medical physics team

Stack

PythonStreamlitDockerGitHub ActionsGitHub Container Registry

What we did

  1. 01

    Name the bottleneck

    What's working, what isn't, what's next. The problem wasn't the analysis code: it was how code reached production.

  2. 02

    Images per release

    A GitHub Actions workflow builds a versioned container image for every release and pushes it to GitHub's container registry.

  3. 03

    A first release, end to end

    A test run through the whole pipeline to v1.0, so the team saw the process work before relying on it.

  4. 04

    Shareable with other hospitals

    Published images, so another hospital can pull a specific version and run it without building anything.

  5. 05

    Two compose files

    Development builds the image locally; production pulls a pinned version. Both with health checks.

  6. 06

    What's next

    Recommended next step: automated HTTPS certificates for their internal domain.

The result

  • —Every release is a versioned, reproducible image, from v1.0 onwards.
  • —Deploying means pulling a tag; rolling back means pulling the previous one.
  • —Other hospitals can run exactly the same version without building it.
  • —Continuous integration removed the team's main operational bottleneck.
Read the full story ↗ Streamlit × GHCR × CI/CD Qualify for a decision call ↗ 60 seconds, then book if it fits

Want results like this?

A 30-minute decision call turns your situation into a plan.