From Desktop to Cloud: Re-Platforming Two Decades of Allied-Health Practice Management

A mature, profitable practice-management product trusted by physiotherapy and audiology clinics across New Zealand, Australia, and the United Kingdom was locked to the Windows desktop. We moved it to the cloud, rebuilt the experience as a modern web application, and carried forward every billing rule, clinical workflow, and compliance requirement without disrupting a single live clinic.

From Desktop to Cloud: Re-Platforming Two Decades of Allied-Health Practice Management
Client

Allied Health Practice Management SaaS (Confidential)

Duration

Multi-Phase, Ongoing

Industry

Allied Health / B2B SaaS — Physiotherapy & Audiology

Country

New Zealand · Australia · United Kingdom

Tech Stack
  • Angular 18
  • .NET 10
  • Oracle Database
  • SignalR
  • Redis
  • AWS (ECR
  • S3
  • CloudFront
  • CodePipeline)
  • Docker
  • JWT Auth
  • HL7 / HealthLink
Services

The Challenge They Brought to the Table

The client came to us with a mature, profitable product and a clear constraint: it was tied to the desktop. Every practitioner needed it installed on a managed Windows machine, every update shipped as an installer, and working from anywhere was simply not possible. Their customers were asking for browser access, mobile-friendly workflows, online patient booking, and live scheduling that the desktop architecture could never deliver.

A monolithic Windows desktop application installed, patched, and supported one machine at a time

Deep, region-specific billing logic covering NZ ACC, Australian Medicare, insurer and UK private that could not be discarded or rewritten naively

No browser, tablet, or mobile access for clinicians working across multiple sites and from home

No online self-service booking for patients, in a market that increasingly expects it

Appointment scheduling with no real-time synchronisation; shared calendars went stale between manual refreshes

Release cycles gated by desktop installer rollouts, slowing every fix and improvement to customers

A single-region, single-discipline heritage serving three countries and two clinical disciplines with materially different rules

Thousands of daily users in live clinics, meaning any transition had to happen without downtime or data loss

The Approach We Recommended

We did not recommend a rewrite from scratch. With this much embedded domain knowledge, years of edge cases in clinical notes, billing, and compliance, a clean-room rebuild would have discarded the most valuable asset the product had. Instead we proposed a domain-driven replatforming: lift the proven business rules into a modern service architecture, rebuild the experience as a web application, and migrate practices in controlled phases so nobody lost a working system on day one.

Preserve the domain, modernise the delivery: keep the clinical and billing rules, replace the desktop shell, not the logic

Split the monolith: a thin Angular client talking to a versioned .NET domain API over Oracle, replacing the all-in-one desktop binary

Real-time from the start: live scheduling built into the architecture rather than retrofitted onto request/response screens

Compliance as a first-class concern: ACC, Medicare, and UK rules as configurable modules in one codebase, not a per-country fork

One platform, many disciplines: physiotherapy and audiology sharing a common core while specialising where they must

Phased, reversible migration: legacy and new systems running side by side, customers moving in controlled stages, always a working system underneath

key challenges background

The Problem That Needed More Than a Quick Fix

Practice-management software sits in the critical path of a working clinic. If the calendar is wrong, the day falls apart; if a claim is malformed, the practice doesn't get paid. Modernising a system like this is less about visual polish and more about moving deep, load-bearing logic without breaking the businesses that depend on it.

Re-Platforming Without Losing the Domain

The desktop app encoded years of clinical and billing rules: layered appointment types, assessment templates, ACC schedules, Medicare claim formats, contract and class-booking logic, scoring rules on assessment forms. The hard part was never building new screens; it was extracting and re-expressing that logic in a service layer faithfully enough that practitioners wouldn't notice a behavioural difference.

Real-Time Scheduling Across a Practice

A clinic calendar is shared. When the front desk books an appointment, every practitioner's view must reflect it immediately. The desktop model couldn't do this. A real-time layer was needed that pushed appointment changes to every connected client the instant they happened, staying consistent across multiple application servers without the front end constantly polling the database.

Multi-Region, Multi-Funder Compliance in One Codebase

New Zealand's ACC, Australia's Medicare, insurer billing, and the UK's private-billing model are genuinely different regimes with their own data, formats, and submission channels. The naive solution forks the product per country and triples the maintenance burden. The platform had to support all of them from a single, configurable codebase that absorbs regulatory change as configuration rather than a rebuild.

