Replaced a forms-and-email intake with a live clinical support queue
A national health system's clinical informatics team handled clinician support requests through web forms and email. They got a real-time queue with routing, coverage, and escalation, and the platform got its first modern design language in the process.

Outcomes
- Intake channel
- Forms + email → live queue
- First release
- Merged in 7 days
- Hospital brands themed
- 6 from one cascade
- Custom primitives
- 16
Requests, coverage, and status visible to the whole team in real time.
From first commit to the dashboard on main. Coverage pages followed within two weeks.
Every brand inherits the new design language through tenant tokens, with no hardcoded colors.
Cards, pills, tab strip, nav rail, timers, and more, documented in a live in-app gallery.
The challenge
Clinical informaticists supported clinicians across a national health system through a web-form intake and email follow-up. Nobody could see the queue, who was covering which topics, or which callers were coming back for the third time that day. Requests misrouted when people forgot to change their status at the end of a shift. The platform that would host the new experience was a large Angular application styled in stock Material, with no shared design language to build on and a sibling .NET API owned by another team.
Approach
- Designed the queue, coverage, and status experience in clickable HTML mockups across several review rounds with the system's VP of nursing transformation and its director of clinical informatics
- Pushed back on removing status controls entirely and designed defensive routing instead: an accept-or-decline prompt with a timeout, so a forgotten status never misroutes a call
- Built a scoped design language first: tenant-driven tokens, sixteen custom primitives, and a dev-only gallery so the rest of the team could adopt it
- Reused the platform's existing case infrastructure and agreed the API contract with the backend team before splitting the work
- Shipped behind feature configuration inside the existing app and iterated on feedback from the pilot department
What shipped
The support queue card shows every open request with requester, topic, and time in status. Rows escalate visually as they age, so a hot call jumps out without anyone reading the text, and repeat callers carry a small indicator that surfaces patterns the old process hid. Taking a call, marking it in progress, and completing it are one click each, guarded against double submission.
Status controls give informaticists Ready, Busy, Admin, and Off states, with defensive routing layered on top: when the router pushes a call to someone, they get fifteen seconds to accept or decline with a reason. Declines feed routing intelligence over time instead of vanishing.
Managers set who is a subject-matter expert and who covers which areas on a Team Coverage page. Each user chooses what they actively cover today on a My Coverage page that pre-fills yesterday's selections, because people cover the same things for days at a time.
Underneath it all sits the platform's first modern design language: tokens that resolve through each hospital brand's existing theme variables, sixteen hand-built primitives, keyboard accessibility through the CDK where interaction is complex, and an in-app gallery that shows every primitive in its real theming context.
Stack
- Angular 20
- Nx
- NGXS
- SignalR
- Angular CDK
- SCSS design tokens
- .NET Azure Functions
- Cosmos DB
Services involved
Have a problem shaped like this one?
Tell me what you're working with and you'll get an honest read on whether it's a fit.
Start a project