An advanced booking & operations platform built for a women's salon โ designed not around a calendar, but around <b style="color:var(--accent)">how a salon actually operates</b> under real daily pressure.
Domain: Service Business OperationsStatus: ๐ข Soft Launch โ Live Testing
RoleFull-stack Engineer
ComplexityMulti-role ยท Multi-constraint System
ImpactOperational chaos to Structured system
๐ก The Real Engineering Challenge
Most booking systems treat an appointment as a simple tuple: service + time + customer.
[Redacted] was built around a harder question:
what does it actually take for a booking to be possible?
"The problem wasn't building a booking page. The problem was modeling the operational logic of a salon itself."
Shift-Aware Scheduling No Ghost Slots
Staff availability isn't just a name in a database. [Redacted] ties every time slot to
actual shift windows, work days, and exceptions โ before surfacing it to the customer.
Conflict Prevention First Zero Double-Books
The system validates against service duration, staff assignment, and concurrent bookings
before any appointment is confirmed โ not after.
Payment-Linked Booking Real Intent
Bookings from the website require a deposit. Reception-created bookings require
full payment. The appointment state machine reflects both paths cleanly.
Best-Fit Recommendation Smart Allocation
Customers can pick a specific staff member โ or let the system
recommend the best available match based on service, time, and shift constraints.
๐๏ธ System Architecture
[Redacted] operates as four interconnected layers โ each solving a distinct operational concern.
Booking Request
โ
โผ
Availability Engine
โ โโโ Is the service available?
โ โโโ Does the time fit within shift hours?
โ โโโ Is the staff member free? (no overlap check)
โ โโโ Specific pick or best-fit recommendation?
โ
โผ
Payment Gate
โ โโโ Online booking โ Deposit required
โ โโโ Reception entry โ Full payment recorded
โ
โผ
Appointment State Machine
โ Pending โ Awaiting Deposit โ Confirmed
โ Confirmed โ Completed / No-show / Rescheduled / Cancelled
โ
โผ
WhatsApp Notifications โ Customer Confirmation + Reminders
โ
โผ
Financial Reports + Admin Dashboard (Manager Layer)
๐ Appointment States
Every appointment moves through a defined state machine โ no ambiguity in what "confirmed" means.
The platform doesn't mix all users into one view. Each role has a dedicated,
permission-scoped experience that matches their actual daily job.
๐
Customer
Browse 200+ services, create multiple bookings, pick a specific staff member or use best-fit recommendation, pay deposit online, receive WhatsApp updates.
๐๏ธ
Staff Member
View shift-linked personal schedule, see assigned services, track upcoming appointments, avoid surprises โ no access outside their scope.
๐ฅ๏ธ
Receptionist
Enter walk-in bookings (full payment), handle cancellations and rescheduling through the control panel, manage daily operations in real time.
๐
Site Manager
Full visibility: all bookings, all staff shifts, services and pricing, financial reports, daily pressure monitoring โ a genuine operational control layer.
๐ง Why This Is Actually Hard
This isn't a CRUD app with a calendar skin. The real complexity is in the constraints.
Modeling real availability โ A staff member being "in the database" doesn't mean she's bookable.
Availability is calculated from shift start/end, assigned service types, and existing confirmed appointments.
200+ services with distinct durations โ Every service has its own duration, price, and potentially a required skill level or specific staff assignment.
Scheduling must account for the actual time block each service occupies.
Payment as a workflow gate โ The booking-to-payment link is behavioral: online bookings trigger a deposit flow,
reception entries bypass it with full payment. The state machine must reflect this without leaking logic between paths.
Role-based access across a live system โ Four roles with different views, different permissions, and different operational realities โ
all sharing the same underlying data layer without colliding.
The best UX here isn't a beautiful animation. The best UX is a system that prevents chaos before it starts.