At a nail salon or a barbershop, bookings come in by phone, Instagram message, WhatsApp or a booking app. It all works until the phone rings in the middle of a haircut, or a message goes unanswered until the evening. On my own initiative, I built two booking pages on demo sites: one modelled on a nail studio in Torres Vedras and one on a barbershop with three locations around Lourinhã. This post pulls together what I learned from both and answers the question every owner ends up asking: your own page, or a platform?
What a booking page needs
Less than you might think. Four things, in this order:
- The service. A short list, using the names the business already uses and customers recognise. There is no point inventing neat categories.
- The duration. Gel extensions and a polish don't take the same time. In the demo, the time slots are one-hour blocks; in a real system each service has its own duration and the calendar only offers times where it fits.
- The day and time. Only the days the studio is open, never past days, and no lunch hour. On a phone, the days sit in a row that scrolls sideways and the times in a three-column grid.
- Details and confirmation. Name and mobile number, validated before sending. No account to create. The confirmation arrives by text or email, with a way to cancel.
Neither demo creates real bookings, and both say so on the confirmation screen. To work for real they need the part you don't see: a calendar that blocks times already taken, a calendar per professional when there is more than one, and reminders the day before.
Several locations, one page
The barbershop has three locations with the same prices. Rather than three pages, the booking starts by choosing the location. Each location card on the home page links straight to the booking with that location already picked. One service only exists at one location; it appears when you choose that location and disappears for the others, so nobody books something that isn't offered there.
When the data doesn't exist, don't make it up
The barbershop doesn't publish opening hours for each location. A grid of times would be invented, so the page asks for the day and the part of the day (morning, afternoon or early evening) and the shop confirms the time. It is less instant than picking 3.30pm, but it promises nothing false.
I didn't get this right first time. In a fact-checking pass across all the demos, I found this page saying the request "reaches the barbershop directly, with no platforms in between". The opposite was true: the shop already takes bookings through a platform. The line now says that, on the finished site, the request would go straight to the shop, and that for now real bookings are made on the booking page it already uses.
Your own page or a platform?
Booking apps for salons and barbers do the essentials well, and there are good reasons to use them. But they are not the same as having booking on your own site. In general terms:
A platform
- Calendar, reminders and staff management ready to use, with no development.
- Some new customers may find you through the app itself.
- On the other hand, customers see your business inside another company's product, often next to competitors.
- Prices and terms are set by the platform, which can change them.
- Your customer list and history live there, and leaving takes work.
Your own page
- On your domain, with your brand, inside the site that already shows up on Google.
- Shows exactly your services, your locations and your rules.
- Customer data is yours.
- On the other hand, someone has to build and maintain it, and confirmation texts cost money.
- Brings no customers from an app: it relies on people already looking for you.
There is no single right answer. If the platform works and brings customers, don't throw it away: a site that sends people to it clearly, from each service and each location, is already a gain. Your own page makes sense when the business already has enough regulars, wants booking inside its own site, or needs rules the platform won't allow.
The mobile layout problems
Most bookings happen on a phone, so I test these pages at 375px wide. On the nail studio's page, the whole page started scrolling sideways, and it wasn't obvious why.
The cause was the fieldset. By default, browsers give it min-inline-size: min-content, so it never gets narrower than its content. The sideways-scrolling row of days has a very wide content width, so the fieldset stretched to match it and pushed the page off the screen. The fix is one class:
<!-- before: the fieldset grew to the width of the row of days -->
<fieldset>
<!-- after -->
<fieldset class="min-w-0">
<legend>2. Day and time</legend>
<div id="days" class="flex snap-x gap-2.5 overflow-x-auto">…</div>
</fieldset>With min-w-0, the fieldset respects the column width again and it is the row of days that scrolls, as intended. I applied it to every step of the form and to another booking page with the same structure. It is the kind of bug that only shows up on a real phone or a narrow window, and that no customer ever reports: they close the page and phone instead.
In short
A good booking page asks for little: service, day, time, name and mobile number. The work is in what sits behind it, the calendar, the durations and each location's rules, and in not promising on screen what the business doesn't do. If you run a salon or a barbershop and want to think through the best way to take bookings, get in touch.