Appointment Calendar
Taking bookings, booking a session from a membership, moving bookings, cancelling and marking no-shows — and what the calendar deliberately does not do.
13 min read · Updated 25 Oct 2026
On this page
The calendar is where bookings live: who is coming, when, for what, and with whom. It is shared across your whole store, so the front desk on the web and the tablet at the counter are looking at the same day.
What it is not is a reminder system. Nothing here contacts your customer — read Reminders below before you build a process around it.
Needs the Appointments & Bookings add-on (₱400 per branch each month). It is also in the Beauty Pack (₱1,099 a month), the Sports & Venue Pack (₱999 a month) and the Everything Bundle (₱2,999 a month). See Plans & add-ons.
Booking a session from a membership also needs Customer Memory & Promos (₱300 per branch each month), since every member is a customer on file. The Beauty Pack and the Everything Bundle include both add-ons; the Gym Pack includes Customer Memory & Promos but not appointments.
Finding it
| Where | Called | Notes |
|---|---|---|
| Web, service business | Appointments, under SERVICES | /app/appointments |
| Web, Food & Beverage | Bookings, under DINING | Same page, different label and wording |
| Mobile app | The Appointments tab | Only shown when the add-on is active |
If the link is missing from your sidebar, see the note about the SERVICES group
in Bookable services — the short version is that
Retail stores do not get it built for them, and you reach the page by typing
/app/appointments.
The calendar
Four views, switched from the buttons above the grid:
| View | Shows |
|---|---|
| Day | One day, split into a column per court, per staff member, or per table |
| Week | Seven days side by side. This is the view you land on |
| Month | A month of blocks |
| List | The next 30 days as a plain list |
Day view is the one that splits into columns, and what the columns are
depends on what you book against. Courts and rooms win if you have any, then
tables, then staff — the button relabels itself Day · courts, Day · tables
or Day · staff so you can see which. Clicking an empty column pre-fills that
court, table or person on the new booking.
The grid runs from 6am to 11pm in 30-minute rows and opens scrolled to 8am. A booking earlier than 6am or later than 11pm still exists — it just is not drawn, so use List view to find it.
Above the grid: Today, arrows to step back and forward, an All Branches filter when you have more than one branch, and an All Partners filter on a services business. Below it is a colour key for the seven statuses.
Each block reads customer name · service, or customer name · membership plan for a session booked from a membership, and Walk-in when no customer is attached. On the mobile app each card also carries a payment badge — Paid, Part-paid, Bal ₱250 or Refunded — read from the sale the booking was rung up on. An unpaid booking shows no badge at all.
Making a booking
Press New Appointment (or New Booking), or click an empty slot.
| Field | Required | Notes |
|---|---|---|
| Book for | — | Service or Membership. Only shown when both are possible; see Booking a session from a membership |
| Partner | No | Optional. Shown on a services business while the Partners switch in Settings → Features is on. Hidden for a court or room rental |
| Service | On a services business | Rental services are marked · rental in the list. Not shown when booking for a membership |
| Customer | For a membership booking | Otherwise blank means Walk-in. Search by name, phone or email, or press New customer to add one without leaving the booking. Both need the Customer Memory & Promos add-on |
| Membership | For a membership booking | One of the customer's active memberships |
| Branch | Yes | Which branch the booking is at |
| Start Time | Yes | Date and time |
| End Time | Yes | Must be after the start |
| Source | — | Staff, Phone or Online. Staff by default |
| Party Size | Food & Beverage only | Number of guests |
| Deposit Amount | — | Records a figure only. See Bookable services |
| Table | If you have tables | Food & Beverage. Picking a table clears the resource |
| Resource | If you have resources | A court, room or chair. Required for a rental service |
| Notes | No | Free text |
Press Create. A retail store — one with neither Partners nor Queue switched on — only has to fill in the branch and the two times, so the calendar doubles as a simple diary.
The mobile app's booking form is deliberately shorter: a 30-minute time stepper,
a duration chip (30m, 1h, 1h 30m or 2h), service, staff, customer. It
has no notes field, no deposit field and no party size, so a booking taken on
the tablet cannot carry those. It also books services only: the phone and
desktop apps cannot book a session from a membership.
Bookings must start now or later. A start time in the past is refused with "The start time must be now or in the future." Rescheduling is not checked the same way, so an existing booking can be dragged back into the past.
Booking a session from a membership
A booking can take a session from the customer's membership instead of a service, the way a gym or PT studio books a member's "8 sessions" pack. This is done on the web dashboard.
- Press New Appointment and set Book for to Membership.
- Pick the Customer. Their active memberships load into Membership, each with what is left, e.g. Elite · 5 left · 2 booked · until a date. A customer with only one is picked for you.
- Set the times, and a Partner if you use them, then press Create.
Book for is offered once your store has Customer Memory & Promos and at least one membership plan, while the Memberships switch in Settings → Features is on. Food & Beverage bookings never offer it. If the Services switch is off, every new booking is a membership booking and the choice is not shown. A customer with no active membership gets "No active membership for this customer. Sell one at the POS or enroll them under Memberships first."
What happens to the session follows the booking's status:
| Status | The session |
|---|---|
| Booked, Confirmed | Held, not used. A pack cannot carry more upcoming bookings than it has sessions left. A booking stops holding once its end time has passed |
| Arrived, In Progress or Completed, whichever comes first | Used, once, and recorded as a visit on the membership. If the member already checked in with their QR code that day, that visit is linked instead, so they are not charged twice |
| Cancelled or No Show before they arrived | Nothing is used and the hold is released. To charge a no-show anyway, use Log Visit on the membership |
Once the session has been used, the booking stays on that membership: the customer and the membership can no longer be changed. Cancelling it or marking it No Show afterwards does not give the session back. Use Extend on the membership to add one. See Memberships.
A time-based membership can be booked the same way. It has no sessions to hold, but its end date still applies, and marking the booking Arrived records a visit.
The calendar refuses a membership booking, and says why, when:
| Message | Meaning |
|---|---|
| "…'s … membership is no longer active. Renew or extend it first." | Expired or cancelled |
| "…'s … membership expires on …, before this session. Extend it or pick an earlier date." | The session is after the membership's end date |
| "…'s … membership has no sessions left." | Session pack, nothing left |
| "The last session on …'s … membership is already booked." or "All … remaining sessions on …'s … membership are already booked." | Every session left is held by an upcoming booking |
| "That membership belongs to a different customer." | The customer and the membership don't match |
Marking the booking Arrived is refused the same way if the pack has no sessions left or has expired by then. Extend the membership, or take the membership off the booking, to check them in.
Where a booking's time is anchored
Every time in Kassly is Philippine time (Asia/Manila). This is fixed for the
whole platform — there is no timezone setting on your store profile, and none
per branch. A booking typed as 4:00 PM is 4pm in Manila, and it reads as 4pm to
everyone in your store.
Two consequences worth knowing:
- A store outside the Philippines will see its bookings shifted, and there is no setting to correct that.
- Days end at midnight Manila time. If you set a late-night cutover for your sales reporting, the calendar ignores it: 1am belongs to the new day here.
Booking statuses
| Status | Means | Set by |
|---|---|---|
| Booked | Taken, not yet confirmed | The default for a new booking |
| Confirmed | The customer has confirmed | Confirm |
| Arrived | They are in the shop | Arrived on the web, Check in on mobile |
| In Progress | The work has started | Start on the web, Start service on mobile |
| Completed | Done | Complete, or automatically when the sale is paid on mobile |
| Cancelled | Called off | Cancel |
| No Show | Did not turn up | No Show |
The buttons sit in a Quick Actions row inside the booking, and only the moves that make sense from the current status are offered. Once a booking is Completed, Cancelled or No Show, the row disappears — those three are the end of the line, and the mobile app says so outright: "This booking is completed — no further actions."
Moving a booking
Drag a block to reschedule it, and drag its bottom edge to make it longer or shorter. In Day view, dropping it into a different column also reassigns the court, table or staff member. You get Appointment moved on success and a plain error if the new slot clashes.
You can also open the booking and edit the times by hand. Everything on the form stays editable — customer, service, partner, resource, notes — for the whole life of the booking, with one exception: once a membership booking has used its session, its customer and membership are fixed.
Cancelling, and no-shows
Cancel marks the booking cancelled. It is not deleted: it stays on the calendar in grey and stays in your history, which is what you want when a customer argues about it later.
Cancelling is Owner and Manager only. A cashier sees the Cancel button and gets a permission error when they press it. They can book, check in and start work — just not cancel. If your front desk runs on the Cashier role, that call has to come from a manager.
No Show is a separate status and does exactly one thing: it labels the booking. Nothing is charged, no deposit is kept, nothing is counted against the customer's record, and there is no no-show report. The slot is released for booking again.
A cancellation reason can be stored against a booking, but no screen offers you a box to type one, so in practice cancellations carry no reason. Put it in Notes before you cancel if you need the record.
Reminders
Kassly does not send appointment reminders. No SMS, no email, no push notification — not to the customer, and not to your staff. Nothing is sent when a booking is created, confirmed, moved or cancelled either.
The in-app tooltip on the Appointments page claims reminders are included. They are not. That description is wrong, and it is the one thing on this page most likely to cost you a no-show. Ringing your customers the day before is still a phone call somebody has to make.
There is also nothing that flags an overdue booking. A 10am appointment still sitting on Booked at 11am looks identical to one at 5pm.
Turning a booking into a sale
A booking holds no money. The sale happens at the counter, in the mobile app — the web app has no working POS screen. See Making a sale.
On the mobile app, tapping a booking gives you the route through:
| Action | What happens |
|---|---|
| Check in | Marks the booking Arrived |
| Start service | Marks it In Progress |
| Open tab | Moves the booking to In Progress and opens the POS with the service already in the cart |
| Open tab (start meter) | For a court or room: starts the rental clock and opens the POS with the tab loaded. See Rentals |
If the booking has no service attached, Open tab refuses with "No service on this booking" — a booking made as a plain diary entry has nothing to sell, and neither has a session booked from a membership, which was paid for when the membership was sold. Marking a membership booking Check in or Start service in the app uses its session, the same as on the web.
Once the sale is paid, the booking's payment badge follows the sale: Paid, Part-paid, a remaining balance, or Refunded if the sale is later voided. That link is set for you and cannot be edited by hand.
On the web there is no send-to-POS button at all. Mark the booking In Progress and ring the service up on the terminal.
Double-booking
Two rules are enforced when a booking is saved, both of them properly locked so two people booking at the same moment cannot slip past each other:
- One partner, one place at a time. Any overlap is refused with "This partner already has an appointment during this time slot."
- A resource cannot be booked past its capacity. A room with capacity 1 gives "This resource already has a reservation during this time slot."; one with capacity 4 gives "This resource is fully booked for this time slot."
Cancelled and no-show bookings do not block a slot — the time frees up immediately. Tables are always strictly one booking at a time, whatever their seat count says. The details are in Resources and Table management.
The mobile app shows the position live above the booking form — "Available — 2 of 4 booked, 2 left at this time.", "Court 1 is fully booked (4/4)" — and greys the submit button out as Slot unavailable rather than letting you save and fail.
What the app does not carry
Things people reasonably expect a booking system to do, which this one does not:
- Reminders of any kind. Covered above; it bears repeating.
- Repeating bookings. Every week's appointment is entered separately.
- Online self-booking by the customer. Source → Online is a label you set yourself, not a public booking page.
- A waiting list, and no overbooking beyond a resource's capacity.
- A cancellation window or fee. Cancel is always allowed and always free.
- Anything charged on a no-show, including a deposit.
Working offline
The mobile app can take a booking with no signal. It saves locally, shows a Syncing badge, and uploads when the connection returns; a failure shows Retry. Retrying cannot create a duplicate — the same booking sent twice is recognised and matched to the one already saved.
Slot checking offline is done against whatever the tablet last downloaded, so two devices booking the same court while both are offline can still collide. The first one to reach the server wins and the second comes back as a conflict.
Who can do what
| Action | Owner | Manager | Cashier |
|---|---|---|---|
| See the calendar | Yes | Yes | Yes |
| Create a booking | Yes | Yes | Yes |
| Reschedule or edit a booking | Yes | Yes | Yes |
| Check in / start / complete | Yes | Yes | Yes |
| Mark a no-show | Yes | Yes | Yes |
| Cancel a booking | Yes | Yes | No |
| Create courts, rooms and chairs | Yes | Yes | No |
Staff on the Staff role cannot open the calendar at all. See Users and roles.