Healthcare · Multi-Tenant CRM

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

Talk to Us
Multi-Tenant Med Spa CRM — OpenMalo case study
Client Context

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.

Multi-Location OperationsMemberships & POSFeature-Parity Migration
The Challenge

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

Our Solution

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.

Key Features

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.

Technology Stack

Server-First, Multi-Tenant, Typed End to End

Frontend

Next.jsReactTypeScriptTailwind CSS

Data & Tenancy

SupabasePostgreSQL + RLS~120 Migrations

Payments & POS

StripeSquare POSSquare Terminal

Comms & Automation

Twilio Voice + SMSSendGrid11 Cron JobsVercel
How We Delivered

Spec-Driven, Shipped in Sprints

  1. 1

    Foundation

    Project setup, authentication and authorisation, client management, real-time messaging, multi-tenancy and role-based access, and the base UI.

  2. 2

    Core CRM

    Appointments and the calendar, products and services, inventory, and employee and team management.

  3. 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. 4

    Payments & POS

    Terminal integration, order push, public booking, marketing features, and the scheduled-job layer that automates the recurring work.

  5. 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. 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.

The Result

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.

FAQ

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.

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