Appointments Reference Public

Services & Staff

End-user documentation for the ERPat Appointments module (spa / salon / clinic booking).

Guide version: r1 Module version: 1.0.0 Updated: 2026-07-22 Estimated time: 16 min 2 views
Catalog & Setup

Services & Staff

The Services page is the catalog that powers everything else in Appointments. Before anyone can book — online or at the front desk — you define your menu of bookable treatments here: what they are, how long they take, what they cost, who can perform them, and whether customers can see them online.

Manager Front desk Admin
ℹ️
Where this lives Open it from the left menu at Appointments → Services (route /appointment_services). Customers never see this admin screen — they only see its downstream effect on the Online Booking Portal: which services and providers appear there. The Appointments module must be enabled first, and you need the Services permission to open the page.

Overview

The Services catalog answers three operational questions that drive the whole module:

  • What can a customer book? — the list of services (treatments) on your menu.
  • How long does each one take? — the duration (plus buffers), which lets the calendar find free time slots and block the schedule correctly.
  • Who is qualified to perform it? — the providers (staff) assigned to each service. Only assigned staff are offered when booking that service.

The two panels on one page

The Services page is split into two lists side by side, each a table with its own Add button and refresh:

Services (left, larger panel)

Your treatment menu. Columns: Name, Category, Duration ("N min"), Price, Providers (count of assigned staff), Visibility (Public/Private), Status (Active/Inactive), and an actions gear. Sorted by Name A→Z. Header has an Add Service button (plus-circle).

????
Service Categories (right, narrower panel)

A grouping layer such as "Hair", "Nails", "Facials" that organizes and color-codes the menu. Columns: Name (with a color swatch), Services (count in that category), Status, and an actions gear. Header has a small Add Category button.

Per-row actions

Each row exposes small action icons (hidden if you lack the matching permission):

IconOnDoesPermission
✏️ PencilService & CategoryEdit — opens the modal pre-filled. (Clicking the Name does the same.)Services · Update
???? UsersService onlyAssign Staff — map which providers can perform this service.Services · Update
✖ Times / XService & CategoryDelete (soft delete) after a confirm prompt.Services · Delete
????
Do categories first The service Category dropdown only lists Active categories. Create your categories before your services and you won't have to re-edit services later to slot them into a group.

Service categories (SOP)

A service category is a grouping label used to organize and color-code the menu. It has its own name, color, sort order, and Active/Inactive status. Categories are ordered by Sort ascending, then by Name.

SOP · Create a service category

