Recipes by business
How to model a barbershop, an aesthetics clinic, a medical office, a restaurant and deliveries.
Each recipe matches a ready-made template you can pick during onboarding.
Barbershop
Each barber is an exclusive staff resource with their own schedule. One group, customer_choice with a round_robin fallback.
{
"name": "Haircut",
"duration_min": 30,
"step_min": 15,
"buffer_after_min": 5,
"price_cents": 5000,
"requirements": [{ "resource_group_id": "grp_barbers", "units": 1 }]
}
Aesthetics
Professionals, machines and rooms are separate resources. A service requires all three at the same time, so the scarcest one (usually the machine) limits the agenda.
{
"name": "Laser hair removal",
"duration_min": 45,
"buffer_after_min": 10,
"price_cents": 18000,
"deposit_cents": 5000,
"requirements": [
{ "resource_group_id": "grp_professionals", "units": 1 },
{ "resource_group_id": "grp_lasers", "units": 1 },
{ "resource_group_id": "grp_rooms", "units": 1 }
]
}
Clinic
Doctor plus office, per location (one workspace per location). Health data is sensitive: the assistant never asks about symptoms, and the intake form collects only what scheduling needs.
{
"name": "Appointment",
"duration_min": 30,
"buffer_after_min": 10,
"intake_form": { "type": "object", "properties": { "insurance": { "type": "string" } } },
"requirements": [
{ "resource_group_id": "grp_doctors", "units": 1 },
{ "resource_group_id": "grp_offices", "units": 1 }
]
}
Restaurant
The dining room is one pooled resource with 40 units (covers) per slot. Duration grows with the party size, and large parties require a deposit.
{
"name": "Table",
"step_min": 30,
"duration_by_units": [
{ "max_units": 2, "duration_min": 90 },
{ "max_units": 4, "duration_min": 120 },
{ "max_units": 20, "duration_min": 150 }
],
"requirements": [{ "resource_group_id": "grp_dining_room", "units": "party_size" }]
}
Table mode (specific tables with minimum and maximum size, and combinations) is on the roadmap.
Deliveries
Each zone is a pooled resource with a capacity per 2-hour window. The zone is selected by postal code, and a cutoff rule closes same-day windows at noon.
{
"name": "Delivery",
"window_mode": true,
"duration_min": 120,
"cutoff_rule": { "same_day_until": "12:00" },
"intake_form": { "type": "object", "required": ["address", "postal_code"] },
"requirements": [{ "resource_group_id": "grp_zones", "units": 1, "select_by": "postal_code" }]
}