# 2. Set up your store

All operational configuration — hours, services, spaces, team, menu — belongs to a \*\*store\*\*. If you have several stores, \*\*first check which one is active\*\* in the store switcher (top-right) before touching settings.

# Introduction

All operational configuration — hours, services, spaces, team, menu — belongs to a **store**. If you
have several stores, **first check which one is active** in the store switcher (top-right) before
touching settings.

> 🧭 **Recommended order:** (1) agenda type → (2) hours → (3) services → (4) spaces, if applicable →
> (5) staff → (6) menu, if applicable → (7) booking window. Do it in this order and everything fits.

---

# 2.1 Store details

1. Go to **Settings → Stores** and click **Edit** on the store.
2. Fill in **name, address, phone, email**.
3. **Map location (optional, recommended):** click the map or drag the marker to the store's door. The
   coordinates make the address **clickable** on the public page — the customer taps it and Google Maps
   opens with directions.
4. **Active/Inactive:** an inactive store stops appearing on the public page and the switcher but keeps
   its history. Handy for a temporary closure.
5. Save.

> 📸 **`02-store-edit.png`** — Store edit page with the map picker (Leaflet/OpenStreetMap).
![Edit store](images/02-store-edit.png)

---

# 2.2 Choose the agenda type

This is the **most important setting**: it controls how bookings are structured and how the agenda is
drawn. Go to **Store setup → Agenda**.

| Type | Best for | The agenda shows | The booking asks for |
|---|---|---|---|
| **Per table (TimeSlot)** | restaurants | horizontal Gantt, 1 row per table | table + party size |
| **Per professional (ByStaff)** | barbershops, salons, clinics | columns per professional | service + professional |
| **Per space (ByLocation)** | courts, rooms, escape rooms | columns per space | space (+ party size) |
| **Per service (ByService)** | treatments with no fixed pro | columns per service | service (pro optional) |

1. Click the right **card**.
2. Set:
   - **Slot duration** (e.g. 15 min barbershop, 30 min clinic, 60 min restaurant or padel) — the time
     "grid".
   - **Minimum lead time** — minutes before a slot where an online booking is still accepted (e.g.
     120 = no booking for less than 2 h away).
   - **Daily cap** of online bookings (leave empty = no cap).
   - **Max days ahead** — how far out one can book (e.g. 60 = two months).
3. Save.

> 📸 **`02-agenda-type.png`** — Agenda page with the four agenda-type cards and the config fields.
![Agenda type](images/02-agenda-type.png)

> ⚠️ **Changing the agenda type** on a running store changes how existing bookings are displayed. Avoid
> switching with a full agenda.

---

# 2.3 Opening hours

1. Go to **Store setup → Hours**.
2. For each weekday, toggle **Open**.
3. Set **one or more ranges** per day. For a **lunch break**, create two ranges (e.g. `09:00–13:00`
   and `15:00–19:00`) with **+ Period**. The gap between them is closed.
4. Save. The system **validates** and blocks overlapping ranges.

> 📸 **`02-hours.png`** — Weekly grid with two ranges on a day (lunch break).
![Hours](images/02-hours.png)

> 💡 Bookable times (online and backoffice) come from **these** hours, intersected with each staff
> member's hours (2.8) and existing conflicts.

---

# 2.4 Special hours and holidays

For one-off dates that differ from the normal hours (holidays, events):

1. Go to **Store setup → Special hours** and click **Add**.
2. Pick the **date**.
3. Mark **Closed** (the store takes no bookings that day) **or** set **special ranges** (e.g. mornings
   only).
4. Optional: add a **note** (e.g. "Christmas").
5. Save.

Special hours **override** the normal hours on that date — in the backoffice agenda and the public page
(closed days appear blocked to customers).

> 📸 **`02-special-hours.png`** — Adding a special day (closed / custom hours) with a note.
![Special hours](images/02-special-hours.png)

---

# 2.5 Services

1. Go to **Store setup → Services** and click **New service**.
2. Fill in:
   - **Name** and **description**.
   - **Duration** (minutes) — how much room the service takes in the agenda and the possible times.
   - **Price**.
   - **Color** — used to identify the service in the agenda (pick a gradient).
3. **Groups (optional):** create groups (e.g. "Hair", "Beard") and assign services; drag by the handle
   to **reorder** services and groups. Groups show as headers in the public booking and the backoffice
   selectors.
4. Save. You can mark a service **inactive** to hide it without deleting it.

> 📸 **`02-services-list.png`** — Grouped services with colors, duration and price, and the "New service" button.
![Services](images/02-services-list.png)

