The system: a public booking site plus a role-based admin panel, custom-built in PHP + MySQL for Lavantia Beauty Center and deployed on their own hosting — no third-party booking fees, no per-seat SaaS pricing, full ownership of the code and the data.
The problem
A beauty salon's real bottleneck isn't marketing — it's operations. Every phone booking is a chance to double-book a specialist. Every laser package (an "8+2" deal, say) needs someone to remember, session by session, how many visits are left. Every month-end, someone has to reconstruct income and expenses from memory and receipts. And every appointment reminder sent "by hand" is one a busy receptionist eventually forgets. None of this needs an enterprise platform — it needs software built around exactly how this business works.
The product
Clients book themselves through a four-step mobile page: treatment → specialist → date & time → contact details. Behind it sits an availability engine that checks every active staff member's existing appointments for that day, respects the salon's opening hours, closed weekdays and slot length, and only offers times that are actually free — so double-booking simply isn't possible. New online requests land as pending until the team confirms them, which keeps a stranger from locking a slot without a human check.
The admin side is a full panel behind login, with roles: a Manager account sees everything, Staff accounts see bookings and clients but not the team or settings pages. It covers:
- Dashboard — today's schedule, pending requests to approve or decline, and tomorrow's confirmed appointments queued for reminders.
- Appointments — filterable by Today, This Week, Next Week, This Month or a custom date range, with one-tap approve / complete / cancel and a WhatsApp button on every row.
- Clients — a searchable client base with visit history, notes (skin type, allergies, preferences), and a running balance.
- Services & pricing, and Team management for staff accounts and permissions.
Session packages: the feature that actually mirrors how the salon sells
Beauty salons don't sell single visits as often as they sell packages — "Laser Full Legs, 8 sessions plus 2 free." I built a package ledger per client: add a package with a session count and price, tap Use session after each visit, and a progress ring shows what's left automatically — with an undo button for the inevitable mis-click. It sounds small, but it's the difference between a system staff actually use every day and one they quietly go back to a notebook for.
WhatsApp-native, on purpose
Nobody at a local salon is going to check email for appointment reminders — they're going to get a WhatsApp message. Every appointment carries a one-tap WhatsApp button that opens a pre-filled confirmation or reminder message (editable as a template with {name} {service} {date} {time} placeholders) straight to the client's number. For salons that want it fully hands-off, the system also supports the WhatsApp Cloud API: an hourly cron job sends tomorrow's confirmed-appointment reminders automatically and marks them sent, with the one-tap buttons staying available as a manual fallback.
Real accounting, not a spreadsheet promise
The Finance module (manager-only) tracks client payments by method — cash, card, transfer — against charges from both packages and completed visits, so every client profile shows a live balance: paid, owed, or in credit. Expenses are logged by category (products, rent, salaries, marketing, and more), and the month view rolls it all into income, spending, net result, and an expense breakdown by category — the numbers a salon owner actually needs at month-end, generated automatically instead of reconstructed from receipts.
Built so the whole team can actually use it
The person managing bookings and the person doing the accounting aren't always fluent in the same language. I added a full bilingual interface — English and Turkish — switchable per user with one tap, covering every screen in the admin panel: forms, statuses, validation messages, even localized weekday and month names. It's a detail that doesn't show up in a screenshot, but it's the difference between software the whole staff adopts and software only one person can drive.
Stack & scope
Custom PHP + MySQL, deployed on standard shared hosting with no framework dependency — chosen deliberately so the client isn't locked into a hosting provider or a recurring platform fee. CSRF-protected forms throughout, role-based access control, a hardened .htaccess on internal includes, and a from-scratch availability/scheduling engine. The brand identity — a hand-drawn SVG lavender sprig motif, the salon's official vector logo, and its green-and-gold palette — is built directly into the interface rather than bolted on. Product design, the scheduling logic, the accounting module, the bilingual system and deployment: end to end by one developer, shipped and iterated in production across four versions as the salon's needs grew.
Building an operations system for your own business — bookings, clients, packages, or accounting? Let's talk.