GuidelinesSystem overview

Architecture & capability brief

One platform, four layers, one record of the truth.

A clinic sells time, delivers it, records it and gets paid for it. This page shows how the platform does each of those, what the pieces are and how they connect — and what that buys you commercially and operationally. Written for someone who has fifteen minutes, not a terminal.

52business modules 28API surfaces 23languages in the app 17management reports 5 × 9role guides, translated
01 — The whole system

Four layers, and each one only talks to its neighbour

People touch the top layer. Everything they do goes through a single gateway, which is the only thing holding secrets. The gateway asks the business core, which is where the rules and the records live. The core keeps its own data and reaches out to the outside world. Nothing skips a layer — which is why changing a payment provider or an AI vendor never reaches the app, and why the app can never reach the database.

1 · Surfaces What a person actually opens Public
Mobile appFlutter, iOS and Android. Clients book and attend; practitioners run a whole practice from it.
Client portal/my — sessions, orders, invoices, chats, documents.
Practitioner portal/my/expert — availability, sessions, reports, earnings.
Admin portal/my/admin — the daily health dashboard and 17 reports.
Back officeConfiguration, finance and bulk work for staff.
Public websiteThe directory, the profiles and the booking pages.
HTTPS · JWT · WebSocket
2 · API gateway The only backend the app knows about Trusted
REST API28 endpoint groups: auth, experts, bookings, orders, invoices, content, tickets, documents and more.
Realtime hubWebSocket chat, presence, AI streaming, and signalling for voice and video calls.
IdentityBrokers login against the core and issues short-lived tokens.
Secret custodyEvery API key lives here. The app ships with public keys only.
Rate limiting & cacheRedis token buckets, and cached reads for anything expensive.
OrchestrationOne tap can mean four systems. The gateway sequences them and returns one answer.
JSON-RPC over a service account
3 · Business core Where the rules and the records live Odoo 19 · 52 modules
Booking & availabilitySchedules, rooms, exceptions, and the engine that decides what can be offered.
Paid sessionsSessions sold as credits, cancellation policies, service agreements.
Secure documentsEncrypted records, rule-based access, an audit log nobody can edit.
Practitioner payDated contract versions, payout runs, the share locked at booking.
Clinic reportingThe alignment and performance reports the business is actually run on.
FinanceOrders, invoices, payments, reconciliation — full accounting, not a ledger bolt-on.
Owned data · contracted services
4 · Data and the outside world What we keep, and who we depend on Swappable
PostgreSQLThe system of record. One database, one truth.
RedisSessions, presence, cache, rate limits, realtime fan-out.
Object storageMedia and attachments, served through signed URLs that expire.
PaymentsStripe or PayPal — or bank transfer with an uploaded proof.
MessagingPush, email and WhatsApp, all from one notification event.
AI providersOpenAI or Gemini behind one interface, swapped by configuration.
Why this shape is worth the money

Each layer can be replaced without touching the ones above it. The payment provider is a setting, not a rewrite. The AI vendor is a setting. A second brand can run on the same core. And because the app never holds a secret and never sees the database, a lost phone is an inconvenience rather than an incident.

02 — A single tap, end to end

What actually happens when someone books

The most useful thing to understand about the architecture is one journey through it. Everything else on this page is a variation on these six steps.

The app asks

A client taps a free slot. The app sends one authenticated request to the gateway and knows nothing else about the estate.

The gateway checks

Token valid, rate limit clear, request well-formed. Anything malformed is refused here, before it reaches the business core.

The core decides

Is that slot really free? Weekly hours, exceptions, existing bookings, room availability, notice period, booking horizon — all six must pass.

The record moves

A session credit gets a time attached. The practitioner's share is calculated from the terms in force right now — and frozen.

Everyone is told

One event fans out to push, email, in-app inbox and WhatsApp, on each person's own preferences and in their own language.

The books agree

The order, the invoice, the practitioner's pipeline and the admin's reports all move together, because they read the same row.

The commercial point of step 3

Six availability tests run in the core, not in the app and not in a spreadsheet. That is why the platform does not double-book a room, does not sell a slot twice, and can answer "why can nobody book me today?" with a specific reason instead of a shrug.

03 — The three surfaces

One account, three jobs, no second login

A person is a client, a practitioner, an administrator — or all three at once. The platform gives them one login and shows the areas their role unlocks. That single decision removes a whole category of onboarding, password-reset and "which system was it in?" support cost.

Surface one

The mobile app

Complete on its own — nobody needs the website to use the platform. Built once in Flutter, shipped to both stores, localised into 23 languages including right-to-left layouts.

  • Find a practitioner, buy, book, attend, pay
  • Video sessions and chat inside the app
  • Practitioners get their whole practice: availability, sessions, reports, earnings
  • Biometric sign-in and an app lock over the phone's own lock screen
