Built to order

Salon Booking App with Stylist Selection and Slot Management

This project builds an Android salon booking app: customers browse 6 services with durations and ₹ prices, pick from 4 rated stylists, and book through a live slot grid built from each stylist's hours at 15-minute granularity. A start appears only if the full service window fits — a 45-minute haircut can never squeeze into a 30-minute gap. Owners get a day timeline with confirm/complete actions, revenue stats and service/stylist management. Kotlin with Jetpack, Room and Firebase. Suitable for B.E./B.Tech final-year projects in Computer Science, IT and Computer Applications.

Android KotlinRoom databaseMaterial 3GlideKotlin Coroutines · FlowFirebase Firestore · AuthAndroid JetpackRetrofit 2Software
Salon Booking App with Stylist Selection and Slot Management — project thumbnail preview
More project photos (2)

The problem

Small salons lose bookings to a familiar mess: phone calls during busy hours, lost paper diaries, colliding appointments — a 45-minute haircut squeezed between two bookings, stylists double-booked over 30-minute gaps. The Salon Booking App with Stylist Selection and Slot Management answers this with one Android app for both sides. Customers browse a fixed menu — haircut, hair spa, glow facial, mani-pedi, global color — each with duration and ₹ price, pick a stylist from rated profiles, and book through a live slot grid that only offers start times where the entire service fits before closing and between existing bookings. Owners get a day timeline of every booking, one-tap confirm/complete/cancel, revenue stats, and screens to manage services, hours and the calendar. The build ships a genuine seeded dataset — 6 services, 4 stylists, 15-minute slot granularity — and the slot engine is real logic, not a mockup: production-grade availability rules.

How it works

End to end, the app works like this: the dataset holds 6 services with fixed durations and ₹ prices, and 4 stylists each with working hours, a weekly off day and a 13:30–14:00 lunch block. When a customer picks a service and stylist, the slot engine generates candidate starts every 15 minutes from opening time, then discards any start where the full service window would overlap a booking or the lunch break, or run past closing — that filtering is the whole availability guarantee. The customer picks a day, taps a free slot, enters name and phone, and the booking saves as pending. The owner confirms it from the day timeline; completing the visit unlocks a 1–5 star rating that feeds the stylist's weighted average. Every edit — a new price, a changed stylist hour — is saved so the grid reflects it immediately. Availability is never hand-authored: the grid is a pure function of hours, durations and bookings.

  1. Services and stylists load from the seeded dataset: 6 services with durations 30–120 minutes and ₹ prices, 4 stylists each with opening/closing times, one weekly off day and the shared 13:30–14:00 lunch block.
  2. The customer searches or filters the catalogue and opens a service; eligible stylists are listed with ratings and today's free-slot counts computed live by the engine.
  3. The slot engine generates start times at 15-minute granularity from the stylist's opening hour; a start is offered only if [start, start+duration] fits before closing and overlaps neither bookings nor the lunch block.
  4. The customer picks a day and a slot, enters name and phone, and the booking is saved with status pending — visible instantly in the owner's timeline.
  5. The owner confirms (or declines) from the day timeline; confirmed bookings count toward the day's revenue and booked-hours stats.
  6. After the visit the owner marks the booking done, which unlocks a 1–5 star rating for the customer; the stylist's average updates as a weighted mean of all ratings.

Tech stack:

  • Kotlin
  • Android Jetpack (ViewModel · LiveData · Navigation)
  • Room database (offline-first cache)
  • Retrofit 2 (REST networking)
  • Firebase Auth · Firestore (customer + owner roles)
  • Material 3 (Material You UI)
  • Kotlin Coroutines · Flow
  • Glide (image loading)
Parameter Value
Services in demo seed 6 services, durations 30–120 min, ₹349–₹2499 (seeded dataset)
Stylists in demo seed 4 stylists, individual hours 10:00–20:00, one weekly off day each (seeded dataset)
Slot granularity 15 minutes between candidate start times (design)
Slot validity rule Start offered only if [start, start+duration] fits before closing and avoids bookings + lunch (implemented logic)
Lunch block 13:30–14:00 daily, blocked for every stylist (seeded)
Booking lifecycle 4 states: pending → confirmed → completed / cancelled (implemented)
Ratings 1–5 stars per completed visit; stylist average = weighted mean (design)
Platform Android 8.0 (API 26) minimum; target SDK 34 (design target)
Deliverable Android Studio source + seeded demo dataset + slot-engine module + report PDF + PPT + viva Q&A

Project features