Actor: Manager

  1. Open the Services page

    Left menu → Appointments → Services.

  2. Click "Add Category"

    In the right-hand Service Categories panel, click the Add Category button (plus-circle). The category modal opens blank.

  3. Enter a Name

    Required — for example Hair, Nails, or Facials. The field is autofocused.

  4. Pick a Color

    Use the color picker (defaults to brand teal #1d97a6). This becomes the small swatch shown next to the category name in the list and helps color-code the menu.

  5. Set Sort (optional)

    A number (min 0, default 0). Lower numbers appear first. Use it to control the order categories are listed in.

  6. Leave Status = Active, then Save

    Click Save (check-circle). Only Active categories appear in the service Category dropdown, so keep new ones Active. You'll see the toast "Record saved." and the new row — with its color swatch — appears immediately without a page reload.

Editing & deleting categories

Edit: click the category name or the pencil icon, change the fields, Save — the row refreshes in place.

Delete: click the times/X icon and confirm. This is a soft delete — the row disappears from the list but the data is retained.

⚠️
Deleting a category does not move its services Services that referenced a deleted category keep their internal link but display "-" in the Category column until you edit each one and pick a new category. Deleting a category never deletes or reassigns its services.

Creating & editing services (SOP)

A service is a single bookable treatment with a name, duration, price, optional category and color, buffers, visibility, and a set of qualified providers. Add or edit one from the service modal.

SOP · Add a new service

Actor: Manager or Front desk (with create permission)

  1. Click "Add Service"

    In the left Services panel header, click Add Service (plus-circle). The service modal opens blank with the cursor in the Name field.

  2. Enter the Name

    Required — the display name customers and staff will see, e.g. Gel Manicure.

  3. Pick a Category (optional)

    Select2 dropdown; the first option is blank (- Category -). Only Active categories appear. Leave blank if the service has no group.

  4. Set the Duration (minutes)

    Required. Defaults to 30, minimum 5, in steps of 5. This drives calendar slot sizing — see Duration & buffers explained below.

  5. Set Buffers — Before / After (optional)

    Two side-by-side number fields (min 0, default 0) for setup and cleanup padding. Only fill these in if the service needs turnaround time.

  6. Enter the Price

    Placeholder 0.00. Type numbers or a formatted currency string — the system stores the numeric value. Blank saves as 0.

  7. Choose a Color and confirm Status

    The color picker defaults to teal #1d97a6 and helps distinguish the service on the calendar. Status defaults to Active.

  8. Decide Public vs Private

    The Public checkbox is checked by default. Leave it checked to show the service on the online booking page; uncheck it for internal-only (Private) services. See Public vs private services.

  9. Add a Description (optional), then Save

    A 3-row textarea for extra detail; saved as empty if blank. Click Save (check-circle). The new row is injected into the Services table and you see "Record saved."

  10. Assign at least one provider

    Back on the row, click the Assign Staff (users) icon and add the providers who can perform it — otherwise the service is unbookable. See Assigning providers/staff.

Editing a service

Click the service name or the pencil icon to reopen the modal pre-filled. Change any fields and Save — the row updates in place with a "Record saved." toast. Every change here (Public flag, Active status, provider assignment) is exactly what changes what customers see online.

SOP · Retire a service without losing its history

Actor: Manager

  1. Edit the service

    Open it from the Name or pencil icon.

  2. Set Status to Inactive (or just uncheck Public)

    Choose Inactive to pull it out of use entirely, or leave it Active and simply uncheck Public to remove it only from online booking while keeping it available at the front desk.

  3. Save

    The service is retained for reports and past appointments, but no longer offered.

????
Prefer Inactive/Private over Delete When a service has been used (or you might bring it back), set it Inactive or Private instead of deleting it, so past appointments and reports keep a clean reference. Delete is a soft delete that simply hides it from the catalog.

Duration & buffers explained

Duration and buffers are what let the availability engine block the calendar correctly and offer only truly free start times. Understanding them prevents impossible back-to-back bookings.

How duration works

Duration is how long the service takes, in minutes. It sizes the appointment block on the calendar and is used to compute which start times are still open. It is clamped to a 5-minute minimum, and a blank or zero duration falls back to 30 minutes rather than saving 0.

How buffers pad the schedule

A buffer is turnaround padding attached to the service: Buffer Before reserves setup time before the service starts, Buffer After reserves cleanup/turnover time after it ends. When the availability engine checks for conflicts, it pads busy intervals on both the existing appointment and the new one, so two services can't overlap into each other's prep or cleanup time.

ℹ️
Worked example A 45-minute service with a 10-minute Buffer After effectively occupies 55 minutes of a provider's time. The next appointment for that provider can only start once both the service and its buffer have finished — the calendar will not offer an overlapping slot.

The spacing between the start times customers are offered is governed separately by the Slot interval setting on the Settings page (e.g. every 15 minutes). Duration and buffers decide how much time each booking consumes; the slot interval decides how the remaining free time is divided into offer-able start times.

⚠️
Set realistic buffers for turnover-heavy services If a chair, room, or piece of equipment genuinely needs cleaning between clients, put that time in the buffers. Otherwise the calendar will happily book impossible back-to-back slots that leave no turnover time.

Related: appointments excluded from availability calculations include Cancelled and No Show. See the Calendar page for how slots surface at booking time.


Assigning providers/staff (SOP)

A provider is the staff member who performs a service. Assigning staff to a service is what makes it bookable: only staff explicitly assigned to a service are offered when a customer or front-desk agent books it. A service with zero providers is effectively invisible to booking.

SOP · Assign staff to a service

Actor: Manager

  1. Open Assign Staff

    On the Services list, find the service and click the users icon on its row. The modal header reads "Assign staff to service: <service name>".

  2. Select the providers

    In the Providers multi-select (Select2), every active staff user is listed by full name. Currently-assigned staff are already selected. Add the newly-qualified staff and/or remove anyone who no longer performs the service.

  3. Save

    Click Save (check-circle). The Providers count on the service row updates immediately and you see "Record saved." The service is now bookable with the assigned staff.

????
Saving replaces the entire set The Assign Staff modal replaces the whole provider set for that service in one save — it doesn't just add. If you open it, accidentally clear a selection, and Save, those providers are removed. Behind the scenes the system soft-deletes removed pairs and inserts genuinely new ones, so re-adding someone you previously removed is handled cleanly with no duplicates.

"Any available provider" — how it flows from here

When a booking is made without pre-selecting a provider — the Any available provider option — the system pools every staff member assigned to the service and offers their combined open times. Picking a specific slot then assigns whichever provider that slot belongs to. That pool is exactly the list you set here, so the Assign Staff mapping directly controls both named-provider bookings and "any available" bookings. Leaving the provider blank at booking time on the Calendar is what triggers this pooled behavior.

⚠️
Who appears in the provider picker The Providers dropdown lists only staff users who are active and not deleted — regular customers and inactive or deleted staff never appear. If a provider is later deactivated, their saved assignment is retained internally but hidden from the count and the picker.

Public vs private services

Visibility controls whether a service reaches the customer-facing online booking page.

Public PublicShown on the public online booking page. New services are Public by default. A green "Public" badge in the Visibility column.
Private PrivateNOT shown online; bookable internally by front-desk staff only. A grey "Private" badge.
????
Two conditions to appear online A service must be both Active and Public to show on the public booking page — and it needs at least one assigned provider to produce bookable slots. A public, active service with zero providers still won't generate any online times.

SOP · Make a service bookable online (public)

Actor: Front desk or Manager

  1. Edit the service

    Open it from its Name or the pencil icon.

  2. Confirm Status is Active

    An Inactive service will not appear online even if Public.

  3. Check the Public checkbox

    This adds the service to the public booking page. Then Save.

  4. Assign at least one active provider

    Click the users (Assign Staff) icon, select one or more active providers, and Save. Without a provider the service produces no bookable slots even when public and active.

????
Verify on the portal After publishing, open your public booking URL (/appointments/book/{company-slug}) to confirm the service and its providers now appear. See the Online Booking Portal page for the customer's view.

A note on resources

A resource is a bookable room, chair, or piece of equipment that can be reserved alongside the provider for an appointment; only active resources are selectable. Resources are chosen on the appointment itself rather than configured on this Services catalog screen — see the Calendar & Appointments page for how a resource is attached to a booking.


Field reference

Every field across the three modals — Service, Category, and Assign Staff — with its meaning and gotchas.

Service fields

FieldRequiredMeaning & notes
NameYesDisplay name of the bookable service (e.g. "Gel Manicure"). Autofocused; validated client- and server-side.
CategoryNoOptional group; drives grouping and the category color. Select2 dropdown listing only Active categories; first option is blank ("- Category -"). Blank saves as none.
Duration (minutes)YesHow long the service takes; sizes the block and finds slots. Min 5, step 5, defaults 30. Blank/zero falls back to 30. Must be numeric.
Buffer Before (minutes)NoSetup pad reserved before the service. Min 0, default 0. Affects slot spacing so appointments don't overlap.
Buffer After (minutes)NoCleanup/turnover pad reserved after the service. Min 0, default 0.
PriceNoDefault price charged. Placeholder 0.00; accepts a formatted currency string (stored as a number). Blank saves as 0.
ColorNoColor used to distinguish the service (e.g. on the calendar). HTML color picker; defaults to teal #1d97a6.
StatusNoActive / Inactive. Defaults Active. Inactive shows a grey badge and is not offered.
PublicNoCheckbox — shows the service on the public booking page. Checked by default on a new service. Unchecked = Private (internal only).
DescriptionNoFree-text detail. 3-row textarea; saved as empty if blank.

Category fields

FieldRequiredMeaning & notes
NameYesDisplay name of the category (e.g. "Hair"). Autofocused; validated client- and server-side.
ColorNoSwatch shown before the category name in the list. HTML color picker; defaults #1d97a6. Rendered as a small square swatch.
SortNoOrdering weight. Number, min 0, default 0. Categories order by Sort ascending, then Name.
StatusNoActive / Inactive. Defaults Active. Only Active categories appear in the service Category dropdown.

Assign Staff field

FieldRequiredMeaning & notes
ProvidersNoThe staff qualified to perform the service. Multi-select of active staff by full name. Saving replaces the entire set (add/remove in one save); an empty selection removes all assignments. Only assigned staff are offered at booking.

List badges & swatches

Public PublicService is shown on the public online booking page.
Private PrivateService is not on the booking page; bookable internally only.
Active ActiveService or category is in use. Only Active categories appear in the service Category dropdown.
Inactive InactiveRecord is retained but not treated as available in normal use.
Category color swatchA small rounded square in the category's chosen color, shown just before its name. Defaults to teal #1d97a6.
Providers countA centered integer in the Providers column — how many staff are assigned. 0 means no one can perform it yet.

Who can do what (permissions)

CapabilityPermissionWhat it gates
View the catalogServicesOpening the Services page. Without it the page is not accessible (and the module must be enabled).
CreateServices · CreateThe Add Service and Add Category buttons.
UpdateServices · UpdateThe pencil (Edit) and users (Assign Staff) icons and their save paths.
DeleteServices · DeleteThe times/X (soft-delete) icon.
ℹ️
Admin bypass Users flagged as administrators bypass all of the above checks. If a button or icon is missing for a non-admin, it's a permission gap, not a bug.

Tips & gotchas

????
The #1 gotcha: zero providers = unbookable A service with no assigned providers is effectively unbookable, online or off. The Providers count staying at 0 is the tell. Always assign at least one provider right after creating a service. Scan the Providers column periodically as a quick health check.
Handy checks in the list

The Providers column flags services no one can perform (0). The category's Services count tells you how many services live under it — worth a glance before you delete a category.

????
Use color deliberately

Distinct category colors and per-service colors make the calendar and the menu easy to scan at a glance.

Why isn't my service showing on the online booking page?

Three conditions must all be true: the service is Active, it is Public (checkbox ticked), and it has at least one assigned provider. A public, active service with zero providers produces no bookable slots. Fix whichever is missing, then re-check the portal.

Why can't I pick a category on a new service?

The Category dropdown only lists Active categories. If the one you want is Inactive (or doesn't exist yet), it won't appear. Activate or create the category first — see Create a service category.

I deleted a category and now some services show "-" for Category. What happened?

Deleting a category does not reassign its services. They keep their internal link, but because the deleted category is dropped from the join, the Category column resolves to "-". Edit each affected service and pick a new category to fix the display.

I opened Assign Staff and now a provider is gone — why?

The Assign Staff modal replaces the whole provider set on Save. If a selection was accidentally cleared before saving, those providers were removed. Re-open the modal, re-add them, and Save — the system handles re-adding a previously-removed person cleanly (no duplicates).

A staff member isn't in the Providers picker.

The picker lists only active staff users (by full name), not customers and not inactive or deleted staff. If a provider was deactivated after being assigned, their assignment is retained internally but hidden from both the count and the picker.

I entered 0 (or left Duration blank) — why did it save as 30?

Duration enforces a 5-minute minimum (min 5, step 5) and a blank or zero value falls back to 30 minutes rather than saving 0. This prevents a zero-length booking that the calendar couldn't size.

My Price didn't save the way I typed it.

Price is a free-text field that passes through currency un-formatting. Type numbers or a currency string (e.g. 1,200.00), not words. Blank saves as 0.

Does deleting a service remove it permanently?

No — deletes here are soft deletes. The row disappears from the lists but the data is retained. If a delete fails you'll see "This record cannot be deleted." When a service has history, prefer setting it Inactive or Private instead of deleting.

Why aren't my back-to-back slots offered?

Buffers pad both appointments. A service with a Buffer After reserves that cleanup time, so the next slot for the same provider can't start until the buffer clears. That's intentional — see How buffers pad the schedule. If the padding is too generous, reduce the buffer.

Is this the same as the public booking page?

No. This is an admin/staff screen only, separate from the public portal at /appointments/book/…. What you change here — the Public flag, Active status, and provider assignments — is precisely what changes what customers see online.


Related pages

Was this guide helpful?

Report a content problem