Surface two

The web portals

The same data with room to breathe. Three portals off one sign-in, each showing only what that role is entitled to see.

  • Clients — sessions, orders, invoices, documents held about them
  • Practitioners — the practice, the numbers, the paperwork
  • Administrators — the health dashboard and every report behind it
  • Wide tables and charts that a phone cannot do justice to
Surface three

The back office

The full business system underneath, for the work that is configuration rather than operation — and for finance, which belongs in a real accounting system.

  • Services, prices, policies, rooms, schedules
  • Invoices, supplier bills, payments, reconciliation, tax
  • Contracts, payroll cycles, HR records
  • Bulk edits, imports and exports
04 — The business core

Fifty-two modules, grouped by the job they do

The core is not one monolith. It is a set of modules that each own one part of the business, and depend on each other in a stated order. That is what lets a clinic switch on only what it needs — and what lets the same core serve a coaching practice, a clinic and a regulated health service without a fork.

Booking & sessions

Selling and delivering time

bookingCalendars, schedulers, rooms, locations and the availability engine.
sale_meetingSessions sold as credits, cancellation ladders, package service agreements.
clinic_platformThe platform layer: practitioner profiles, services, content, notifications.

Money & people

Getting paid, and paying out

expert_payEngagement terms as a dated contract history; payout runs built from sessions held.
clinic_reportsThe seventeen alignment and performance reports.
Accounting · Sales · HRStandard business applications, acting on the same customers and orders.

Records & compliance

The part that has to hold up

secure_document_base _cryptoEnvelope encryption, key custody, rotation and crypto-shredding. Eight modules.
clinical_dms _eu _uk _usCare relationships, disclosure register and subject rights — with a pack per jurisdiction.
session_reportsSession reports filed against the session, about the client, on the secure store.

Paperwork

Signature and contract lifecycle

esign_base + 8 moreSelf-hosted electronic signature with a tamper-evident audit trail. No third-party signing vendor.
contract_*Twenty-three modules: negotiation, approval, amendment, obligations, billing, legal reporting.

Intelligence

Where AI is allowed to touch the business

ai_bridgeConnects the core to any LLM for prompt-driven analysis, tool calling and automated actions — provider-agnostic.
Gateway AI serviceThe client-facing companion: streamed answers over WebSocket, never touching records directly.

Identity & access

Who is who, and who may see what

user_extentionOne account carrying client, practitioner and administrator roles at once.
Age & identity verificationAutomatic face check first, document review queue second, encrypted and auto-deleted after.
05 — The money lifecycle

Everything the business earns runs on one chain

This is the single most important diagram on the page. A service is sold, it becomes a credit, the credit becomes a booking, the booking becomes attendance, and attendance is what releases the money — to the business and to the practitioner. Break any link and the symptom shows up somewhere else entirely.

Serviceprice · duration · report?
Orderthe purchase
Invoicethe demand
Paymentmoney in
an order creates credits
Session creditbought, unbooked
Bookinga credit with a time
Attendancethe hinge
Session reportwhere required
attendance releases everything downstream
Earned revenueheld, not just sold
Payout runbuilt from sessions held
Practitioner billpriced by contract version
Cancellation feeby notice given

“A credit is what you own. A booking is when you spend it.”

Buying and booking are deliberately separate steps. That is what lets a client buy a package today and schedule the appointments over the following months — and it is why a cancelled session is not a lost one: cancelling detaches the time and hands the credit back.
Why attendance is the hinge

Nothing downstream moves until a session is closed

Reports, practitioner pay and earned revenue all wait on the session being closed as held or as a no-show. A session that was delivered but never closed is wrong everywhere at once — which is why stuck sessions is the report an administrator works first, every single day.

Why the share is frozen

A rate change never reprices finished work

The practitioner's share is calculated from the terms in force at the moment of booking and fixed there. Change the terms next month and the work already done keeps its price. Every payout line records the contract version that priced it, so a question about a payment from eight months ago is answerable.

Why policy sits upstream

One document governs charges, expiry and horizon

The cancellation policy decides what clients are charged, what practitioners are paid, how long credits live and how far ahead people can book. It is attached to products, so different services can behave differently — and changing it never reprices history.

06 — Security & compliance

Built so that the answer to “who read this?” is complete

Clinical and professional records are not ordinary rows in a table. They are held as secure documents, with five properties that hold regardless of who is asking — including the person who owns the company.

Property

Encrypted individually

Every version has its own key under envelope encryption. Nobody reads records out of the database, and a database backup on its own is not a disclosure.

Property

Closed by default

