Every service a patient needs, scheduled together.
ABA, therapy, occupational therapy and the rest compete for the same patients, the same clinicians and the same rooms. This engine schedules them as one problem — respecting credentials, school hours, room capacity and what the payer actually authorized — and tells you plainly when something is not possible.
Preview build — synthetic scheduling data, no real patient information, and access is protected by Supabase Auth and database roles.
Overview
Total patients
20
ActiveInactive
182
Clinicians
21
AvailableOn leave
201
This week
0h delivered
0 appointments
John can reach 30 hours this week — an extra 3h across 2 appointments. No arrangement can do better.
hard constraints enforced
17hard constraints enforced
scheduling granularity
15 minscheduling granularity
roles, each scoped
7roles, each scoped
decisions made by AI
0decisions made by AI
What it does today
Every figure in the product is computed by the scheduling engine — nothing on these screens is decoration.
Knows every reason a booking is illegal
Double-booked patient or clinician, lapsed certification, school hours, room at capacity, over the authorization, not enough time to drive between clinics. Seventeen rules, each returning a reason rather than a refusal.
Finds the time that actually exists
Ranked openings across every eligible clinician, weighted by who the patient already sees, where they prefer to be seen, and whether the slot leaves a useless gap in the day.
Answers the hours question
“Get this patient as close to 30 hours as possible without losing therapy or OT.” It reports what is reachable, proposes the appointments, and says whether a better arrangement could exist.
Explains itself when the answer is no
Not “no solution”. Instead: only 3h of authorization remain, 3h are held by protected appointments, and there are only 8h where the patient is free and a clinician is available.
Shows what hiring would actually buy
Three more clinicians adds roster hours — but only the hours that land where patients are free and authorization remains count as care delivered. The simulation reports both.
Keeps authorization and clinical need apart
What the payer will fund and what the patient clinically needs are different numbers, held by different people. The system refuses to let one quietly become the other.
How it works
The constraint engine decides what is legal and what is best. AI is only ever an interface.
01
Ask in plain English
“Get John to 30 hours of ABA without moving his OT.” The assistant turns the sentence into a structured scheduling request — and shows you exactly what it understood.
02
The engine decides
Candidates are generated, every hard rule is applied, and the result is bracketed: what is reachable, and whether a better arrangement could exist.
03
A human approves
Options are offered with their trade-offs — more hours against fewer changes. Approving locks, revalidates against live data, commits atomically and writes an audit entry.
AI never decides the schedule. It cannot invent availability, judge whether a schedule is legal, book anything, or override an authorization or a credential. Those belong to the engine, and always will.
In every corner of the app
A chat that can only tell you the truth
Ask about a patient’s hours, spare capacity, or what another hire would buy you — from wherever you are, without leaving the screen you were working on. The assistant sits in the bottom-left corner of every page.
It cannot make a number upThe sentence becomes a structured request; the scheduling engine computes every figure. Nothing is generated.
It shows its workingHow long the engine took, how many candidate appointments it weighed, and whether a better arrangement could exist.
It cannot book anythingAnswers and proposals only. Committing a schedule is a human decision with an audit entry behind it.
No language model is connected in this build. A fixed-phrase parser recognises the question and the engine answers it. That boundary is the architecture the specification asks for — a model, when one is added, replaces the parser and nothing else.
Scheduling assistant
Engine-backed · no language model
Ask your own question in the demo
Built around who does the work
Seven roles, each holding the operations that genuinely belong to it. A scheduler cannot change what a patient clinically needs; the person entering authorizations cannot either. That separation is deliberate.
Scheduler
Books and moves appointments; runs Fill Service
17 permissions · whole practice
Clinical supervisor
Owns clinical requirements; approves reductions in care
18 permissions · own caseload
Therapist / provider
Sees their own week; requests time off
6 permissions · own schedule
Authorization specialist
Owns payer authorizations and renewals
2 permissions · whole practice
Operations manager
Capacity, utilization and hiring simulations
8 permissions · whole practice
System administrator
Service configuration, rooms and user accounts
5 permissions · whole practice
Compliance officer
Read-only audit oversight
1 permission · whole practice
This role model is a proposal for Baker Street to confirm — the handoff specification requires role-based access but never says what the roles are.
Before any real patient data
This build runs entirely on invented data, and it says so on every screen. Five things have to be in place before that changes — listed here rather than buried, because a preview that hides its gaps gets mistaken for a finished product.
01Real sign-in, ideally the practice's existing identity provider
02Roles read from the database rather than chosen from a menu
03Row-level security in Postgres, so a query bug cannot leak a record
04A paid database plan and a signed business associate agreement
05Encryption in transit and at rest, with audited access
See a week that actually resolves.
Twenty patients, twenty-one clinicians, three clinics, and one question the engine answers exactly: can this patient reach thirty hours without losing anything they need?