> For the complete documentation index, see [llms.txt](https://docs.diro.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.diro.app/en/getting-started/worked-examples.md).

# Worked Examples

The fastest way to understand DIRO is to see how real businesses map themselves onto the product. The two examples below were deliberately chosen because **their capacity models are opposites**.

## Example 1 — Class studio (Mōra)

A yoga and mat pilates studio, one branch, open every day 08:00–20:00. Fixed scheduled classes, one instructor leads the whole group.

### Categories

Two categories, kept separate: **Yoga** and **Mat Pilates**.

The reason isn't aesthetics, it's pricing. Yoga walk-in is Rp 50,000 with packages at Rp 185,000 / Rp 360,000 / Rp 540,000; Mat Pilates walk-in is Rp 60,000 with packages at Rp 225,000 / Rp 440,000 / Rp 650,000. If they were combined into one category with one shared package pool, cheaper yoga credit could be spent on the more expensive pilates class.

{% hint style="info" %}
Split categories when pricing differs and you sell packages. If there's one package for everything, one category is enough.
{% endhint %}

### Services

Eight classes, all **90 minutes**, **capacity 20 per slot**:

Basic Yoga · Vinyasa · Hatha Yoga · Hatha Flow · Hatha with Wheel · Inversion · Arm Balance · Mat Pilates

Every class also accepts additional participants on one booking — one person is already included, up to four maximum, and each additional participant is charged that class's walk-in price and **also counts against capacity**. A booking for 4 people takes up 4 of the 20 seats.

### Resources

**One group: `Instructor`**, containing four items — Elma, She-Nie, Sevia, Shafa. The group holds **people**, not rooms.

Its mode is **shared**, because one instructor leads the whole class. Capacity 20 comes from the schedule slot, not from the number of instructors.

{% hint style="danger" %}
If this group were set to **per item**, every class would be limited to 4 people — the number of instructors that exist. This is the most expensive mistake in this product, because it looks like "classes filling up fast" and not like a misconfiguration.
{% endhint %}

All four instructors are also registered as **staff** so they can log into the portal. The two registrations stand on their own — see Resources: Providers & Rooms.

### Schedule

A recurring weekly schedule, **31 slots per week**, from 07:30 to 18:45, each 90 minutes, capacity 20.

Because the mode is shared, every slot lists who is teaching. Instructors not teaching that slot are marked **inactive** for that slot — otherwise, customers see all four names show up on every class.

### Packages

Six visit-based memberships, all valid for **30 days**:

Yoga — 4 classes Rp 185,000 · 8 classes Rp 360,000 · 12 classes Rp 540,000

Mat Pilates — 4 classes Rp 225,000 · 8 classes Rp 440,000 · 12 classes Rp 650,000

### Event

One separate event: a three-day yoga trip with one ticket type and a quota of 4 participants, with its own shareable page.

***

## Example 2 — Therapist clinic (Sense)

Reflexology and massage, **two branches** with different menus at each. Not classes — one therapist serves one customer, throughout opening hours.

### Services

Treatments with several duration tiers, not fixed class slots. Example: Urban Massage 60 minutes Rp 199,000; Signature Massage 60 minutes Rp 215,000 with a 90-minute tier at Rp 275,000, and at one branch a 120-minute tier as well.

Each branch has its own menu because its service list is genuinely different.

### Resources

**One group: `Therapist`**, containing eight items — Agnes, Efan, Kia, Melinda, Muiz, Putri, Reva, Yuri — each with its own weekly shift (morning, mid, afternoon).

Its mode is **per item**, because one therapist serves one customer at a time. That hour's capacity is the number of therapists currently active.

This business used to have two groups containing the same people (`Therapist` and `Practitioner`), which made the storefront show two filters with identical lists. The fix: merge into one group, and the old group was **deactivated**, not deleted, so past bookings stayed intact.

### Add-ons

Premium mask, disposable shorts, extra drinking water, extra tea.

These are **not** provider-kind resources — they have no schedule and don't occupy a slot, they only add to the price. They were once mistakenly registered as regular resources and, as a result, didn't appear at checkout, because the add-on selector on the checkout page reads the **Additional Items** list, not the resource list.

***

## Comparison

|                     | Class studio                        | Therapist clinic                      |
| ------------------- | ----------------------------------- | ------------------------------------- |
| Schedule shape      | Fixed class slots, recurring weekly | Open hours, split by service duration |
| Resource group      | `Instructor` — 4 people             | `Therapist` — 8 people                |
| Capacity mode       | **Shared**                          | **Per item**                          |
| Capacity comes from | Number on the schedule slot (20)    | Number of active therapists (8)       |
| Add-ons             | None                                | Yes, as Additional Items              |
| Branches            | One                                 | Two, with different menus             |

## How to choose your model

Answer one question: **does one service provider serve many customers at once?**

```mermaid
flowchart TD
  Q{"Does one person serve<br/>many customers<br/>at the same time?"}
  Q -->|"Yes — class, workshop, tour"| S["Shared mode<br/>capacity from the schedule slot"]
  Q -->|"No — one-on-one"| P["Per item mode<br/>capacity from item count"]
  P --> P2{"What's the limit:<br/>people or rooms?"}
  P2 -->|"People"| P3["Group holds<br/>the providers"]
  P2 -->|"Room / equipment"| P4["Group holds<br/>each room unit"]
  P2 -->|"Both"| P5["Two groups,<br/>both per item"]
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.diro.app/en/getting-started/worked-examples.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
