Healthcare booking platform serving three distinct personas: patients, providers, and operations. Full UX plus product design engagement for 12 months. One React codebase, three information densities.
Healthcare UX is its own specialty. Regulatory constraints (HIPAA style consent, audit trails, session timeouts). Mixed literacy among end users: some patients are eighty years old, some are teenagers booking a first appointment on a phone. Operational staff live on keyboards. Providers read dense clinical data all day. Three mental models. One booking engine underneath.
I joined as lead product designer for a 12 month engagement. Existing product was a provider-first tool that had been retrofitted for patients and ops. Patients bounced on step two. Ops ran a second spreadsheet on the side because the admin UI was too slow. The starting problem: rebuild the experience so one codebase actually serves all three personas, not just the loudest one.
I mapped each persona to a concrete interaction budget. Patients want calm: spacious layout, serif typography, minimal tasks per screen, no jargon. Providers want dense data: information-rich tables, keyboard shortcuts, multi-tab workflows, numbers aligned to the right. Ops want shortcuts: a command bar, batch actions, audit trails they can filter in seconds.
One design system. Three density modes. Same color tokens, same spacing scale, same component library. Different defaults per persona role, set at the layout shell. A patient never sees the command palette. A provider never gets a modal asking if they are sure. Ops never waits on a confirmation screen for a routine action.
Architected the app as one Next.js codebase with a role-resolved layout shell. Persona is read from the auth session, mapped to a density mode (calm, dense, command), and injected as a provider at the root. Components read density from context and swap defaults: padding, font family, table row height, whether a confirmation modal appears.
Provider flows went keyboard first. Every action had a shortcut that ops and providers could discover in a help overlay. Ops got a command palette (cmd+k) with batch actions across rows. Compliance was not a bolt-on: every mutation wrote an audit record with actor, timestamp, before, after, and persona context. WCAG 2.2 AA was checked in CI, not at the end.
The headline number was not a redesign win. It was a pattern win. The command palette replaced four to five clicks with one keystroke for the ten most common ops tasks (reschedule, reassign, cancel, refund, bulk confirm). Batch actions removed the row-by-row loop ops used to run. Together: 4.2 actions per minute went to 6.7 per minute on the same task set.
Patients felt the change too. Booking time dropped from 6 minutes 20 seconds to 3 minutes 40 seconds, driven by fewer required fields and a serif-led, one-task-per-screen flow. Providers stopped opening extra tabs: screens per session went from 11 to 4, because the dense table view finally held enough information to answer most questions in place.
Book a 30-minute scoping call. We'll look at your current AI citation footprint live, identify the gaps, and decide whether AI-Ready is the right fit. No pitch deck.