01Healthcare SaaS
Rebuilding a healthcare SaaS platform without stopping it
A long-lived PHP application rebuilt as Next.js portals, a .NET API and mobile apps on Terraform-managed Azure, with every subscriber carried across.
- Sector
- Healthcare SaaS
- JDO owned
- Architecture · Web & mobile · API · Cloud & IaC · Data migration · Billing
- Stack
- Next.js · React · TypeScript · Tailwind CSS + 9 more
- ClientsWeb · iOS · Android
- PortalsNext.js
- API.NET
- DataSQL · Blob
- Terraformbootstrap · dev · prod
- TelemetryOpenTelemetry
01Challenge
Challenge
The platform had grown for years on a single PHP and MySQL codebase. Clinicians and patients shared one dated interface, releases were manual, and every change risked breaking billing. The business needed a modern product on web and mobile, but it couldn't afford a big-bang rewrite or lose a single customer's history.
02Approach
How it was built
- 01Mapped the legacy schema and wrote versioned, repeatable data migrations, rehearsed against production copies before every cutover.
- 02Split the monolith's UI into dedicated clinician, patient and marketing apps in Next.js, sharing one design system.
- 03Built a .NET minimal API as the single source of truth for web and mobile, instrumented with OpenTelemetry from day one.
- 04Provisioned every Azure environment in Terraform, as separate bootstrap, shared, dev and prod stacks.
- 05Shipped a native iOS app and a cross-platform iOS/Android app against the same API and sign-in.
- 06Moved subscriptions to PayPal billing with webhook-driven state and transactional email.
03Architecture
Decisions that hold the system up
One API contract serving three web apps and two mobile clients, so features ship once.
Dev and prod built from the same Terraform modules, so environments can't drift.
Data migrations versioned in source control and replayable across several legacy schema versions.
A marketing site with a visual rich-text editor, so non-engineers publish without a deploy.
04Outcomes
What changed
- Legacy platform retired, with customer data carried across every schema version.
- Releases went from manual, after-hours events to routine pipeline runs.
- Clinicians, patients and the marketing team each got an interface built for their job.
- Web and mobile now share one API and one identity, so new features land everywhere at once.
Stack
Details are anonymized and simplified to protect client confidentiality.
Next case study
Data & integration
A file ingestion pipeline that runs itself
Building something similar?
Tell me where it's stuck. You'll hear back from me directly.