Supporting More Than One Clinical Discipline

Physiotherapy and audiology are different practices with different clinical records, yet they share an enormous amount underneath: clients, appointments, billing, documents, users, security. The platform had to express both without duplicating the common core or letting one discipline's needs distort the other.

Migrating Live Practices Safely

These are running businesses. The architecture, the data model, and the rollout plan all had to accommodate a transition in which the legacy system and the new platform coexisted, customers moved in controlled phases, and there was always a working system beneath them. There was no acceptable big-bang cutover.

Desktop-Like Speed Over a Network

Desktop applications feel instant because the data is local. A web client has the network in between. The scheduling and clinical screens are dense and data-heavy, so keeping them responsive meant being deliberate about what data the client holds, how it is kept current, and how much travels over the wire.

How We Approached It?

Every decision ran through one filter: this software runs real clinics, so correctness and availability come before everything else. Within that constraint, we modernised aggressively. We started from the data and the rules, not the screens, mapping the legacy logic first so the new service layer could reproduce its behaviour exactly.

Angular 18 Front End with Centralised State

An Angular 18 single-page application is the entire user experience. NgRx provides predictable, centralised state management so the dense scheduling and clinical screens behave consistently; Kendo UI supplies the data-grid, calendar, and input components those screens demand; and Tailwind enforces a single, coherent design system. Heavy areas are lazy-loaded so the app starts fast, and an HTTP interceptor layer transparently attaches authentication and handles token refresh. The client is deliberately a thin presentation layer: it renders and orchestrates, but the rules live behind the API.

.NET Domain API with Preserved Business Logic

A versioned .NET 10 service layer over Oracle is the heart of the system. Organised by domain, using a clean inheritance model so that shared behaviour, such as clients, providers, security, and reference data, lives once at the base and each discipline or area specialises only where it must. This is where the preserved business logic was rehomed, exposed as clean REST endpoints. It is the single point at which authentication and role-based access are enforced, so the rules cannot be bypassed from the client.

Real-Time Layer: SignalR with Redis Backplane

Live collaboration is powered by SignalR with a Redis backplane, so notifications stay consistent even when clients are connected to different application servers. Database changes propagate through an Oracle Advanced Queuing pipeline: a trigger writes the change to a staging table, a background service drains the queue, and the hub broadcasts to exactly the clients that care. This is what makes shared calendars feel live without the front end polling.

Oracle as System of Record with Differential Sync

Oracle remains the system of record, a deliberate migration decision: keeping the proven data model reduced risk and made it possible to run old and new systems against compatible data during the transition. Reference and list data is served through dedicated, cacheable endpoints, and a differential synchronisation layer keeps each client current by sending only what has changed rather than reloading everything.

Parameterised CI/CD on AWS for Every Region and Environment

The platform is containerised with Docker and deployed through an automated CI/CD pipeline on AWS, using CodePipeline and CodeBuild for build and release, ECR for images, S3 and CloudFront for static assets and global delivery, and Lambda for supporting serverless workloads. Critically, the build is parameterised by region and environment, so the same codebase produces correct, separate deployments for each market, NZ, AU, and UK, across test, UAT, and live, with supply-chain safeguards built into the dependency pipeline.

filter list background

What We Built & Delivered

The platform is broad. Rather than a flat feature list, the capabilities group into what a clinic actually does: book, treat, document, bill, communicate, and configure. Each capability replaced a specific desktop function and added something the desktop could never offer.

Real-Time Shared Calendar

Real-Time Shared Calendar

A live appointment book covering standard, class, and contract appointments, built on a layered appointment model. Bookings, changes, and cancellations sync instantly across every connected user via SignalR the moment they happen.

Online & Self-Service Patient Booking

Online & Self-Service Patient Booking

A patient-facing booking path so clinics can offer the self-service scheduling their patients increasingly expect, feeding straight into the same live calendar that practitioners see.

Structured Clinical Documentation

Structured Clinical Documentation

Clinical documentation using the assessment formats clinicians actually use: SOAP, SOTAP, SOAPER and related, with injury- and body-region-specific templates and an interactive drawing tool for marking findings directly on anatomical diagrams.

