Home / Help Center / pos-app-saloon-spa / saloon / Calendar
🗓️ saloon

Calendar

Calendar is a visual, single-day time grid — one column per staff member, 30-minute rows from 9:00 AM to 8:00 PM — where you click any open slot to book an appointment directly into that stylist's schedule, and see every existing booking as a coloured block sized to its duration.

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

Overview

The grid has one column per staff member from your Staff list; if you have no staff configured, it falls back to a single "Unassigned" column.

Each existing appointment renders as a coloured block (colour-coded by status, matching the Appointments page) starting at its booked time and spanning enough 30-minute rows to cover its duration — customer name, service and amount are shown inside the block.

Clicking any empty cell opens a quick-book dialog pre-filled with that staff member's name and the clicked time slot; you only need to add Customer Name, optional Phone and a Service (which auto-fills Duration and Amount).

The grid only shows one day at a time (default: today) — use the date picker to move to a different day.

Before You Start

Step-by-Step Guide

1 Book directly from the calendar grid

  1. Open Saloon & Spa → Calendar and, if needed, pick a different Date.
  2. Find an empty (unfilled) cell in the staff column and time row you want, then click it.
  3. The quick-book dialog opens with Staff and Time already set — fill in Customer Name (required), Customer Phone and Service (required; auto-fills Duration/Amount).
  4. Click Book — the new appointment appears immediately as a coloured block in that slot.

2 Book into the "Unassigned" column

  1. If your Staff list is empty, every slot lives under a single "Unassigned" column.
  2. Booking here still creates a normal appointment, but with no staffUserId — the Stylist name is set to "Unassigned" and no double-booking conflict check runs for it (conflict checking requires a real staff member).
💡 Because there is no staffUserId, two customers can be quick-booked into the exact same Unassigned slot without any warning — check the grid visually before booking into a slot that already looks occupied.

3 Read an existing appointment on the grid

  1. Each block shows the customer name, service name and amount; its colour matches the appointment's current status (Booked/Confirmed/In Progress/Done/Cancelled), the same palette used on the Appointments page.
  2. Blocks are not clickable for editing here — to change status, reassign staff or delete an appointment, use the Appointments page.

Every Field & Button, Explained

Field / ButtonWhat it does
Date pickerSwitches the entire grid to a different single day; defaults to today on load.
Staff columnsOne column per staff member in your Staff list, or a single "Unassigned" column if no staff exist.
Time rowsFixed 9:00 AM–8:00 PM range in 30-minute increments; not configurable from this screen.
Appointment blockRendered at its booked start time, sized to span its duration in 30-minute rows; colour reflects status.
Quick-book dialog — Customer Name / Phone / ServiceSame required-field rules as the Appointments page's New Appointment form, but Staff and Time are pre-filled from the clicked cell and cannot be changed in this dialog.

Tips & Best Practices

Troubleshooting & FAQ

I clicked Book and got a conflict error even though the cell looked empty.
The grid renders from the appointments loaded when the page opened — if another booking was made for that exact slot moments earlier by someone else, the grid may not have refreshed yet. Change the date and back (or reload) to refresh, then retry.
Two different customers ended up booked into the same Unassigned time slot.
The Unassigned column has no staffUserId, so the server-side double-booking check (which is keyed to a specific staff member) never runs for it. Assign real staff members in your Staff list to get conflict protection.
I don't see all my staff as columns.
Columns come directly from GET /staff — if someone is missing, check that they exist in your Staff list; this page does not let you add staff directly.
I want to change an appointment's time by dragging it.
This grid is view/quick-book only — there is no drag-to-reschedule. Open the appointment on the Appointments page and edit it there (or delete and re-book).