GUIDE  ·  12-Minute Read

How to Build a Salon Booking App: Customer App, Business App and Admin

How to build a salon booking app comes down to three surfaces: a customer app for finding a salon and booking a named stylist at a specific time, a business app where the salon runs its calendar, staff and policies, and an admin panel, all reading one appointment record on a server. This guide covers both user journeys, the booking state machine, the edge cases that become support tickets, what it typically costs, and when Fresha, Booksy or Vagaro is the better choice, drawing on two salon platforms Sigi Technologies has shipped.

Trim Worldwide website section headed Built for both sides of the chair, with two barbershop photos and the Trim and Trim Business product cards

What is a salon booking app and how does it work?

A salon booking app is an appointment booking app that lets a customer choose a service, a stylist or barber and a time slot, pay or leave a deposit, and change the booking later, while the salon manages the same appointment from its own calendar. One server-side record is the truth, and each app renders the state that record reports.

Trim, a salon and barber booking platform Sigi Technologies built for Trim Worldwide Ltd in London, is the shape this guide follows: a Flutter customer app, a business app called Trim Business for owners, managers and rent-a-chair specialists, and a React admin panel, all served by one Node.js API. Woowlook, a salon and spa booking marketplace on Google Play, follows the same pattern with a customer app and a seller app over one shared backend.

  • A salon booking app needs three surfaces, a customer app, a business app and an admin panel, all reading one appointment record on the server.
  • Availability must be modeled per staff member, not per salon, so every booking is attached to a person who can perform the service.
  • Appointment reminders raise attendance: a 2026 meta-analysis of 10 randomized trials found patients who received reminders were 11% more likely to attend.
  • Deposits and no-show fees can be built on a card authorization captured later; Stripe holds an online card authorization for 7 days.
  • As published on 11 September 2026, Booksy charges $29.99 per month plus $20 per extra team member and Vagaro $23.99 per month plus $10 per extra calendar.
  • A custom salon booking app with customer app, business app and admin panel is a planning estimate of $150k to $350k or more; a single-app MVP starts around $40k.

What has to be right before you design a single screen?

Four problems decide whether a salon is still using the app after the first month. Each came out of a real build.

  • Availability drifts. A shop with five chairs takes online bookings, walk-ins and blocked time at once; if the business app calendar lags the customer app by a minute, a chair gets double-booked. On Trim, availability lives in one place, the API, and every calendar view reads from it.
  • Staff are paid in different ways. A rent-a-chair specialist is a freelancer who pays the shop for a chair and keeps their own revenue. On Trim they are modeled as their own shop, which keeps their finances private while customers still find them under the salon profile.
  • Policies belong to the shop, not the platform. On Trim, deposit, cancellation and no-show rules attach to the shop record and apply to online bookings only, so a walk-in is never charged a no-show fee.
  • Money flows on both sides. Customers expect card, Apple Pay and Google Pay, shops still take cash, and the platform may bill a subscription. Trim runs all of it through one Stripe integration.

What features should a salon booking app have?

Salon app features split by who is holding the phone. The lists below are what shipped across Trim and Woowlook, so they describe working products rather than a wish list.

Customer app

  • Map and list discovery of nearby salons and barbershops, with profiles showing services, gallery, opening hours, reviews and up-front prices.
  • A specialist view, so the customer can book a named barber or a rent-a-chair freelancer inside the shop.
  • Slot selection against real staff availability, with deposit and cancellation rules shown before confirming, and reschedule or cancel within that policy with the salon notified in real time.
  • Payment by card, Apple Pay or Google Pay, stored payment methods, push reminders, reviews, and in-app chat with the salon.

Business app for the salon

  • A calendar with list, calendar and timeline views, live columns per staff member and drag-and-drop rescheduling.
  • Walk-in bookings with quick customer registration, and service status from scheduled to completed.
  • Per-shop policies for deposits, no-shows, cancellations and rescheduling.
  • Roles and permissions, working hours, and wage models for commission, salary and rent-a-chair.
  • Card and wallet payments through Stripe alongside cash tracking, plus the shop subscription with recurring billing.
  • Performance reports, customer profiles with history and notes, coupons with time-of-day targeting, and notifications.

Admin panel for the platform team

  • Registered shops, specialists, users and booking activity over the same API.
  • Review of new business accounts and their subscription status.
  • Transactions and disputes viewed against the same records the apps write to, so there is no second data store to reconcile. On Trim the panel is deliberately lighter than the business app, because day-to-day operations belong to shop owners.

How do you design the booking flow for customers and salon owners?

Most guides on how to build a booking app stop at the customer screens. Write both journeys before any screen is designed, because the salon has to be set up before a single customer can book.

The customer journey

  1. Find a salon or barbershop nearby, filtered by service.
  2. Choose a service, then a named stylist, then a slot that person is actually free for.
  3. Read the shop policy, pay or leave a deposit, and get a confirmation.
  4. Receive a reminder, with a way to reschedule or cancel inside the policy window.
  5. Attend, then review, save the shop, and rebook with a stored payment method.
