This system is already running in production for a tattoo studio. The intake form captures design details, pronouns, date of birth, and terms acceptance. The deposit requirement has cut no-shows significantly. Push notifications mean the artist knows about new bookings immediately, even when they're working.
The same system could work for any appointment-based service — consultations, personal training, therapy sessions, salon appointments, photography shoots. The custom intake forms and configurable settings make it adaptable without code changes.
How I Built It
The booking system is built with the same stack as the rest of HD CMS: Nuxt 3 on the server, Supabase for the database, and Vercel for hosting. The slot generation algorithm runs server-side and factors in weekly schedules, date overrides, existing bookings, service duration, buffer times, and advance booking limits.
The admin UI uses the same component library as the rest of the CMS — Vue 3 with a dark-themed admin panel. The 3-step booking wizard, calendar view, and settings tabs are all standard Vue components with Pinia stores managing the state.
Push notifications use the Web Push API with VAPID keys. When a booking is created through the public API, the server sends a notification to all subscribed devices for that site. Expired subscriptions are automatically cleaned up.
Stripe integration for deposits uses Checkout Sessions via Stripe Connect — each site has its own connected Stripe account, and deposits are processed with platform fees applied automatically. Webhooks handle the payment confirmation and update the booking record.
The whole thing took about two weeks of focused development. Most of the complexity was in the slot generation — getting the edge cases right (bookings that span break times, buffer overlaps with closing time, midnight boundary handling) required careful testing.
What's Next
Email confirmations are the obvious next step — clients should get a confirmation email with calendar invite attached. SMS reminders before appointments. And a client-facing booking widget component that sites can drop in with minimal configuration.
But the core is solid. It handles the fundamental problem: letting service businesses take bookings through their own website, managed from the same admin panel as their content, without paying for a separate booking platform.
That's the point of HD CMS — give small businesses the tools they actually need, built into one platform they can manage themselves.