Booking System

Appointments,

the Fresha way.

199 AED/ month    |    Includes 1 user   |   +49 AED / extra seat

A complete booking + client-CRM system for salons, clinics, studios, gyms, and any service business. Resources, services, schedules, online booking page, intake forms, memberships, packages, gift cards, loyalty: the lot.

  • Resources (staff, rooms, equipment) + services with duration + price
  • Public booking page at your own URL lets customers book themselves
  • Group classes via capacity > 1 on a resource
  • Memberships, packages, gift cards, loyalty points
  • Intake forms with e-signature, auto-attached before/after appointments
  • No-show rules + automated reminders
booking
01.
Resources & schedules

Whatever can be booked.

Resources are anything customers reserve: a stylist, a treatment room, a yoga teacher, a tennis court. Each has a weekly schedule (split shifts supported), date-specific exceptions (closed for the holiday, half-day on Friday), and a capacity (capacity > 1 enables group classes).

  • Per-resource weekly schedule with split shifts
  • Date-specific overrides (closed / different hours)
  • Capacity > 1 for group classes + courts
  • Per-service prices per resource (Maria charges 200, Ana charges 150)
02.
Public booking page

Your customers, self-service.

Each company gets a tokenised public URL at `/book/:companyId/:key`. Customers pick a service, see real availability across your resources, book, and pay deposit if you require one. No accounts, no friction.

  • Per-company tokenised public URL
  • Pick service → real availability across resources → confirm
  • Optional deposit collection (Stripe / PayTabs / Telr)
  • Client-facing rebrand: your logo, your accent colour
03.
Checkout & payments

A real till for service businesses.

Complete a reservation through the checkout flow: service price + tip + wallet credit + loyalty redemption + gift card. Outputs payment record, posts to Accounting, decrements package/membership sessions, accrues loyalty. Refund flow reverses the whole stack atomically.

  • Tip, wallet, loyalty redemption, gift card on one checkout
  • Atomic refund reverses payment + accrual + redemption
  • Per-staff commission % captured at checkout
  • No-show + late-cancellation rules with auto-charge
04.
Memberships & packages

Recurring revenue + session bundles.

Membership plans (monthly / quarterly / annual) auto-renew AND auto-bill — the nightly renewal cron raises an Invoice keyed `MBR-RENEW-{subId}-CYC-{n}` for every due subscription, idempotent per cycle so re-runs are no-ops. Packages are one-shot bundles (10 sessions, valid 90 days). Both feed the checkout: when a member books, the session is auto-deducted from their bundle.

  • Renewal cron raises Invoice per cycle (no manual chasing of recurring revenue)
  • Package purchases with validity windows + expire-with-breakage journal
  • Service-restricted bundles (this package only covers facials)
  • Per-client wallet + loyalty + gift-card balance on one view
05.
Money in, money out

Wallet, gift card, loyalty — all balanced in the GL.

Every cash-equivalent flow posts the matching journal. Wallet top-up → DR Cash / CR Customer Deposits (2210). Wallet refund (cash-out) drains the liability cleanly. Gift card sold → liability; redeemed → revenue; reservation-cancellation refund reverses the original redeem journal. Loyalty redemption posts as a contra-revenue expense so net revenue stays accurate.

  • Wallet refund / cash-out endpoint (manager-gated + audit-stamped)
  • Gift card refund (reservation cancellation) reverses the redeem journal
  • Per-payment-method PaymentReceived splits at checkout (cash + card + wallet + gift card)
  • Discount-code marketing-cost gross-up (optional per-code)
06.
Multi-location

Per-branch P&L without per-line tagging.

Multi-site operators (salon chains, fitness studios) wire each `BookingLocation` to its own income + cost-centre accounts in the CoA. The reservation invoice handler resolves: BookableResource override → Location override → Product/default. So every branch's revenue lands on its own P&L line automatically — no per-reservation editing.

  • Per-branch incomeAccountId routes revenue automatically
  • Per-branch costCentreAccountId for branch overhead attribution
  • Resource-level override still wins when set (per-staff cost centres)
  • Single-site tenants leave both null — falls through to default revenue
07.
Wellness CRM

Built for repeat customers.

Intake forms (consent, allergies, medical history) auto-attach before the appointment + collect e-signature. Loyalty points accrue on every visit. Birthday cron fires a "happy birthday" message. Reactivation cron pings clients who haven't visited in 60 days. The whole Fresha-style client lifecycle, scripted.

  • Intake forms with conditional logic + signature capture
  • Loyalty tiers (bronze / silver / gold) with per-tier perks
  • Birthday + reactivation + intake-before-trigger crons
  • Per-client messaging thread (SMS + email when adapter wired)
Fresha parity

Everything Fresha does. For 199 AED/month.

The big appointment-booking platforms either charge per-staff (gets expensive fast) or take a cut of every payment (gets expensive faster). NovaCept Booking is one flat module price covering every staff member, every reservation, every gift card. The 12 booking-related entities you'd expect from a "wellness CRM" all ship out of the box.