Pulse: A Population-Health Command Center Built with Shiny for Python and React

Pulse is a population-health command center: one web app where a health manager can see who is at risk, understand why, watch an intensive care unit in real time, test the value of an intervention before funding it, and check that the data behind every number can be trusted.

The app runs on a free server that sleeps when idle. If it takes about a minute to open, it is waking up; after that it is fast. All patient data in the app is synthetic.

Why I built it

Health data usually lives in separate places: a patient registry here, ward monitors there, budget spreadsheets somewhere else. Decisions get made on partial pictures, and data-quality problems quietly distort the numbers. Pulse brings these views together in one place and keeps every figure traceable back to the data.

It is also my first project with shinyreact, a new package from Posit that lets a Shiny for Python server do all the data work while a React front end handles the interface. Python does the analytics, and the browser gets a fast, modern, app-like experience.

5 connected viewsPopulation, Patients, ICU Live, What-if and Data quality
3,000 patientsA synthetic registry with realistic data-quality defects
Live every secondICU vitals stream from the server with NEWS2 scoring
ExplainableEvery risk score is broken down factor by factor

1. Population: who is at risk?

Population view: cohort filters, headline indicators, risk distribution and risk by age and sex

Figure 1: Population view: cohort filters, headline indicators, risk distribution and risk by age and sex

The Population view answers the first question any health manager asks: how is our population doing, and where is the risk concentrated?

Further down the page, a comorbidity map shows which conditions occur together more often than chance, and a regional view compares cost and risk across regions.

2. Patients: why is this person at risk?

Patients view: risk-ranked patient list, readmission gauge, explainable risk drivers and flagged vitals

Figure 2: Patients view: risk-ranked patient list, readmission gauge, explainable risk drivers and flagged vitals

A risk score is only useful if a clinician can trust it. The Patients view opens an individual chart and explains the number.

Below these, a 24-month trend of HbA1c and blood pressure and a timeline of admissions, emergency visits and medication changes complete the picture.

3. ICU Live: real-time early warning

ICU Live: streaming ECG, oxygen and breathing waveforms with NEWS2 early-warning scores for eight beds

Figure 3: ICU Live: streaming ECG, oxygen and breathing waveforms with NEWS2 early-warning scores for eight beds

The ICU Live view simulates a ward monitor for eight intensive-care beds. The server sends new vital signs every second, and the screen draws bedside-style waveforms: heart rhythm (ECG) in green, blood oxygen (pleth) in blue and breathing in yellow.

4. What-if: is an intervention worth funding?

What-if simulator: intervention levers, readmissions avoided, savings, ROI and the shift in the risk curve

Figure 4: What-if simulator: intervention levers, readmissions avoided, savings, ROI and the shift in the risk curve

Before a program is funded, managers need to know what it is likely to achieve. The What-if simulator turns that into numbers.

5. Data quality: can we trust the numbers?

Data quality: completeness before and after cleaning, duplicate and stale records, the cleaning pipeline and a field-by-field profile

Figure 5: Data quality: completeness before and after cleaning, duplicate and stale records, the cleaning pipeline and a field-by-field profile

Every real registry has errors, and dashboards are only as good as the data behind them. The Data quality view makes those problems visible and fixable.

How it is built

Note: all patients, wards and figures in Pulse are synthetic, generated for demonstration. The risk model is illustrative and not validated for clinical use.

Try it

Open the app, filter the population, open a high-risk patient's chart, then switch to ICU Live and click Simulate deterioration. I would love to hear what you think, and what you would add for your own health program.

The app runs on a free server that sleeps when idle. If it takes about a minute to open, it is waking up; after that it is fast. All patient data in the app is synthetic.