Chapter 01
The challenge
Scheduling, reminders and payments lived in three disconnected systems, and reconciling them was somebody's entire Friday.
Getting from there to a working product was not only a matter of writing code. A few things made this project harder than it first looked:
- Each clinic had its own opening hours, practitioners and appointment types
- Patient data had to be visible only to the staff who needed it
- Reception staff had no time for training on a complicated system
- Historical bookings and patient records had to move across without a gap in service
Chapter 02
What we did
A Next.js platform with role-based access, Stripe billing, automated reminders and an admin console for non-technical staff.
1.One booking model
A single scheduling engine with per-clinic rules, so patients book online and reception sees the same calendar.
2.Role-based access and audit
Permissions by role and clinic, with a log of who viewed or changed each patient record.
3.Reminders and payments built in
Automated SMS and email reminders, with deposits and payments taken through Stripe and reconciled automatically.
4.Staged migration
Clinics moved one at a time over a weekend each, with the old system kept read-only as a fallback.
Chapter 03
The outcome
Headline result
No-shows reduced by automated reminders
- One system instead of three subscriptions
- Staff onboarding cut to a single session
Chapter 04
Built with
The tools chosen for this project, each for a reason specific to the problem rather than out of habit.
- Next.js
- TypeScript
- PostgreSQL
- Stripe
- Twilio
- AWS




