Home / Help Center / pos-app-saloon-spa / saloon / Memberships
🪪 saloon

Memberships

Memberships lets you define one or more paid plans (e.g. "Gold Member" — a fee, a discount % off all services, and a validity period) and sell them to specific customers, so that customer automatically gets the plan's discount applied on future visits for as long as the membership is active.

📍 Menu path: Saloon & Spa → Memberships
👤 Who uses it: All roles with the Billing feature enabled

Overview

This page is not saloon-exclusive under the hood — it uses BazaarPOS's generic Membership module (packages/pos-core/src/membership.js), which any product variant can use; the salon app simply surfaces it under the Saloon & Spa menu.

A Membership Plan defines a Name, a one-time or recurring Fee, a Discount % (applied to services at billing) and a Validity in days from the day it is sold.

Selling a membership to a customer creates a time-boxed record: Start Date = today, End Date = today + the plan's Validity Days, Status = ACTIVE. The membership fee itself is not charged at the moment you click Sell — the page explicitly tells you to "collect the fee at billing".

The discount this membership grants is applied later, at the point of sale on the Sales/Billing screen, when that customer is selected and an active (non-expired) membership is found for them — not automatically on this page.

Before You Start

Step-by-Step Guide

1 Create a membership plan

  1. Open Saloon & Spa → Memberships and click "+ New Plan".
  2. Enter Plan Name (required, e.g. "Gold Member"), Fee, Discount % and Validity (days).
  3. Click Create Plan — it immediately appears as a card under "Plans" and becomes selectable when selling.

2 Sell a membership to a customer

  1. Click "Sell Membership".
  2. Search for the customer by name or phone and select them from the results.
  3. Choose the Plan, then click Sell.
  4. A success message reminds you to "collect the fee at billing" — this page does not process any payment itself.
  5. The new membership immediately appears under "Members" with its Start/End date range and an Active/Expired status.
💡 Selling here only creates the entitlement record. Actually collecting the membership fee from the customer (e.g. as a custom line item on a sale) is a separate manual step on the Sales/Billing screen — this page does not create a sale or invoice for the fee.

3 Apply a membership discount at billing

  1. On the Sales/Billing screen, select the same customer — an active membership for that customer (if one exists and has not expired) is picked up automatically by the billing screen and offered as a discount option.
  2. The discount percentage applied is always re-validated server-side against the live membership record at the moment of sale (never trusted from what the browser sends), so an expired or deactivated membership cannot be used even if the billing screen still shows it as an option from stale data.

4 Delete a plan

  1. Click Delete on a plan card and confirm. This removes the plan definition only — any customers who already bought that plan keep their existing membership record with the discount %/dates it had at the time of sale.

Every Field & Button, Explained

Field / ButtonWhat it does
Plan NameRequired. Shown on both the Plans list and, once sold, as the Members list's "plan" label.
FeeThe price of the membership — informational here; you must separately collect it via a sale on the Billing screen.
Discount %The percentage discount this plan grants on services when the member is billed, while the membership is active and not expired.
Validity (days)How many days from the sale date the membership stays active; End Date is computed automatically as sale date + this value.
Members list — StatusShown as "Active" (status ACTIVE and End Date ≥ today), "Expired" (End Date passed), or the raw status value for anything else.

Tips & Best Practices

Troubleshooting & FAQ

I sold a membership but the customer was never actually charged the fee.
This is expected — selling here only creates the entitlement/discount record. You (or the cashier) must still add the membership fee as a charge on that customer's next sale; the page's success toast is a reminder of this, not a bug.
A member's discount isn't applying at billing.
Check the Members list here — if Status shows "Expired" (End Date has passed) the discount is correctly withheld. The billing screen also independently re-validates the membership server-side, so a stale or tampered client-side value cannot force a discount through.
I can't find the customer while trying to sell a membership.
The search only matches existing Customers by name or phone — add them in Customers first if they are new.