Skip to main content
Offers are the salon’s promotions: a percentage off a service, a flat rupee discount, or a bundle of services at one combo price. They are displayed to customers and applied at the counter when the customer pays.
Offers are applied at checkout by a receptionist — they are not self-service during booking. This keeps control of discounts with staff and prevents stacking.

What it is

A flexible way to run promotions that drive visits — “20% off all Facials this week”, “₹500 off any Hair Treatment”, or “Hair + Facial + Manicure = ₹2,999”. Customers see the active offers on the /offers page; staff apply the right one when ringing up the bill.

How it works

1

Create

A manager creates an offer in the admin portal, choosing its type, the services it applies to, and a start and end date.
2

Display

While active and within its date range, the offer appears on the public /offers page with its terms.
3

Apply

At checkout, the receptionist applies a single eligible offer to the customer’s booking before taking payment.
4

Expire

When the end date passes, the offer auto-expires via a scheduled background job and drops off the public list.

Offer types

Type: percentageA percentage (1–100) off the linked services.Example: “20% off all Facials”.

Rules

One offer per customer per day and offers cannot combine with gems — an offer and a gems redemption cannot both apply to the same booking. The daily limit is enforced in the database with a unique constraint on customer + date.
A receptionist, at checkout — not the customer during booking. This keeps control of discounts with staff and prevents stacking.
No. Offers are salon only. They do not apply to SPA memberships. See SPA Memberships.
Every offer is date-bound with a start and end date. It auto-activates and auto-expires — the expiry is run by a QStash scheduled job.
Each offer card carries its own terms (e.g. “Valid on weekdays only”), displayed to the customer on the /offers page.
If the salon cancels a booking that had an offer applied, the offer is reinstated for the customer’s next booking rather than being lost.

Loyalty & Offers API

Public active offers plus manager-only offer CRUD.

Loyalty — Gems

Why an offer and gems cannot be combined.

Billing & Invoicing

How an applied offer affects the invoice total.

Data Model

The offer, offer_service, and offer_redemption tables.
Last modified on August 29, 2026