Client
Hair by Chrissy
Node API on Render · Supabase/Postgres · Stripe Checkout · Unbuilt front end
Problem
Chrissy fits hair extensions by hand in a private London studio. Bookings came through Instagram DMs — a thread per client, no calendar, and no way to stop two people asking for the same Saturday.
Approach
So the site is not a brochure, it is the booking system. Pick a service, see genuine live availability, take a slot, and pay by cash or card — card takes a deposit through Stripe Checkout to hold the slot, with the balance on the day. Behind it Chrissy has her own dashboard: she sets working days, hours, breaks and time off, and the client calendar updates the moment she saves. Her day comes back as a run sheet, gaps included.
Outcome
One front end, unbuilt and unbundled, served two ways. The booking engine — live calendar, dashboard, payments — runs as a small Node API on Render with Supabase behind it. GitHub Pages cannot run any of that, so the published copy deliberately falls back to enquiry mode: the real price list and an enquiry, rather than a calendar that looks live and is not. A build step snapshots the database to static JSON so the public page still shows her real services and prices.
The screens




If this looks like your problem
Tell me about it and I'll tell you what it takes.