Strategy notes · Health and fitness · 2026

Physio clinic WhatsApp bookings

Voice notes kept as the clinical record, onboarding as a config file, and a model that never owns the state of a booking.

Context

A gym and physiotherapy business with three branches and one shared phone number, and the first client of a multi-tenant WhatsApp booking and lead-capture platform. The platform has run in production since September 2026.

Starting point

Booking requests were handled by hand. Callers send voice notes in a regional Arabic dialect mixed with English and French. Three kinds of staff share one dashboard: front desk on a shared desktop, therapists and trainers on a phone between sessions, and the owner, often on mobile.

Decision

The model proposes and the code decides. The model suggests field values and reply text. Deterministic code owns state changes, checks, completion and status. The rule in the project is plain: never let the model own state.

  • Keep the caller's exact words. Arabic stays in Arabic script, English and French stay inline. This is the physiotherapist's clinical record, so nothing is translated away.
  • One native-audio pass, not transcribe and guess. It returns the words, a short gloss and routing hints, each with a confidence. Low confidence on a routing field triggers a quick "just to confirm" question instead of a wrong booking.
  • The audio stays replayable in the dashboard, because tone and severity do not survive text.
  • A new client is a config file checked against a schema, then one command.

Proof

Two test layers, kept apart on purpose. The first runs scripted conversations through the real stack with no model spend. The second runs live scenarios with a simulated caller and a judge model, capped at 5 dollars a run by default: 31 hand-written cases and 102 generated ones. The judge is itself checked, with a bar of 90 percent true negatives and 80 percent true positives. I have no figure for bookings handled or minutes saved.

Where AI was used

The bot uses a model for the conversation and to understand voice notes. Testing uses a model playing the caller, a model judging the reply, and a case generator aimed at the gaps in coverage rather than told to write more.

Time saved: not measured.

Deliverables

  • Multi-tenant platform on AWS
  • Staff dashboard: requests, quick review, appointments, clients, CSV export
  • Onboarding command and config schema
  • Test suites: end-to-end, live scenarios, voice comparison, judge calibration
  • Journey maps, product and UX reviews, runbook

Back to work