SalonSync
Your salon fills up while you work.
Creator & Full-Stack Engineer
Modern SaaS platform for barbershops and salons: online booking, appointments, clients, the live queue and walk-ins, takings and notifications, with an AI booking assistant.

Overview
SalonSync is a multi-tenant SaaS for barbershops and salons, live at salonsync.ma. Each shop gets a public booking page with an AI assistant, and the team runs the day from one dashboard: the agenda, the live queue and walk-ins, clients, services and takings, in French, Arabic or English.
Problem
Barbers and salon teams often manage bookings, walk-ins, clients, queues, reminders and daily operations by hand or across disconnected tools: phone calls, direct messages, a paper diary and cash totted up at the end of the week.
Solution
SalonSync brings bookings, appointments, clients, barbers, services, the queue, notifications and business management into one modern platform, with a public booking page and an AI assistant that books real, available slots.
Key features
Online booking page
A public page per shop showing services, prices, durations, the team and genuinely free slots. Clients book in a few taps and get a reference and a live tracking page.
AI booking assistant
Answers clients on the booking page and books real appointments. It only works with what the database returns (services, barbers, free slots), so it cannot invent a price or a time.
Appointments & agenda
The day’s bookings per barber, with each visit’s status from confirmed to in the chair to completed.
Live queue & walk-ins
Shows who is waiting and who is in which chair, with wait estimates recalculated from what actually happened, and suggests a chair for a walk-in without breaking booked appointments.
Client management
Client records built from the bookings the shop already takes: visit history and regulars.
Team & schedules
Barber profiles and per-day working hours with breaks, so the booking page never sells an hour nobody is there for.
Services & pricing
Each shop’s menu of services with prices and durations, used by the booking page, the assistant and the agenda alike.
Takings & payment tracking
Records whether and how each visit was paid: cash, card, online or other. SalonSync records payments; it does not process them.
Analytics & reports
Revenue and attendance reports computed from the visits the shop has recorded.
Telegram notifications
Barbers are notified on Telegram about new bookings, changes, cancellations and clients who are due shortly.
Reviews
Clients can leave a review, which stays hidden until the owner approves it.
WhatsApp booking & reminders
Coming soonBooking through the assistant and appointment reminders over the shop’s own WhatsApp Business number.
Email notifications
Coming soonBooking confirmations and reminders by email.
Product experience
Two surfaces share one API. The public side is the shop’s booking page: mobile-first, in the client’s language, and looking like the shop rather than like software. The private side is the dashboard the owner and staff use during the day: the agenda, the live queue board, each barber’s own day, clients, reports and settings. A platform admin area manages shops and plans.
Architecture
- →Laravel REST API on PHP 8.4 with Sanctum authentication; thin controllers over a service layer.
- →Next.js App Router frontend written in TypeScript with React and Tailwind CSS.
- →Multi-tenancy in one PostgreSQL database: every tenant row carries a shop id, and a global scope limits every query to the current shop. Middleware sets that shop from the signed-in user, the booking-page URL or the incoming webhook.
- →AI assistant: an OpenAI tool-calling loop with tools to list services and barbers, find free slots, and create or cancel bookings. Tools take names rather than ids, and conversations are stored per shop and channel.
- →Realtime dashboard over Laravel Reverb websockets: the server broadcasts a small “this changed” signal on a private per-shop channel and the screen refetches, instead of polling.
- →Background work on a Laravel queue worker and scheduler, so notifications, reminders and review requests never slow down a request.
- →Runs on Docker Compose (Nginx, PHP app, queue worker, scheduler, PostgreSQL) and deploys from GitHub Actions. CI runs the PHPUnit suite, Larastan static analysis and Pint.
Technology stack
- Backend
- PHP 8.4LaravelLaravel SanctumLaravel ReverbREST API
- Frontend
- Next.js (App Router)ReactTypeScriptTailwind CSS
- Data
- PostgreSQL
- Infrastructure
- Docker ComposeNginxGitHub Actions
- Integrations
- OpenAITelegram Bot API
- Quality
- PHPUnitLarastanLaravel Pint
Technical challenges
No double bookings, whatever the channel
A slot can be taken from the booking page, the assistant or the dashboard at the same moment. The booking service re-checks availability inside a database transaction, so two clients can never get the same chair and time.
Tenant isolation by default
Isolation is not left to each controller. A global scope makes every query shop-scoped unless the code explicitly opts out, which keeps the exceptions few and easy to find.
An AI assistant that cannot make things up
The model never answers about prices or availability from memory. Every fact comes from a tool that reads the database, and the booking itself goes through the same service as a manual one.
Queue estimates that match the room
A queue is a moving estimate. Wait times are recalculated from what actually happened (cuts running long, walk-ins arriving) rather than from booked times.
Realtime without heavy polling
The agenda used to refetch the whole day every 15 seconds in every open tab. It now listens for a small per-shop signal and refetches only when something changed.
Product decisions
- →Record payments rather than process them: shops keep their own card machine and cash, and SalonSync tracks what was paid and how.
- →A booking page rather than a website: one link that shows services, prices and free times, and takes the booking.
- →One assistant for every channel, so a new channel does not mean a second set of booking rules.
- →Plans are a flag on each shop, so moving from the free launch plan to paid tiers is a plan check, not a refactor.
- →Three languages from the start: French, Arabic and English.
Current status
SalonSync is live at salonsync.ma, in its launch phase with a free plan, and under active development. No usage figures are published here.
Screenshots
Captured from salonsync.ma. The names and figures belong to the sample shop shown on the public site.


Links
Visit salonsync.ma ↗Related architecture