> 📸 **`02-service-edit.png`** — Editing a service (duration, price, color, group).
![Edit service](images/02-service-edit.png)

> 💡 **Scenario (clinic):** create "Consultation" (30 min), "Physiotherapy" (45 min), "Nutrition" (30
> min). Different durations make each service take the right space in the agenda.

---

# 2.6 Spaces / tables

Applies to **Per table** and **Per space** agendas. Go to **Store setup → Spaces**.

1. Click **New space** and set:
   - **Name** (e.g. "Table 4", "Court 1", "Egypt Room").
   - **Capacity** — max people (optional).
   - **Price** and **pricing mode:** *per reservation* (fixed) or *per person* (price × party size).
   - **Exclusive booking:** on = a single reservation takes the space for the slot (court, room); off =
     several reservations share up to the capacity (e.g. a communal bar table).
2. Optional: organize into **groups** and drag to reorder.

> 📸 **`02-spaces.png`** — Spaces/tables list with capacity, price and the exclusivity indicator.
![Spaces](images/02-spaces.png)

> 💡 **Scenario (restaurant):** create M1–M6 (exclusive, capacities 2–8) and "Bar" (shared, 4 seats).
> 💡 **Scenario (padel):** create "Court 1–4" (exclusive, €24/reservation).
> 💡 **Scenario (escape room):** create the rooms priced **per person** with capacity (e.g. 6/4/8).

---

# 2.7 Staff

In **Staff → New staff member**:

1. **Name** and **color** (used in the agenda to tell the member's column apart).
2. **Role (access):**
   - **Employee** — bookings only; no settings access; locked to the assigned store.
   - **Store admin** — manages the store's settings (hours, services, agenda); can't touch the business
     or other stores.
   - **Business admin** — full access (like the owner).
3. **Stores:** assign to one or more stores. Per store, set the **service scope**: *All*, *Selected*
   (pick the list) or *None* (assigned but takes no bookings there).
4. **Services:** if the scope is *Selected*, pick which services the member performs. No services
   selected = performs all.
5. **Login account (optional):** link an **email + password** so the member can sign in. You can unlink
   later.
6. Save.

> 📸 **`02-staff-edit.png`** — Staff edit: role, assigned stores, service scope and login account.
![Staff](images/02-staff-edit.png)

> 💡 The owner is automatically created as a staff member with access to all stores — so on the Free
> plan (1 professional) the owner is that professional.

---

# 2.8 Staff working hours (per store)

Sets which hours each member works — useful when they differ from the store's.

**Example:** the store is open **09:00–22:00**, but Ann only works **09:00–14:00**. Without a custom
schedule the system would offer Ann's slots all day; with it, only 09:00–14:00.

1. In the staff edit page, turn on **"Use custom schedule"**.
2. **Each assigned store** gets a **7-day grid**. For each day mark **Working** and set the ranges
   (multiple per day supported, e.g. morning + afternoon).
3. Save.

**Important rules:**

- A member's available slots are the **intersection** of the store hours with their schedule. If you
  set hours **wider** than the store's, only the hours where **both** overlap count.
- Anyone assigned to **2 or more stores is required** to use a custom schedule (they must state the
  hours in each store). The toggle is **on and locked**.
- In the **day agenda**, the hours when the member **isn't at the store** are **shaded** in their
  column; dragging a booking into those hours is **rejected**.
- In **manual create/edit**, booking outside the member's hours shows an **alert** and **blocks** the
  save.

> 📸 **`02-staff-schedule.png`** — "Use custom schedule" on, with a 7-day grid per store.
![Staff schedule](images/02-staff-schedule.png)

> 📸 **`02-agenda-block.png`** — A staff member's column in the day agenda with off-hours shaded.
![Agenda block](images/02-agenda-block.png)

---

# 2.9 Menu

For businesses with a menu (e.g. restaurants), go to **Store setup → Menu**:

1. Create **categories** (e.g. "Starters", "Mains", "Desserts").
2. Inside each, create **items** (name, description, price, **image** — uploaded and cropped in the
   editor).
3. Drag by the handle to **reorder** categories and items.

The menu can be shown on the public page (chapter 4) and is available for any agenda type.

> 📸 **`02-menu.png`** — Menu management: categories and items with photos.
![Menu](images/02-menu.png)

---

# 2.10 Booking window (summary)

The fields in 2.2 control **when** a customer can book online:

- **Minimum lead time** — avoids "right now" bookings.
- **Max days ahead** — how far out you accept.
- **Daily cap** — limits bookings per day.

On the current day, times already past (and within the minimum lead) drop off automatically.

---
**Next:** [Manage appointments](03-appointments.md).