Trim customer app Select time and date screen for a named barber, with a week strip and a list of 45-minute time slots

Customer app: slots are offered against one named specialist, not the whole shop

Trim customer app Manage booking sheet with Reschedule booking and Cancel booking options

Customer app: reschedule and cancel are first-class actions, not support requests

The salon owner journey

  1. Set up: say whether the business is a salon with employees or an individual stylist (Woowlook asks this before showing anything else), then add services, staff, hours, photos and policies.
  2. Open the day: see today’s column per staff member, including walk-ins registered at the counter.
  3. Handle change: drag a booking to a new time, mark a no-show, or cancel on the customer’s behalf, with the customer notified.
  4. Take payment by card, wallet or cash, then close the week with performance reports and what is owed to each staff member under their wage model.

Two requirements fall out of the two journeys. The business app has to be solid before the customer app is marketed, because every booking depends on a seller having set up services, staff and availability. And each requirement should be a statement QA can test: “a canceled online booking returns its slot to availability without a manual step”.

How do you stop double bookings and no-shows?

A booking state machine is the fixed list of appointment states and the events allowed to move an appointment between them. A practical set is booked, rescheduled, checked in, completed, canceled by customer, canceled by salon, no-show, and refunded or paid out. Every screen, notification and report hangs off that list. On Woowlook, cancel and reschedule are first-class states, and a canceled slot returns to inventory immediately.

Double booking is the hardest case. Two customers requesting the same slot at once is a race the server has to settle: one booking wins, never both. Both apps will see the slot as free, so enforce it in the database: for fixed slots, a unique constraint on staff member plus slot rejects the second insert; for variable-length services, PostgreSQL offers an exclusion constraint that rejects any two rows whose time ranges overlap for the same staff member. On Trim, MySQL is the system of record and Redis holds hot availability data, but a slot is only claimed when the API commits the appointment.

Reminders: what the research says

A no-show is an appointment the customer neither attends nor cancels, and reminders are the cheapest fix. Salon no-show rates are not published in peer-reviewed studies the way clinic rates are, so healthcare evidence is the best guide. A 2026 meta-analysis of 10 randomized controlled trials found patients who received a reminder were 11% more likely to attend (risk ratio 1.11). Wording matters: in a randomized trial of 10,111 hospital patients, an SMS stating the cost of a missed appointment cut the did-not-attend rate from 11.1% to 8.4%. In a pediatric clinic trial, adding a text reminder to the usual phone call reduced no-shows from 38.1% to 23.5%. So push and SMS reminders are not optional, and the copy should name what the customer loses by not turning up.

Deposits and no-show fees

A deposit is money the customer commits at booking time and forfeits under the cancellation policy. On a card, it is a hold captured later. In Stripe’s documentation, a PaymentIntent created with capture_method set to manual authorizes the amount without taking it, moves to requires_capture, and an online card authorization is usually valid for 7 days. So for appointments more than a week away, charge the deposit immediately or save the payment method and charge later under the policy. On Trim, deposit and cancellation rules are shown before the customer confirms.

Trim Business app Shop policies screen with a toggle for customer and payment policies and entries for cancellation, deposit, no-show and reschedule policy

Business app: policies attach to the shop and apply to online bookings only

Trim Business app Select payment screen offering Tap to pay on iPhone powered by Stripe, cash, save unpaid and card, with a service total

Business app: card, wallet and cash on one checkout, with up-front payment shown against pay at venue

How do you test a salon booking app before launch?

Test the state machine, not the screens. Write a transition table with every state, every event and the expected result on each surface, then run each row across all three at once. On Trim, the API shipped first and the Flutter apps and React admin were brought up against it in parallel, so every feature was exercised from the customer, owner and admin side before release, with Stripe flows run in test mode. These cases generate support tickets when skipped:

  • A customer cancels after paying: the slot is released and the payment is handled under the stated policy.
  • A staff member becomes unavailable with bookings against them: reassignment or salon-side cancellation, with the customer notified.
  • Two customers request the same slot at once: one booking wins.
  • An off-peak discount cannot be applied outside its window, and a seller withdrawal can never exceed settled earnings.
  • A walk-in is never charged a no-show fee, and a rent-a-chair specialist’s revenue stays invisible to the owner.
  • A reminder sends once per appointment and stops on cancel; a reschedule carries the deposit to the new time instead of charging twice.

How much does it cost to build a salon booking app?

Booking app development cost follows scope: how many surfaces launch together, whether both stores are day-one requirements, and how much policy and payment logic must be production-grade at launch. Sigi does not attach a figure to Trim or Woowlook. The ranges below are typical-scope planning estimates, consistent with Sigi’s mobile app cost guide.

$40k to $80k

Tier 1: single-salon booking app MVP. One customer app, staff-level availability, online payment and reminders, with the salon side in a lightweight web admin.

Source: Typical-scope estimate, not a client invoice

$80k to $180k

