Session booking page with calendar-aware availability


The problem
A studio that sells timed sessions needs a way for clients to book without back-and-forth messages. Offering times by hand risks double-booking against existing bookings, personal calendar events, and time the owner has set aside. Clients in other timezones also have to work out what a time means for them.
What we built
We built a public booking page where a visitor picks a service, a day, and a time, then enters their name, email, and optional phone and notes. Times show in the visitor's timezone with a switcher, and the studio timezone is shown too. Available slots are calculated from weekly hours, service length, buffers, minimum notice, and a booking window. They skip confirmed bookings, manual blocks, and busy events read from up to five secret Google Calendar iCal links. If a calendar feed fails, the last cached copy is kept. After booking, the client gets an on-page confirmation with Add to Google Calendar and .ics links, plus a signed link to cancel or reschedule without a login. The owner has a magic-link dashboard with upcoming bookings grouped by day, one-click cancel, and a Block time button. Owner settings cover business name, timezone, services, hours, buffer, notice, how far ahead people can book, notification email, and connected calendars. Emails go out for confirmations, new, cancelled, and rescheduled bookings, and a one-time day-before reminder. A demo mode with sample data sends no email and fetches no calendars.
Outcome
Clients can book, cancel, or reschedule a session on their own from a phone or desktop, and see only times that are actually open. The owner can see upcoming bookings, cancel one, block off time, and change services and hours in one place, and both sides get email notices when something changes. Connected calendar events are treated as busy, so those times are not offered.