connected triage system

Atlas

A connected triage prototype system spanning first-responder mobile, incident-command iPad, ER intake, and the local server that kept patient state moving across the demo.

role
digital prototype engineer — apps and real-time system
time
Capstone, 2026
team
Team Atlas
validation
207 server tests passing
public
Prototype system
Atlas final incident command map screen
Instruction
Quick Send

MCI · SHOOTING213 Bull St
Patients
3220
MCI · SHOOTING213 Bull St
Patient Status - 02
3220
02Male · 30s  |  GSW Left ThighDelayed
Anatomical patient illustration with a left thigh injuryGSW
At: Sector B
TimelineSpO2 dropped to 84%Triage updated to delayed
Field response
Patient 02 anatomical injury view
Patient 02GSW Left ThighMale · 30s · Sector B
Delayed
Incident command
02Male · 30s  |  GSW Left ThighDelayed
At: Sector BSpO2 94% · HR 108 · BP 118/74
Receiving careCounty General · 7/20
02Male · 30s · GSW Left Thigh
Delayed3–4 min
SpO2 94%HR 108BP 118/74

case study

why

Context

Emergency coordination is a state problem

Field response, incident command, and receiving hospitals had to read and change the same patient state without collapsing into one generic dashboard.

I built the connected digital prototype layer

I owned the interface structure, SwiftUI prototypes, and local TypeScript/WebSocket server that made the demo behave like one system.

product evidence

Surfaces

one shared state, three focused views

The same incident moved through field response, incident command, and receiving care without forcing every role into one dashboard.

incident command interfaceincident command

system

Architecture

Keep every surface role-specific

The three surfaces share state and vocabulary, but each exposes only the actions that role needs under pressure.

patient.updatedevent.ts
type PatientUpdated = {  type: 'patient.updated';  patientId: string;  patch: PatientPatch;}; server.broadcast(event);

field edits stay small so every surface can patch the same patient row.

patient.assignedevent.ts
type PatientAssigned = {  type: 'patient.assigned';  patientId: string;  hospitalId: string;  etaMinutes: number;}; server.broadcast(event);

assignment is a first-class event, not a hidden button side effect.

capacity.changedevent.ts
type CapacityChanged = {  type: 'capacity.changed';  hospitalId: string;  availableBeds: number;  state: 'receiving' | 'strained' | 'divert';}; server.broadcast(event);

hospital load changes routing without asking the operator to parse a dashboard.

proof

Validation

surfaces
first responder, incident command, ER intake
state
patients, responders, hospitals, assignments
transport
REST setup, then WebSocket state updates
validation
207 server tests passing

This page focuses on the digital layer

Final visual direction, research framing, and the physical prototype were team-owned. The interface system and connected prototype shown here were my contribution.