Tier 2: customer app and business app on iOS and Android. Adds the salon calendar, walk-ins, per-shop policies, deposits and staff roles. The shape of Woowlook.

Source: Typical-scope estimate, not a client invoice

$150k to $350k+

Tier 3: multi-salon marketplace with an admin panel. Tier 2 plus specialist accounts, wage models and a ledger, coupons, reports and subscription billing. The shape of Trim.

Source: Typical-scope estimate, not a client invoice

On timeline, guides on how to build a salon booking app commonly cite two to three months for a basic product and five to six months with a business app and integrations. Treat those as market figures. From a shipped build, the App Store currently lists Trim at version 1.0.33 and Trim Business at version 2.0.9, with in-app subscription tiers published between $6.99 and $12.99 a month.

Should you build a booking app or use Fresha, Booksy or Vagaro?

For a single shop, an established platform is usually the right answer. As of 11 September 2026, Booksy lists $29.99 per month plus $20 per month per additional team member, charges no commission on clients you find yourself, and takes 30% of a first visit booked through its Boost feature. Vagaro lists a United States base price of $23.99 per month for one bookable calendar, $10 per month per additional calendar up to seven, and a branded app at $100 per month plus a $100 one-time fee. Fresha prices an Independent plan for one bookable team member, a Team plan per bookable team member and a custom Enterprise plan, localized by country, plus a one-time marketplace new-client fee on a marketplace-sourced client’s first completed appointment.

Those platforms switch on in an afternoon, bring a customer marketplace and need no engineering team. A custom build wins in four situations: you want a branded product where you own the customer relationship and the data; your rules do not fit the platform, such as three staff pay models on one ledger; your economics should not scale per chair; or you are the platform, running a marketplace of many salons. Trim was built for the first three reasons and became the fourth, which is why it needed its own admin panel and subscription billing.

How to build a salon booking app step by step

The build order Sigi follows for a salon, spa or barber booking app. Each step fixes decisions the next depends on.

  1. Discovery and user journeys for every role: customer, salon owner, staff member, rent-a-chair specialist and platform admin.
  2. Define the booking state machine and its transition table, including who can trigger each event and what each side is told.
  3. Model availability per staff member with hours, blocked time and service durations, and decide how the database rejects a double booking.
  4. Design the policy model: deposits, cancellation windows, no-show fees and reschedule rules, attached to the shop.
  5. Ship the API and data model first, so the three surfaces can be built against it in parallel.
  6. Build the business app before marketing the customer app; a salon has to be set up before anyone can book it.
  7. Wire payments, reminders and push, and run the Stripe flows end to end in test mode.
  8. Run the transition table across all three surfaces, then take both apps through store review.

On the mobile framework, Trim ships both apps to iOS and Android from one Flutter codebase, which keeps them on one release cycle. Read Flutter versus React Native before choosing.

Related reading

Read the Trim salon and barber booking app case study and the Woowlook salon and spa booking app case study. The same two-sided pattern applied to pickup and return is in how to build an on-demand laundry app, and the mechanics behind a multi-salon product in how to build a multi-vendor marketplace. For budgets, see how much it costs to build a mobile app. If you are planning a booking product, see Sigi’s on-demand app development practice or talk to Sigi with your service list and staff schedule.

Questions this guide answers

It depends on how many surfaces launch together. Guides ranking for this query commonly cite two to three months for a basic booking app and five to six months once a business app, multi-location support and integrations are added. Treat those as market figures. Sigi Technologies quotes timelines from a written brief, after the user journeys and the booking state machine are agreed.

Yes, if the salon side is more than a calendar. Owners need today’s bookings, walk-ins, policies, staff and payouts, none of which a customer should see. Trim ships Trim Business as a separate app from the same Flutter codebase, and Woowlook ships a separate seller app, so each store listing reaches the audience searching for it.

The server settles the race, not the app. Availability is held in one place, every calendar view reads from it, and the database rejects a second booking for the same staff member and time through a unique or exclusion constraint. On Trim, a slot is only claimed when the API commits the appointment, so a customer rebooking and an owner’s drag-and-drop reschedule resolve against the same slot state.

Let each shop decide, and apply the rule to online bookings only. A deposit can be a card hold captured later: Stripe’s manual capture authorizes the amount, and an online card authorization is usually valid for 7 days, so for appointments further out charge the deposit up front or save the payment method. Trim shows each shop’s deposit and cancellation rules before the customer confirms.

A salon booking app is the customer-facing product for finding a salon, choosing a stylist and reserving a slot. A salon management app is the salon-facing product for the calendar, staff, policies, payments and reports. In a complete platform such as Trim or Woowlook they are two apps over one shared booking model, so a change on either side reaches the other in real time.

Yes, if the data model allows it. Woowlook asks at sign-up whether the business is a salon with employees or an individual stylist. Trim models a rent-a-chair specialist as their own shop, so a freelance barber keeps private finances while customers still find them under the host shop’s profile. Deciding this before the schema is written is what makes both cases work.