Skip to content

Mila Barber

Automatic appointment booking system for Hassan, who runs a barber shop in a Pamplona neighbourhood

Mila Barber first screen: the «MILA BARBER» wordmark in black and gold with the «your style, our passion» line, the «book an appointment» and «services and prices» buttons, and the opening hours and address below.
My role
Design, development, content model and deployment
Year
2026
Status
In production

Site for Mila Barber, a barber shop in the Milagrosa district of Pamplona. The public side is new; the private area — accounts, appointment booking and the shop’s diary — rebuilds what the previous application already did.

Two kinds of data live in the same place without mixing: content (photos, services, prices, notices) lives in Sanity and the barber edits it at /admin; people (accounts and appointments) live in MongoDB, never touching the CMS.

The shop’s previous domain still points at the old application: migrating it is the client’s call. The homepage is still served without the video montage.

What's inside

  1. An appointment is a snapshot of the moment it was booked: the service name, price and duration are copied into the document, so raising a haircut from €14 to €16 never rewrites what was charged last week nor shifts that day’s diary.

  2. Booking happens inside a transaction: another booking fits between checking the slot is free and writing the appointment, and the day it happens two people turn up for the same time.

  3. Three roles (client, staff, admin) granted by hand from the console: letting whoever registers first take control is a classic hole the moment a site goes public.

  4. The time zone is set when the server boots rather than by an environment variable, because TZ is reserved on Vercel: running in UTC would shift the summer diary by two hours and lose the last two slots of the day.

Stack

  • Next.js 16
  • TypeScript
  • Tailwind CSS 4
  • Sanity
  • MongoDB
  • Auth.js
  • bcrypt
  • Nodemailer
  • Vercel