Building healthcare operations software means correctness matters more than elegance.
MedX is a multi-role healthcare operations platform coordinating medical service orders between providers, patients, and administrators. It handles onboarding, scheduling, escrow-style payments, claims/remits, notifications, and real-time operational workflows in a fast-changing environment.
The platform needed a configurable service builder letting healthcare practices define their own service types, pricing, intake forms, and conditional workflow logic at runtime, plus strict role-based access across every protected operational area, layered on top of a legacy frontend that had accumulated inconsistent patterns under rapidly changing requirements.
Requirements themselves were refined collaboratively with stakeholders rather than handed down as a fixed spec, which meant frontend decisions doubled as part of the requirements-definition process, not just its implementation.
The service builder needed real runtime "if-this-then-that" logic, so I built a custom formula and rules engine supporting variable bindings, nCalc-compatible operators, and live expression testing. The UI had to interpret configuration as behavior, not just render static forms. That had to work alongside RBAC-gated workflows, long-lived authenticated sessions, and live SignalR updates synchronized against Stripe-powered escrow payments, without disrupting a system already handling real financial and medical operations.
Organized the frontend around feature domains to isolate workflow-heavy business logic, implemented layered state management (Zustand, React Context, React Hook Form, React Query), and built a centralized auth/network layer handling token refresh, retry flows, and cross-tab synchronization.
The service configuration wizard (question types, conditions, rule actions, JSON schema migration) became the backbone the rest of the platform built on. Several workstreams branched off it in parallel. I planned and coordinated that workload across five developers by task type and dependency, so parallel branches stayed mergeable.
We improved performance with route-level code splitting and lazy loading. react-pdf, xlsx, and Microsoft's auth SDK now load only on the screens that use them: export/reporting, the spreadsheet tool, and sign-in. Main bundle dropped from 1.4 MB to 777 kB, about 49.5% off the original baseline. Unused-JS roughly halved on every page we measured, from about 2.4 MiB to 1.5 MiB. First Contentful Paint went from 0.7 s to 0.5 s, and Speed Index from 5.6 s to 3.0 s.
Invested in a single centralized auth/network layer rather than letting each feature handle its own token refresh and retry logic. More upfront architecture work in exchange for not duplicating fragile synchronization logic across a dozen different screens.
Push for the feature-domain organization earlier. Some of the legacy inconsistency I inherited could have been avoided if domain boundaries had been established before the codebase grew past a certain size.