Our own tool · Diagnostic imaging · 2025
The scanner is the bottleneck, not the doctor
Your practice software gives every doctor a calendar, but the thing you run out of is the scanner - and an unsold scanner hour cannot be sold later. This is the scheduler that books against the machine, and refills a cancellation from the waitlist without anyone phoning a list.
5
Constraints checked together per appointment: practitioner, specialty, room, device, turnaround
- Next.js
- TypeScript
- Postgres
- Flutter
- Viber
Try it here
This is the same code that runs on the sector page, not a recording of it. Put your own numbers in.
- Pick a procedure and click a free slot to book it.
- Click a booking to pick it up, then drop it in another slot.
- Pick a booking up and cancel it - watch the waitlist fill the gap.
0/3
Real constraint checking, running in your browser. No patient data of any kind - the names are invented and nothing you do here is sent anywhere or stored.
The numbers
- 1
- Solver called from everywhere, because two validators is how a double booking happens
- 6
- Resources on one board: three practitioners, two rooms, one shared scanner
The problem
The practice software models one calendar per practitioner, which is the wrong model for a diagnostic centre: the constraint is the scanner, shared across sites, with a turnaround window between patients.
So the real schedule migrated into spreadsheets and a WhatsApp group, double bookings were caught by reception rather than by software, and a cancelled scan hour was simply lost because nobody had time to phone down a waitlist.
What we did
One solver, called from everywhere. The constraints - practitioner, specialty, room, device, turnaround - are checked together and in a fixed order, and the same function answers the public booking page, the reception screen and the API. Two validators is how a double booking happens.
The refusal names the collision. "Both rooms are occupied" and "the ultrasound is still in turnaround" are different problems with different fixes, and a receptionist who is told which one it is does not phone a manager.
Waitlist backfill runs the moment a slot frees, matching on procedure and specialty rather than on order of arrival alone. This is the feature with the clearest commercial case in the entire build, because an unsold scanner hour cannot be sold later.
Deliberately left alone: the patient record and the prescribing. Those stayed in the existing practice software, which handles them adequately, and the scheduler reads what it needs rather than becoming a second record system.
Where it got to
The scheduler on the clinic page is this solver, running in your browser, with no patient data of any kind in it. The refusals you get are the refusals reception gets, worded the same way.
A worked example
The scheduler on the clinic page is this solver. Every refusal names the constraint, because that is what reception can act on:
- Practitioner time booked at the start of the day
- 21%
- Ultrasound at 11:00
- in turnaround
- Ultrasound with Dr Vlachou, 2 slots
- she is with another patient
- Cancel the 09:00
- waitlist refills it
- Slot recovered
- automatically
The refill is where the commercial case sits: an unsold scanner hour cannot be sold later, and nobody has time to phone down a list mid-clinic.
Try it hereWant something like this for your business?
A 20-minute call with the two people who would build it. You tell us what you need; we tell you whether it is worth building and roughly what it costs.
The full page: Clinics & diagnostics