Screens
Key engineering
Under the hood
One modular API serving several host-routed frontends, with the tenant boundary pushed down into the database rather than enforced by convention in application code. Replaceable parts — video, payments — sit behind adapters.
Relational, with isolation applied per practice at the storage layer, so a query that forgets its tenant returns nothing instead of another practice's client records. Media in object storage, domain events for cross-module reactions.
A long-running API with a relational store and a cache. The public catalogue is generated ahead of time and served separately from the authenticated application.
Health data raises the floor: consent handling, encrypted consultations and audit trails were requirements from the first line, not a compliance pass before launch. Isolation is the one guarantee that must never fail, so it is enforced where an application bug cannot bypass it.
Stack
What it took
- Tenant isolation is enforced by the database, not by discipline. Practice data is separated at the storage layer as well as in application code, so a mistake in a query returns nothing rather than another practice's client records.
- One system, many jobs. Catalogue and search, booking and calendars, payments and payouts, consultations, documents, messaging and reviews — kept as one coherent codebase with a consistent shape, so a single team can carry all of it.
- Video is a replaceable part. Consultations run through an abstraction over more than one provider, so features land everywhere at once and the provider stays a commercial decision rather than a rewrite.
- Health data raises the floor. Consent handling, encrypted consultations, EU hosting and audit trails were requirements from the first line of code, not a compliance pass bolted on before launch.
- Someone else can act for you. A partner or family member can use the platform on a client's behalf under their own identity, instead of the shared-password workaround most care products end up with.