The app's four most important capabilities are the service catalogue, stylist selection, the duration-aware slot engine, and the owner dashboard. The catalogue lists 6 services with fixed durations (30–120 minutes) and ₹ prices, so customers always know the time and cost before they commit to a booking. Stylist selection shows 4 stylists with specialty tags, live star ratings with review counts, and a count of free slots today — making the choice concrete rather than alphabetical. The slot engine is the technical heart: it generates start times at 15-minute granularity from each stylist's working hours and offers a slot only when the full [start, start+duration] window is free of bookings and the lunch break, so a 45-minute service can never land in a 30-minute gap. Finally, the owner dashboard turns the phone into a reception desk: a day timeline of every booking with confirm/complete/cancel actions, live booking-count and revenue stats, plus management screens for services, stylists and working hours.

  • [Service catalogue with durations and prices] Six seeded services — Classic Haircut ₹349/30 min, Haircut + Beard Grooming ₹549/45 min, Hair Spa Ritual ₹899/60 min, Glow Facial ₹1199/75 min, Mani-Pedi Combo ₹799/60 min, Global Hair Color ₹2499/120 min — with search and category chips (Hair, Skin, Nails) so browsing stays instant.
  • [Stylist selection with ratings] Four stylist profiles with specialties, individual working hours, weekly off days, and live star ratings that update from real post-visit reviews; each card shows how many free slots the stylist has today.
  • [Duration-aware live slot grid] The engine generates candidate starts every 15 minutes from the stylist's hours and offers only starts where the full service window fits before closing and around existing bookings and the 13:30–14:00 lunch block — the core scheduling logic, fully implemented.
  • [Booking with cancel and reschedule] Customers confirm with name and phone; bookings move through pending → confirmed → completed, and upcoming bookings can be cancelled or rescheduled to any newly valid slot, which frees the old window immediately.
  • [Post-visit stylist ratings] Completing a visit unlocks a 1–5 star rating; the stylist's average is recomputed as a weighted mean and reflected on every card in the app.
  • [Owner day timeline] Every booking across all stylists appears on one scrollable timeline with customer name, phone, service, price and status, plus one-tap Confirm, Mark done, Decline and Cancel actions.
  • [Manage services, stylists and hours] The owner edits service prices and durations, stylist opening/closing times and weekly off days, and salon hours; the slot grid re-generates from the new data immediately.
  • [Push reminders for appointments (optional)] Firebase Cloud Messaging can nudge customers an hour before their slot. Offered as an optional add-on; not part of the base build.

What is included

  • Complete Android Studio project source (Kotlin, MVVM, customer + owner roles)
  • Seeded demo dataset: 6 services, 4 stylists and realistic booking patterns used in the concept build
  • Slot-engine module with the duration-aware availability logic, documented for the viva
  • Project report PDF (architecture, slot-generation algorithm, data model, methodology)
  • PPT presentation for final review
  • Viva Q&A preparation document (MVVM, Room/Firestore data modeling, scheduling logic, role-based access)

Limitations & prerequisites

  • The build ships with a seeded demo backend; a real deployment needs the buyer's own Firebase credentials plus the included setup guide.
  • Payment is pay-at-salon in the base build — no online payment gateway integration; that is future scope.
  • Owner accounts are created manually in the shipped build; there is no automated salon onboarding or KYC.
  • The scope is one salon; multi-branch support with per-branch stylists is future scope.
  • Ratings are simple weighted averages with no spam or fake-review detection.
  • Browsing works offline from the cache, but creating, rescheduling or cancelling a booking needs connectivity.

Frequently Asked Questions

How does the app avoid double-booking a stylist?

It cannot double-book by construction. The slot grid is generated from three inputs — each stylist's working hours, all saved bookings, and the daily lunch block — and a start time is offered only when the entire [start, start+duration] window is free. There is no manual slot list to keep in sync; availability is always computed fresh.

Can a long service really never fit into a short gap?

Correct — that is the core guarantee. A 45-minute haircut+beard needs a full 45-minute window, so a 30-minute gap between two bookings simply produces no offered start times covering it. The concept build's slot note shows the rule live: only starts whose whole service fits before closing and before the next booking appear.

What can the salon owner do in the app?

Everything a reception diary does: a day timeline of every booking across stylists, one-tap confirm/decline/complete/cancel, live counts of bookings, revenue and booked hours, plus management screens to change service prices and durations, stylist hours and off days, and salon opening hours.

Where is the data stored?

The concept build uses a seeded dataset persisted in the browser's local storage, which is why bookings survive a refresh. The Android build follows the same model with Room as the on-device store and Firestore in the cloud; pointing it at a real backend needs the buyer's own Firebase project, covered by the setup guide.

How do the stylist ratings work?

Only completed visits can be rated, 1–5 stars. Each new rating is folded into the stylist's weighted average and the updated score appears on every stylist card immediately, so ratings are always earned from real appointments, not typed in.

Is this project suitable for a final-year project?

Yes — for Computer Science, IT and Computer Applications programs. It demonstrates a real scheduling algorithm (duration-aware slot generation), role-based flows, offline-first storage and a two-sided product, all defensible in a viva.

Components & software requirements
  • Kotlin
  • Android Jetpack (ViewModel · LiveData · Navigation)
  • Room database (offline-first cache)
  • Retrofit 2 (REST networking)
  • Firebase Auth · Firestore (customer + owner roles)
  • Material 3 (Material You UI)
  • Kotlin Coroutines · Flow
  • Glide (image loading)
Delivery information

Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.

Support terms

Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.

Download free synopsis (PDF)

Enter your name and WhatsApp number — the synopsis PDF downloads immediately. We may send occasional project updates on WhatsApp; no spam.

Get a quotation