By the end of this guide, you'll have a service set up with a weekly schedule of bookable time slots and a service widget guests can use to pick a date, pick a slot, and book.
What you'll need
- A Cabintale account
- A clear idea of what you sell, the times it's available, and how many people fit per slot
- ~15 minutes
- One service with basic info (name, currency, time zone)
- A weekly schedule of time slots
- A live service widget with the right slot picker
Place vs. Service: which one are you setting up?
Quick decision tree:
| What you offer | Choose |
|---|---|
| A cabin / hotel room — guests book a check-in / check-out date range | Place |
| A 2-hour cabin tour at fixed times — guests book a specific slot on a specific day | Service |
| A restaurant table at 19:00 — fixed start time, fixed duration | Service |
| A sauna session, 45 minutes, multiple windows per day, capacity of 6 | Service |
| Bike rental for a full day (still nightly-ish) | Place is usually fine; Service if you want strict pickup times |
If your offering has a start time that matters, it's a service.
Step 1: Create the service
Sidebar → Services → Add new service.
Fill in the basics — these mirror Property basics (Property basics) but for a service:
- Title — what guests see ("Sauna session", "Sunset boat tour").
- Description — your notes for now (not yet shown to guests).
- Country / currency / time zone — same chain as places. Time zone matters more than usual here because slot start times are interpreted in it.
- Capacity — the maximum number of people who fit per slot, by default. You can override capacity per individual slot later.
Pick Booking behavior:
- Availability only — guests see when you're available, don't book.
- Accept bookings — they book; you decide instant vs. request.
- Accept payments — they pay to confirm; mode is forced to instant.
Click Create service.
Step 2: Add a time-slot season
Time slots live inside seasons — same idea as seasonal pricing, but the season groups a weekly schedule instead of weekly nightly rates.
On the service detail page, scroll to Availability. If there are no seasons yet, click Add season ("Přidat sezónu").
A season has:
- Name — "General", "Summer", "High season". Whatever helps you.
- Start date (optional) — leave blank to apply immediately.
- End date — pick a fixed date, or use a rolling rule (end of next month, 30/60/90 days, custom days). Same dropdown as the availability window for places.
- Weight — when seasons overlap, higher weight wins. Default starts at 0 (general); add 1, 2, 3 for overrides.
Step 3: Set up the weekly schedule
Inside the season, you'll see a week calendar — Monday through Sunday, with a vertical time axis.
Click an empty time cell to add a slot. Fill in:
- Time range — start and end (e.g. 10:00 → 12:00).
- Title (optional) — e.g. "Morning tour". Helps guests when several slots run on the same day.
- Price — what this slot costs.
- Capacity — how many people can book it. Defaults to the service capacity if you don't override.
Click save. The slot now repeats on that weekday for every date in the season.
The grid has a "Show 06–20" toggle (compact, 6 AM to 8 PM) and "Show full day" (00:00 to 24:00). Pick whichever helps you see your slots without scrolling.

Step 4: Customize the service widget
Sidebar → service → Widgets → click the auto-created widget. Service widgets look slightly different from place widgets:
- Size — vertical, medium (680px), or full width.
- The other settings (mode, background, primary color, language, custom form fields) work exactly like place widgets — see Widget look & feel and Custom booking form.
Copy the embed code (script or iframe) — same flow as Embeddable booking widget. Service iframe defaults to 550px tall.
What guests see
- Calendar — a month view with available days highlighted. Click a date.
- Slot list — the bookable slots for that date appear, each as a button showing the time and price (e.g. "10:00 — CZK 500"). Slots that are full or past the booking deadline appear disabled.
- Booking dialog — name, email, phone, custom fields (whatever you've configured).
- Confirmation — depends on instant vs. request mode (see Instant vs. Request booking).
Capacity matters here. If a slot has capacity 5 and 3 people have booked, it stays available — and the next two guests can book it before it locks.
Booking deadline for slots
The booking deadline on a service is in hours before the slot starts, not the date. So a 14:00 slot with a 2-hour deadline stops accepting bookings at 12:00 the same day.
The cutoff is calculated in the service's time zone — set this correctly in property-basics.md-style basics.
Edge cases
Editing a slot that already has bookings. Existing bookings keep their original time — they're stored as actual times, not pointers to the slot definition. Future guests see only the new slot definition.
Race conditions on the last spot. If two guests click "Book" for the last seat at the same time, Cabintale wraps the availability check + booking creation in a database transaction. One succeeds; the other gets "No available slots" and can pick another time.
Past slots. Past dates don't show in the public widget. Past bookings remain visible in the admin so you can review history.
Manifests. Services have a printable manifest (PDF or shareable link) showing today's or this week's bookings — covered in the manifests guide (coming soon).
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Slots aren't appearing in the widget | The service is inactive, or the season's date range doesn't include today, or there are no slots defined for the relevant weekday | Check service status, season start/end, and that you've added slots for the weekdays you want |
| A slot shows as unavailable when there should be capacity left | Booking deadline has passed for that slot's start time, or capacity is reached | Verify the slot's deadline and check Bookings to count existing bookings |
| Calendar shows wrong "today" | Browser time zone differs from service time zone (esp. around midnight) | The widget uses the service's time zone — confirm it's correct in service basics |
| Two guests booked the same slot somehow | Shouldn't happen — Cabintale guards against this. If it did, it's likely a state-mismatch from a stale browser tab | Resolve manually in admin (cancel one); contact support if it recurs |
| The service widget looks too narrow | The size is set to vertical | Edit the widget, change size to medium or full width, save |
Related guides
- Embeddable widget basics — Embeddable booking widget
- Widget look & feel — Widget look & feel
- Booking deadline — Booking deadline
- Instant vs Request booking — Instant vs. Request booking
- Custom booking form — Custom booking form