Case Study · Healthcare SaaS · Multi-Tenant

Inara — single-tenant healthcare app turned into a B2B SaaS platform.

Configuration-driven multi-tenancy, per-organisation feature toggles, on-demand onboarding, full white-label, and Arabic RTL i18n — all on a single deployment, single codebase.

1 → N
Single-tenant product →
multi-organisation B2B platform
45+
Per-organisation feature toggles
configurable on the fly
RTL
Full Arabic right-to-left i18n
same codebase as English

The situation (why they called)

Inara had product-market fit as a B2C healthcare and caregiving app. Enterprise interest started landing — hospital networks, employer benefits programs, and a Middle East partner — all asking for a version of the platform their own brand could live on top of, with their own users, their own features turned on, and their own language.

Internally the response had been "we'll fork the code per client" — which would have meant 5 codebases to maintain in 6 months, a hire-or-die situation, and zero benefit from any future product work being shared across customers. The team needed a different approach.

The diagnosis

Three constraints set the architecture:

  1. Data isolation is non-negotiable — healthcare context means one tenant's data must never appear in another tenant's response. Application-layer enforcement isn't enough; we need defence in depth.
  2. The product is still evolving fast. Whatever multi-tenancy we add must NOT slow down feature delivery — otherwise the platform shift kills the product.
  3. The Middle East partner needed Arabic, including layout direction. Half-baked i18n would fail acceptance testing, which would push back the entire go-to-market.

The decision

Decision Configuration-driven multi-tenancy on a single deployment. NO per-client forks. NO per-client deployments. Tenant identity becomes a first-class request context, RLS enforces isolation at the database level, and every client-specific behaviour becomes either a feature flag or a configuration row — never a code branch.

The architecture, in five layers

1. Tenant identity and request context

2. Data isolation — application + database

3. Per-organisation feature toggles (45+ flags)

4. On-demand onboarding

5. Internationalisation, including RTL

The delivery

Key decisions (and what we said no to)

The outcome

Numbers Product transformed from single-tenant B2C app → multi-tenant B2B SaaS platform.
45+ per-organisation feature toggles live in production; admins can enable/disable without an engineering ticket.
7-role / 58-permission RBAC per organisation.
Onboarding a new organisation: minutes, not days.
Customisation effort per client: dropped significantly — config rows replace code branches.
Full Arabic (RTL) localisation live, ready for Middle East partner go-live.

What I'd do differently

I'd add the per-tenant audit log during Phase 1, not Phase 4. We initially treated audit as a compliance feature for later — but as soon as the second organisation onboarded, "show me what user X did between dates Y and Z, scoped to MY org" became the most-requested feature. Building it after the fact meant we had to backfill some events from log files. Lesson: tenant-scoped audit is multi-tenancy infrastructure, not a separate compliance feature.


Companion case study: Inara — collapsing 40 microservices into 1 modular monolith ($5K → $500/mo) — same platform, different problem.