Feature Parity With the Incumbent — Without the Lock-In
A medical-spa group was paying for a CRM it had outgrown and could not change. We rebuilt the whole operating surface — pipelines, scheduling, POS, memberships, payroll, 80+ reports — as a platform they own.
Industry
Healthcare / Med Spa
Solution
Multi-Tenant CRM & Operations
Engagement
~2 Months, Ongoing
Services
Product Engineering

Renting an Operating System They Had Outgrown
The client runs a multi-location medical-spa group. Everything that made the business run — booking, the register, memberships, commissions, inventory — lived inside an incumbent industry SaaS that was expensive, slow to evolve, and shaped around how someone else thought a med spa should work.
Around it, the gaps were being filled by hand. Opportunity tracking, membership sales and new-patient conversion sat in separate tools and spreadsheets. Each location ran its own scheduling, drawer, inventory counts and time clock with no org-level rollup. SMS, bulk messaging, voicemail and the dialer came from different vendors. Reporting was assembled manually.
The Problems We Set Out to Solve
The brief was not "build a CRM". It was: match everything the incumbent does, then close the gaps it never closed — and hand the client the keys. A parity project has nowhere to hide; every module the old system had, the new one had to have, and better.
Locked into an incumbent SaaS that was expensive and slow to evolve
No unified sales-pipeline view across opportunities and memberships
Each location ran its own scheduling, register and inventory with no rollup
SMS, bulk messaging, voicemail and dialer came from separate vendors
Reporting — KPIs, payroll commissions, retention — assembled by hand
Parity, Then Depth
We rebuilt the operating surface module by module against the incumbent as an explicit functional benchmark, then added the things it never had: a real pipeline view, an org-level rollup, and one communication stack.
Multi-Tenancy Enforced in the Database
Row-level security on every tenant-scoped table, with the privileged service key isolated behind a single server module — so a location can only ever see its own data.
One Communication Stack
SMS templates, scheduled and bulk SMS, voicemail and a browser dialer with presence, replacing a stack of separate vendors staff were context-switching between.
POS Depth, Not a Checkout Button
Terminal pairing, order push, drawer open/close, hold and resume, voids, pay-in/pay-out reasons — the parts of retail that only matter when you actually run a register.
An Automation Layer That Runs Itself
Scheduled jobs handle appointment reminders, membership expiry, overdue invoices, price changes, duplicate-client detection and report delivery without anyone remembering to run them.
What the Platform Does
Sales Pipelines
Configurable pipelines for membership sales and new-patient conversion, with open / won / lost / abandoned states and a dashboard showing open value and conversion rate.
Clients & Deduplication
A searchable client directory with bulk select and CSV export, plus assisted and manual merge flows driven by a nightly duplicate-detection job.
Appointment Calendar
Timezone-aware multi-employee day and week views, colour-coded per employee, with configurable appointment categories and CSV export.
Scheduling Depth
Wait list, confirmation manager, standing appointments and blocks, block types and cancellation reasons — the full scheduling surface, not just a booking form.
Services & Catalogue
Service catalogue with categories, departments, durations and pricing, plus add-on mappings, product bundles and resource management.
Inventory
Stock levels, counts, returns, transfers, purchase orders, manufacturers and distributors, employee supply usage and floor locations.
Memberships
Member types, benefit templates, a member manager and cancellation reasons — the recurring-revenue stack, running on Stripe.
Register & Drawer
Ring up tickets, hold and resume, void, pay-in/pay-out reasons, and a drawer manager with full open/close history.
Pricing
Price management with scheduled price changes applied automatically by a nightly job.
Workforce
Employee directory and categories, work activities, goals, time clock in/out and entries, payroll and sales rankings.
Communication
Conversations, SMS templates, scheduled and bulk SMS, voicemails, and a browser dialer with an available/busy presence indicator.
Marketing & Automation
Workflows, alerts manager and log, client point promotions, referral types, five-star ratings control and a report scheduler.
Reports
80+ pre-built reports across 9 categories — analytical, clients, memberships, payroll, inventory, appointments, employee, liabilities and products.
Security Administration
Members with per-row restricted or full sub-account access, roles, sub-accounts, phone and payment-provider settings, billing and organisation tabs.
Server-First, Multi-Tenant, Typed End to End
Frontend
Data & Tenancy
Payments & POS
Comms & Automation
Spec-Driven, Shipped in Sprints
- 1
Foundation
Project setup, authentication and authorisation, client management, real-time messaging, multi-tenancy and role-based access, and the base UI.
- 2
Core CRM
Appointments and the calendar, products and services, inventory, and employee and team management.
- 3
Parity Sweep
Every remaining module the incumbent had, implemented system-wide — the reports catalogue, standing appointments and blocks, confirmation manager and wait list.
- 4
Payments & POS
Terminal integration, order push, public booking, marketing features, and the scheduled-job layer that automates the recurring work.
- 5
Depth & Polish
eGift cards, ratings, resources, add-on mappings, two-factor login, bulk product update, and a full pass over theme, pagination and layout.
- 6
How We Worked
Spec-driven: every feature ships from a version-controlled spec folder written before the code. Feature branch to development to staging to main, pull request per feature.
What Was Delivered
97
Dashboard Routes
80+
Pre-Built Reports
11
Scheduled Jobs
~120
DB Migrations
Full functional parity with the incumbent SaaS — the pipeline view, org-level rollup and unified communication stack are things it never had.
The platform is the client's own: no per-seat licence, no vendor roadmap to wait on, no lock-in.
Multi-tenancy is enforced in the database, not in the UI — a location cannot reach another location's data even with a crafted request.
The recurring operational work — reminders, expiring memberships, overdue invoices, scheduled prices, duplicate clients, report delivery — now runs itself.
Frequently Asked Questions
That is exactly the kind of project this was. We rebuilt the operating surface module by module against the incumbent as an explicit functional benchmark — every module the old system had, the new one had to have, and better. The result is a platform the client owns outright: no per-seat licence, no vendor roadmap to wait on, no lock-in.
Services Behind This Build
Explore Other Case Studies
Paying for a SaaS you have outgrown?
We rebuild the operating surface you actually use, hand you the keys, and close the gaps the incumbent never did.
Talk to a Delivery Expert