Access requires a rule that permits it. Being an administrator grants nothing by itself — access follows the client's care team, not the org chart. There is no general override.

Property

Every read is logged

Openings as well as changes, in a log nobody can edit or delete. If a client, a regulator or your own legal team asks who has seen a record, the list is complete.

Property

Corrections are versions

A correction is filed as a new version; the original is never overwritten. An amendable record is worthless as evidence, and one day yours may need to be worth something.

Property

Disposal destroys the key

When retention expires the key is destroyed rather than the row. The content is gone; the proof that it existed and was properly disposed of remains — which is what an auditor actually wants.

Reach

A pack per jurisdiction

Clinical records ship with EU, UK and US packs on the same core — erasure and ROPA handling, withholding rules, disclosure registers — so one deployment can serve more than one legal regime.

What this is worth in a sales conversation

An emergency access route exists for genuine urgency, and using it is a recorded event that is reviewed afterwards. That is the whole design in one sentence: access is available when someone truly needs it, and never quiet. It is a far easier thing to put in front of a data protection officer than a permissions matrix and a promise.

07 — The marketing perspective

What we can put in front of a buyer

The same platform is sold three ways, because three different people sign. Below is what each of them gets, in the words they use themselves rather than ours.

For the client

Buy now, schedule later
Purchase a package today and place the appointments over the following months. Credits are theirs, not a booking they have to defend.
No surprise charges, ever
A cancellation fee is shown, calculated on the current time, before anything is confirmed. The cancellation history names who cancelled and when.
In their own language
23 languages in the app, right-to-left layouts included, plus Gregorian, Persian and Islamic calendars where the business offers them.
Their records, visibly protected
Documents published to them, a log of every access, and an erasure request they can raise themselves.

For the practitioner

A practice in a pocket
Availability, sessions, client history, reports, earnings and reputation — all of it on the phone between two appointments, not just at a desk.
Paid without submitting anything
The sessions are the timesheet. Payouts are built from sessions actually held, and every line names the contract version that priced it.
Their rate protected
The share is locked at the moment of booking. A change to terms never retrospectively reprices work they have already delivered.
Evidence when it matters
Attendance is recorded, cancellations are attributed, and session reports are versioned. Disputes end with a document rather than a recollection.

For the business

Revenue that cannot quietly leak
Every session is traced from order to invoice to payment, with each break named and owned. Unbooked paid-for credits are a report, not a surprise.
One system, not five subscriptions
Booking, payments, accounting, HR, e-signature, records and reporting on one core. No per-seat signing vendor, no bolt-on scheduler, no separate CRM.
Defensible compliance
Encrypted records, complete access logs, jurisdiction packs for the EU, UK and US, and disposal that proves itself.
Grows without a rewrite
New payment provider, new AI vendor, new brand, new language — configuration, not a project.
The one-line pitch

Most clinic software books appointments and stops. This runs the whole chain — sells the time, delivers it, records it, pays the practitioner and proves what happened — so the clinic's numbers, its payroll and its compliance file are all reading the same row.

08 — The managerial perspective

What a manager gets to run the place with

The platform is opinionated about management: it does not hand you a wall of charts. It hands you seventeen lists that should be empty, in an order, on a rhythm. An empty report is the good outcome — so the job is to find the lists that are not empty.

Every morning · 15 min

Is the record true?

  1. Open the health dashboard — anything above zero is work
  2. Stuck sessions first. Everything downstream, pay included, is wrong until these are cleared
  3. Today's room and team calendars — clashes and gaps
  4. Clear the moderation queue
Every week

Is money being left on the table?

  1. Unbooked credits — people who paid and never booked
  2. Coverage vs demand — are you open when people want you?
  3. Overdue session reports
  4. Client continuity — who has stopped coming
Every month

Does the money reconcile?

  1. Payout readiness before running payments, not after
  2. Run the payment cycle
  3. Money chain — every session traced to a payment
  4. Cancellation conduct, then scorecards
Every quarter

Does the policy still fit?

  1. Review cancellation policies against what actually happened
  2. Review the compliance file
  3. Confirm retention and disposal are running

The seventeen reports

Eleven ask whether the record matches reality. Four compare how people are doing the work. Each is defined by what puts a row on the list, and each is meant to be worked until it is empty.

Alignment — “is the record true?”

Worked until empty

  • 1Stuck sessionsHeld but never closed, or never held and never cancelled
  • 2Unbooked creditsPaid for and never scheduled, banded by expiry risk
  • 3Coverage vs demandWhen people wanted appointments against when you were open
  • 4Money chainSession → order → invoice → payment, every break visible
  • 5Fee ledgerCharged, waived, or never applied at all
  • 6Payout readinessWhat would go wrong if you paid right now