AI-Assisted Clinical Notes

AI-Assisted Clinical Notes

An AI capability that drafts clinical notes from recorded or transcribed consultations, including audio capture, prompt management, body-part mapping, and goal extraction, with session auto-save so nothing is lost. Designed to give practitioners back the time otherwise spent typing.

ACC Claiming (New Zealand)

ACC Claiming (New Zealand)

Charges and schedules driven by ACC rules, with direct, secure submission to the ACC government API for claims, invoices, payments, and documents, and validation of provider setup so submissions don't fail for avoidable reasons.

Medicare Claiming (Australia)

Medicare Claiming (Australia)

Bulk-bill store-and-forward claim submission and status handling, structured to accommodate the upcoming Assignment-of-Benefit compliance changes rather than needing a rebuild when they land.

Insurer & Private Billing with Region-Aware Rules

Insurer & Private Billing with Region-Aware Rules

Insurer-funded and private billing handled in the same system, with the correct charges and formats applied automatically based on the patient's billing context and practice region. No practitioner has to remember which regime applies.

Integrated Email, Documents & Telehealth

Integrated Email, Documents & Telehealth

A letter-template and merge-field system for referrals and patient correspondence, a built-in email composer with reusable templates and multiple attachment types, and support for remote consultations and the email flows around them.

HealthLink / HL7 Messaging & Integration APIs

HealthLink / HL7 Messaging & Integration APIs

Standards-based clinical messaging that receives and routes incoming referrals and results, connecting the practice to the wider health ecosystem. Public and integration API surfaces allow the platform to connect to external systems rather than remaining a closed box.

Multi-Discipline Core (Physiotherapy & Audiology)

Multi-Discipline Core (Physiotherapy & Audiology)

A shared core covering clients, appointments, billing, documents, users, and security, with discipline-specific clinical experiences on top. Two different practices run on one coherent system instead of two divergent products.

Dynamic Custom Forms Engine

Dynamic Custom Forms Engine

A configurable forms engine that lets practices build their own intake, consent, and assessment forms, including scoring and conditional content, without developer involvement, so the product adapts to each clinic's workflow.

Role-Based Access & Differential Data Sync

Role-Based Access & Differential Data Sync

Granular, CRUD-level permissions enforced in both API and UI, honouring the established privilege model from the legacy system. A differential synchronisation layer sends only what has changed to each client, keeping data-heavy screens responsive across a busy practice.

What Changed After We Shipped

The platform went live and the product is no longer tied to managed Windows machines. These are platform-level outcomes, described as they are rather than as headline figures. The clinics kept running throughout. What changed was everything around them.

Anywhere Access

Anywhere Access

Practitioners reach the full system through a browser, on the devices they actually use, across multiple sites and from home

Live Calendars

Live Calendars

Appointment changes propagate in real time across the whole practice. The stale-calendar problem of the desktop era is gone

3 Markets, 1 Codebase

3 Markets, 1 Codebase

ACC, Medicare, insurer, and UK billing across physiotherapy and audiology run from a single, parameterised codebase

Continuous Delivery

Continuous Delivery

Fixes and improvements now reach customers continuously, region by region, through an automated AWS pipeline. No more installer rollouts

Online Booking

Online Booking

Clinics can now offer patient self-service booking, meeting an expectation the desktop product simply couldn't support

Zero Big-Bang

Zero Big-Bang

Legacy and new systems coexisted throughout the migration. No clinic had a day where they couldn't operate

AI-Assisted Notes

AI-Assisted Notes

Clinical notes drafted from recorded consultations, giving practitioners back the time otherwise spent on post-appointment documentation

Built to Extend

Built to Extend

A clean client/API separation, real-time channel, and multi-discipline core mean new regions, integrations, and disciplines can be added without another re-platforming

"The Solvios team understood from day one that the logic inside our product was the asset, not the screens around it. They moved everything we'd built over two decades into a modern architecture without losing a single billing rule or clinical workflow that our customers depend on. Our clinics kept running throughout and they now have a platform that can genuinely grow with them."

Reeju, Technical Lead, Allied Health Practice Management SaaS

How the Engagement Ran

This was an agile, iterative engagement running across short delivery cycles with continuous client involvement. The client's clinical, product, and technical teams were embedded in the process throughout, not consulted at the start and handed a result at the end.

