Skip to content
Back to Projects

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.

LaravelPHPNext.jsTypeScriptPostgreSQLDockerOpenAI
SalonSync dashboard overview: today’s appointments, live queue, barbers and takings

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 soon

    Booking through the assistant and appointment reminders over the shop’s own WhatsApp Business number.

  • Email notifications

    Coming soon

    Booking 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.

SalonSync online booking page: services with prices and durations, and free time slots
SalonSync online booking page: services with prices and durations, and free time slots
SalonSync live queue board: who is in the chair and who is waiting
SalonSync live queue board: who is in the chair and who is waiting

Links

Visit salonsync.ma ↗

Related architecture

Get in touch