Alignment, continued

Conduct, compliance and retention

  • 7Cancellation conductWho cancels, when, and against which policy tier
  • 8Compliance fileRequired documents that are missing, and for whom
  • 9Client continuityWho stopped coming, and after which session
  • 10Moderation queueReviews, comments and questions awaiting a decision
  • 16Sessions without a reportDelivered work whose write-up is overdue
  • 17Cancelled sessionsEverything called off — including the free ones no ledger shows

Performance — “how are people doing?”

Read with the fairness rules

  • 11Expert scorecardOne practitioner's whole picture, with the trend
  • 12League tableTeam comparison, normalised by opportunity
  • 13ReliabilityTurned up, on time, closed the record
  • 14Client outcomesWhether clients continued, and how they rated the work
Six fairness rules are built in

Measured per opportunity, context always shown, rates under five sessions suppressed, what a person controls separated from what you control, every figure one click from the sessions behind it, and no league table on anyone's own page. A number nobody can defend is worse than no number.

The numbers a manager is actually judged on

Stuck sessionsDelivered work not yet counted. The one number that corrupts every other one.target: 0 daily
Unbooked creditsRevenue banked but not earned, and the clients most likely to ask for it back.target: falling
Money chain breaksSessions with no order, no invoice, or unpaid past 30 days.target: 0 at month end
Utilisation vs demandHours offered against hours wanted — a rota conversation, not a marketing one.reviewed weekly
Report timelinessOverdue session reports by practitioner, not by date.chased weekly
ContinuityWhere clients stop, and whether they stop after the same session number.reviewed weekly
09 — Deployment & dependencies

What it takes to run, and what can be swapped

The estate is four processes and a handful of contracted services. Every external dependency sits behind an interface with a mock on the other side of a switch — which is how the app can be demonstrated, tested and developed without a single live vendor account.

Runtime

Four things run

  • Gateway — Python service, containerised
  • Business core — Odoo 19 Community
  • PostgreSQL — the system of record
  • Redis — cache, presence, rate limits, realtime

One compose file brings the whole stack up. There is no proprietary runtime and no per-core licence anywhere in that list.

Strategy

Mock-first, by design

Data, payments, AI and notifications each resolve to either a real provider or a mock, chosen by one setting. The consequences are commercial, not just technical:

  • Demos run with no vendor accounts and no live data
  • The full test suite runs on any laptop, in CI, for free
  • A provider outage degrades one capability, not the platform
  • Switching vendor is a deployment, not a project
Posture

Where the secrets are

All of them are in the gateway. The mobile app ships with public keys only; the browser gets signed, expiring URLs rather than credentials; the database is never reachable from a client.

Practically: an app can be decompiled and nothing is lost, and a rotated key takes effect for every user at once without an app release.

CapabilityRuns againstFalls back toWhat breaks without it
Business dataodoo — JSON-RPC over a service accountmockEverything. This is the system of record
Paymentsstripe · paypalmock, or manual transfer with uploaded proofCard checkout. Orders still work through review-and-confirm
AIopenai · geminimockThe companion and AI analysis. Nothing clinical or financial
Push notificationsFirebase (FCM and APNS)email, in-app inboxInstant alerts. Reminders still reach people by email
EmailSMTPin-app inboxConfirmations and invoices by mail
WhatsAppWhatsApp Cloud APIpush, emailOne reminder channel among four
Media & attachmentsS3-compatible object storagelocal storageUploads at scale. Records themselves are in the core
Voice & videoWebRTC, signalled by the gatewaychat, phoneIn-app calls. On-site and phone sessions are unaffected
Read the fallback column as a risk register

No single external vendor can stop the clinic from selling, delivering and recording a session. That is the property worth protecting as the estate grows, and it is the reason each of these sits behind an interface rather than being called directly from the code that matters.

10 — Where to go next

This page is the map. The guides are the territory.

Two kinds of page follow this one. The blueprints take a single seat in the business and answer the same four questions — what they see, what they control, how it makes them faster, and what it does for the business. The guides then teach every screen, step by step, in nine languages.

The flow

How a session happens

Seven phases in swimlanes, all four viewpoints at once, and the fork between an online session and one on your premises.

Open the flow

Blueprints

One seat at a time

The same business from the administrator's, the client's, the practitioner's and the accountant's chair.

Administrator Client

Expert Accountant

Full guide

Administrators

The daily routine, all seventeen reports, policies, payouts, compliance and the back-office directory.

Open the guide

Full guide

Experts & Professionals

Availability, sessions, reports, clients, earnings, payouts and reputation — on the web and on a phone.

Open the guide

Full guide

Clients

Finding a professional, buying, booking, attending, paying, and the records held about them.

Open the guide