Collaborative Discovery & Domain Mapping
01

Collaborative Discovery & Domain Mapping

Joint working sessions with clinical, product, and technical stakeholders to map the existing desktop product together: workflows, billing rules per region, the data model, multi-discipline differences, and the edge cases practitioners actually hit. The output was a shared understanding owned by both teams, not a requirements document handed over by one side to the other.

Architecture Designed with the Client, Not for Them
02

Architecture Designed with the Client, Not for Them

The target architecture, Angular client, .NET domain API, Oracle data layer, SignalR real-time channel, and AWS deployment topology were designed in collaboration with the client's technical team. Regional build configurations, CI/CD pipeline structure, and access-control decisions were reviewed and agreed jointly, so the team understood the system they were inheriting before a line of production code was written.

Domain-by-Domain Build with Continuous Client Review
03

Domain-by-Domain Build with Continuous Client Review

The platform was rebuilt incrementally: appointments, clinical notes, billing, forms, documents, and messaging, each domain delivered in sprint cycles and reviewed by the client before the next began. Clinical staff validated that behavioural parity with the legacy system was maintained. Practices migrated in controlled phases, with both systems running in parallel so feedback from early adopters shaped the experience for those that followed.

QA & Compliance Validated with Real Users Per Market
04

QA & Compliance Validated with Real Users Per Market

Cross-device and cross-browser testing ran alongside clinical and billing compliance verification for each region, NZ, AU, and UK, with actual practitioners involved in validation rather than testing being confined to an internal QA team. Issues surfaced by end users fed directly back into the sprint cycle, keeping the feedback loop tight rather than batching corrections into a separate release.

Continuous Delivery with an Ongoing Feedback Loop
05

Continuous Delivery with an Ongoing Feedback Loop

Deployment is automated per region and environment, with monitoring feeding live performance data back to both teams. The engagement didn't end at launch; new capabilities are scoped, prioritised, and shipped in ongoing cycles based on what practitioners and administrators request as they use the platform in production.

More Success Stories Worth Exploring

filter list background

Frequently Asked Questions

By re-platforming rather than rewriting from scratch, and migrating in phases. The proven business logic is lifted into a modern service layer, the experience is rebuilt as a web client, and customers move across in controlled stages, with the legacy and new systems coexisting so a working system is always available and there's a clear path back if needed.

Because in a clinical and billing product, that logic is the value. Years of edge cases, exactly how a schedule is calculated, precisely what a funder expects in a claim, represent problems already solved. Rebuilding from scratch tends to reintroduce bugs that were fixed long ago. We modernised the delivery and architecture while keeping the rules.

Yes, by treating regional rules as configuration and contained, well-tested modules rather than forking the product per country. New Zealand ACC, Australian Medicare, insurer, and UK private billing all run from a single platform with per-region builds.

Database changes flow through Oracle Advanced Queuing into a SignalR hub with a Redis backplane, which broadcasts updates to every connected client and stays consistent even when users are connected to different application servers, removing the need for the front end to poll the database.

Through differential synchronisation (sending only what changed), cacheable reference-data endpoints, lazy-loaded modules, and global asset delivery via CloudFront, so the network that sits between a web client and its data doesn't translate into a slow experience.

With JWT authentication and proactive token refresh, role-based access enforced at CRUD granularity in both the API and the UI, region and environment isolation, funder-grade integration security for national funder APIs, and supply-chain safeguards built into the build pipeline.

It's a multi-phase programme rather than a fixed sprint. Scope, region and discipline count, integration requirements, and migration constraints drive the timeline. It's best scoped together in discovery before committing to dates and budgets.

Didn't Find What You Were Looking For?

Get In Touch With Our Experts

Re-Platforming a Business-Critical Healthcare or Practice Management System?

We work with product teams who have something worth carrying forward. Whether you're lifting a legacy desktop application to the cloud, building compliance into a multi-region platform, or architecting real-time systems for a live user base — we'd like to hear about it.

Response within 24 hours. No commitment required.

Start the conversation
Re-Platforming a Business-Critical Healthcare or Practice Management System?

Need Project Consultation? Let’s Talk

We'd love to understand what you want to build. The more context you share, the faster we can give you a useful response not a sales pitch, but a genuine assessment of how we can help and what working together would look like.