All posts

Building a Booking System with SMTP and ICS

Alex · · 1 min read

The hard parts

  • Timezones: availability lives in the business timezone; storage is UTC.
  • Races: a partial unique index makes double-booking impossible at the database level.
  • Calendars: a hand-rolled RFC 5545 builder attaches an .ics to every confirmation.

Email that cannot break bookings

Send after commit, catch everything, and fall back to a capture transport when SMTP is missing.