Read this case study on its own page
Challenge
Booking links and the availability widget on this site were reading a calendar that could be minutes or hours out of date, which is exactly how double-bookings happen. Availability needed to be live, and it needed to respect the things a person would: bank holidays, a minimum notice period, and more than one mailbox.
Approach
A small C# service listens for Outlook calendar changes through Microsoft Graph and publishes the real appointment schedule for other systems to read. Push notifications keep it current within seconds; a periodic reconciliation pass catches anything a notification missed, because notifications alone are not a guarantee. England-and-Wales bank holidays come from the UK Government API and are blocked automatically, and nothing is offered inside a configurable minimum-notice window. The third-party integrations sit behind small, separately versioned libraries so the core logic is tested without a live mailbox, and a change to one provider never touches the others.
Outcome
- The booking flow on this site reads the same live schedule the diary does — real free slots, not hourly guesses
- Calendar changes reflected within seconds, with reconciliation as the safety net
- Bank holidays excluded and minimum notice enforced without anyone blocking out a calendar by hand
- Runs unattended in production, deployed through the same build-once pipeline as everything else
Where judgement mattered
- Webhooks and polling, rather than trusting either on its own
- Publishing the true schedule rather than a coarse availability grid
- Isolating each external contract behind a facade so the core stays testable and provider changes don't cascade
- Credential-free access to storage wherever Azure allows it
Technology stack
C# / .NET 10 · Azure Functions · Microsoft Graph · Azure Service Bus · Azure DevOps CI/CD