Legacy Hair Studio
Book without calling.
And two bookings can never overlap.
Booking system for a barbershop in Rosario: three-step online booking with no account or deposit, booking management from a link, and a panel for the shop to run its schedule.
- My role
- My own project: design, development and deployment.
- Stack
- Next.js 16
- React 19
- Prisma
- PostgreSQL 18
- Docker
- Caddy
- Vitest
Decisions that matter
Double booking is impossible
The application does not check it: PostgreSQL guarantees it with an EXCLUDE USING gist constraint. A test fires 10 parallel bookings against the real database to prove it.
Notifications are not lost
Transactional outbox with FOR UPDATE SKIP LOCKED: the email only goes out if the booking was saved, and overlapping runs do not collide.
The calendar stays up to date
Each booking generates an .ics with a stable UID and SEQUENCE: move or cancel it and the customer calendar updates.