Catalog Management
The Catalog section is where you configure all the products, resources, and settings that customers can book. This comprehensive guide covers managing products, variants, resources, add-ons, schedules, labels, and participant types.
Overview
The catalog is the foundation of your booking system. Before customers can book anything, you need to configure:
- Sites: Physical locations where activities take place
- Products: Bookable activities or services
- Variants: Different configurations of products (pricing, duration, resources)
- Resources: Physical items needed for bookings (rooms, equipment, staff, items)
- Add-ons: Optional extras customers can add to bookings
- Schedules: When products are available for booking
- Labels: Special conditions or restrictions for time slots
- Participant Types: Age groups or categories for pricing
Sites
Sites represent physical venues or locations where your activities take place.
Creating a Site
Required Information:
- Site Name: Display name for the site
- Timezone: IANA timezone (e.g., "Europe/Helsinki")
- Address (optional): Physical address
- Contact Information (optional): Phone, email
Site Configuration:
- Each site has its own timezone setting
- Sites can have multiple products
- Each site operates independently
- Multi-site businesses can manage all sites from one account
Managing Sites
Common Operations:
- Create new site locations
- Edit site details
- Configure site-specific settings
- Deactivate sites (preserves history)
Site Settings:
- Default business hours
- Holiday calendars
- Site-specific policies
- Resource allocations
- Google Tag Manager container ID (for analytics tracking)
Google Tag Manager Integration
Each site can have its own GTM container ID for analytics and conversion tracking. This allows different physical locations to use separate GTM configurations.
Setting up GTM:
- Create a GTM container at tagmanager.google.com
- Copy the container ID (format:
GTM-XXXXXXX) - Update the site via the Admin API:
PATCH /api/v1/admin/sites/:siteId
{ "gtmContainerId": "GTM-XXXXXXX" } - The GTM container will automatically load on customer-facing booking pages for that site
How it works:
- The GTM script loads on product detail, booking, and checkout pages
- All booking funnel events (slot selected, booking started, payment completed, etc.) are automatically pushed to the GTM
dataLayer - Configure triggers and tags within the GTM web interface to route events to Google Analytics, Meta Pixel, or other marketing tools
- Set
gtmContainerIdto an empty string to remove GTM from a site
Key dataLayer events:
| Event | Description |
|---|---|
view_product_detail | Customer views a product page |
view_availability | Customer opens the availability calendar |
select_slot | Customer selects a time slot |
start_booking | Booking hold created |
initiate_payment | Payment process started |
complete_booking | Payment completed successfully |
booking_confirmed | Booking fully confirmed |
Products
Products are the main bookable activities or services you offer.
Creating a Product
Step 1: Basic Information
- Product Name: Name displayed to customers
- Description: Detailed description of the activity
- Duration: How long the activity lasts (in minutes)
- Status: Active or inactive
Step 2: Capacity Settings
- Minimum Party Size: Smallest group that can book
- Maximum Party Size: Largest group that can book
- Base Capacity Rules: Default capacity configuration
- Capacity Pool: If using shared capacity pools
Step 3: Resource Requirements
- Required Resources: Resources that must be allocated
- Resource Sequence: Order and timing of resource use
- Optional Resources: Resources that can be added optionally
Step 4: Policies
- Booking Policy: Auto-confirm or manual confirmation
- Cancellation Policy: Rules for cancellations and refunds
- Reschedule Policy: Rules for changing booking times
- Payment Policy: When payment is required
Step 5: Visibility
- Public Booking: Available to customers
- Admin Panel: Visible in admin interface
- API Access: Available via API
- Mobile App: Available in mobile app
- Hidden: Completely hidden from customers
Step 6: Product Images
- Image Gallery: Upload multiple images for the product
- Cover Image: First image (sort order 0) is used as the cover/thumbnail
- Alt Text: Required for each image (WCAG 2.1 AA accessibility compliance)
- Caption (optional): Additional description for the image
- Drag & Drop Reorder: Rearrange images to set display order
Images are stored securely in Cloudinary with tenant-based folder isolation.
Step 7: Slot Generation
Configure how time slots are generated for this product:
- Slot Policy:
interval(regular spacing, default) orfixed(predefined times) - Slot Interval (interval policy): Minutes between slot starts (default: 30)
- Fixed Slot Times (fixed policy): List of
HH:mmstart times - Setup Time: Buffer minutes before each slot (default: 0)
- Cleanup Time: Buffer minutes after each slot (default: 0)
See Slot Generation for detailed configuration and examples.
Step 8: Advanced Settings
- Lead Time: Minimum advance booking time
- Payment on Arrival: Allow PoA bookings
- Sequence Configuration: Complex resource sequences
Product Configuration Options
Duration:
- Fixed duration (e.g., 60 minutes)
- Duration per participant (calculated)
- Variable duration (based on variant)
Capacity:
- Fixed capacity per slot
- Capacity based on resources
- Dynamic capacity (based on resource availability)
Visibility Settings:
- Hide from public booking (maintenance mode)
- Schedule availability (available_from, available_until)
- Site-specific visibility
Product Status
Active: Product is available for booking Inactive: Product is hidden but not deleted Draft: Product is being configured (not yet available)
Deposits & Partial Payments
A product can require a deposit (partial booking fee) to confirm, with the balance collected later. Configure this in the Pricing tab of the product form via the Deposit Configuration editor.
Enabling Deposits:
- Open the product's Pricing tab
- Toggle Requires deposit on
- Configure the deposit:
| Field | Options | Description |
|---|---|---|
| Type | percentage or fixed | Whether the deposit is a percentage of the total or a fixed money amount |
| Value | number | The percentage (0–100) or the fixed amount |
| Basis | grand total / subtotal | What the percentage is calculated against |
| Offset | hours before the event | When the outstanding balance becomes due (drives the balance-due timestamp) |
| Balance due mode | online_before_event or on_arrival | How the remaining balance is settled (see below). Defaults to online_before_event |
How It Behaves:
- At checkout the customer sees the deposit amount and the remaining balance (e.g. "Pay deposit €36.00 / Pay the rest €84.00 at arrival")
- On payment the booking is confirmed in a partially paid state, recording the actual amount captured and the balance-due time
- Works across Stripe, Paytrail, and group bookings — group deposits split the captured amount across child bookings by their share of the total
- A deposit-later mode lets a product confirm now and collect the full amount later (no upfront deposit)
Balance Due Mode:
Choose where the outstanding balance is settled after the deposit is paid:
| Mode | Behavior |
|---|---|
online_before_event | (Default.) The balance is chased online before the event — the customer gets an emailed payment link and re-pays through the same gateway. Preserves the legacy behavior for existing products. |
on_arrival | The balance is collected in person at arrival through the admin arrival / mark-paid surfaces. No online payment-link reminder is sent, and the confirmation/reminder copy frames the balance as due at arrival. Best for parties and packages where the final amount (attendee count, day-of add-ons) isn't known until the guest shows up. |
When staff confirm arrival for a partially-paid deposit booking, the system now collects only the outstanding balance (grand total − amount already paid) — never the full total — and re-derives the payment status (part_paid → paid) via the shared deposit-aware helper. This holds regardless of balance-due mode.
Balance Reminders:
- For
online_before_eventdeposits, a background scheduler emails a secure payment link to customers with an outstanding balance as the due time approaches on_arrivaldeposits are excluded from this reminder poller — their balance is settled at the venue, so no online payment link is sent- It reminds only — it never auto-charges. See the Notifications guide for reminder delivery
- Reminders are deduplicated (a customer is reminded once per booking)
Validation: clearing the config removes the deposit requirement; a percentage over 100, a negative value, or a negative offset is rejected. Products seeded without a full config are tolerated and behave as "no deposit."
Variants
Variants allow you to offer different configurations of the same product.
When to Use Variants
Common Use Cases:
- Different durations (Standard 60min, Extended 90min)
- Different pricing tiers (Basic, Premium, VIP)
- Different resource requirements
- Different participant type pricing
- Seasonal variations
Creating a Variant
Required Information:
- Variant Name: Descriptive name (e.g., "Standard Session", "Premium Package")
- Description: What makes this variant different
- Price Ruleset: Link to pricing configuration
- Labels: Special labels for this variant
Variant Configuration:
- Each variant can have different pricing
- Variants share the same base product
- Each variant can require different resources
- Variants can have different participant requirements
Variant Examples
Example: Laser Tag
- Variant 1: "Standard Session" (60 min, €20/person)
- Variant 2: "Extended Session" (90 min, €30/person)
- Variant 3: "Premium Package" (60 min + party room, €50/person)
Example: Cooking Workshop
- Variant 1: "Beginner Class" (2 hours, basic ingredients)
- Variant 2: "Advanced Class" (3 hours, premium ingredients)
- Variant 3: "Kids Class" (1.5 hours, child-friendly)
Resources
Resources are physical entities that must be allocated for bookings.
Resource Types
Rooms:
- Physical spaces (party rooms, classrooms, halls)
- Usually have capacity limits
- Often require setup/cleanup time
- Examples: "Party Room A", "Conference Hall"
Equipment:
- Items needed for activities
- Can be shared or exclusive
- May have availability windows
- Examples: "Laser Tag Set 1", "Cooking Station 2"
Staff:
- Personnel required for activities
- Skills/qualifications tracked
- Availability schedules
- Examples: "Instructor - Sarah", "Safety Supervisor"
Vehicles:
- Watercraft, land vehicles, or other transport
- Often have per-unit capacity
- May require operator/driver (link to Staff)
- Examples: "Kayak #3", "Tour Bus", "Pontoon Boat"
Other:
- Consumables, inventory, or anything that doesn't fit the above
- Stock tracking (if enabled)
- Per-participant usage
- Examples: "Safety Waiver", "Equipment Cleaning Kit"
Creating Resources
Required Information:
- Resource Name: Descriptive name
- Resource Type:
ROOM,EQUIPMENT,VEHICLE,STAFF, orOTHER - Site: Which site this resource belongs to
- Base Capacity: How many units/people it supports
- Shared Mode:
EXCLUSIVE,SHARED, orPOOLED
Shared Modes Explained:
EXCLUSIVE:
- Resource can only be used by one booking at a time
- Example: A private party room
- When booked, resource is locked for that time
SHARED:
- Resource can be used by multiple bookings simultaneously
- Example: Common equipment used by multiple groups
- Capacity may be divided across bookings
POOLED:
- Resource is part of a capacity pool
- Bookings draw from pool capacity
- Example: General admission slots
Resource Sequences
Some products require multiple resources in a specific order.
Sequence Example:
1. Room (required, 60 min) - Setup time
2. Equipment (required, 60 min) - Activity time
3. Staff (required, 60 min) - Supervision time
4. Cleaning Item (optional, 15 min) - After activity
Configuring Sequences:
- Define order of resource usage
- Set durations for each resource
- Specify timing (simultaneous or sequential)
- Set optional vs required resources
Resource Groups
Resource groups allow you to organize resources with shared settings and policies.
Understanding Resource Groups
What are Resource Groups?
- Logical grouping of related resources
- Shared default settings and policies
- Simplified bulk operations
- Policy inheritance with override support
Use Cases:
- Group VIP rooms with premium settings
- Group equipment by type
- Apply common policies across resources
- Manage staff by department
Creating Resource Groups
Required Information:
- Group Name: Descriptive name (e.g., "VIP Rooms", "Outdoor Equipment")
- Site (optional): Site-specific group
- Description: What this group contains
Default Settings:
- Default Shared Mode:
EXCLUSIVE,SHARED, orPOOLED - Default Base Capacity: Default capacity for new resources
- Default Resource Type:
ROOM,EQUIPMENT,VEHICLE,STAFF, orOTHER
Group Policies:
Resource groups can define policies that apply to all resources in the group:
{
"bookingPolicy": {
"requireApproval": true,
"maxAdvanceBookingDays": 90,
"autoConfirm": false
},
"maintenancePolicy": {
"autoNotify": true,
"defaultNoticeDays": 7
},
"pricingPolicy": {
"allowOverride": true,
"minPriceMultiplier": 0.8
},
"availabilityPolicy": {
"bufferMinutes": 15,
"cleanupMinutes": 10
}
}
Assigning Resources to Groups
Single Assignment:
- Select resource
- Choose group from dropdown
- Resource inherits group settings
Bulk Assignment:
- Select multiple resources
- Assign all to group at once
- Useful for initial setup
Policy Inheritance
How Policies Work:
- Group defines default policies
- Resources inherit group policies
- Resource can override specific policies
- Effective policy = group + resource overrides
Viewing Effective Policies:
- API returns merged policies for resources
- Clear visibility of inherited vs. overridden settings
- Useful for troubleshooting
Resource Group Examples
Example: VIP Room Group
Group: VIP Rooms
├── Default Capacity: 10 people
├── Default Shared Mode: EXCLUSIVE
├── Policies:
│ ├── Booking requires approval
│ ├── 15 min buffer between bookings
│ └── Allow price overrides
└── Resources:
├── VIP Room A (inherits all)
├── VIP Room B (inherits all)
└── VIP Room C (capacity override: 20)
Example: Equipment Group
Group: Laser Tag Equipment
├── Default Capacity: 1
├── Default Shared Mode: SHARED
├── Policies:
│ ├── 10 min cleanup time
│ └── Auto-notify on maintenance
└── Resources:
├── Laser Gun Set 1
├── Laser Gun Set 2
└── Vest Set 1
Staff Skills
Staff resources can have skills and certifications tracked for skill-based scheduling.
Understanding Staff Skills
What are Skills?
- Certifications or qualifications
- Required for certain activities
- Can have expiration dates
- Enable skill-based matching
Use Cases:
- CPR certification for activities
- Language skills for tours
- Equipment operation licenses
- Safety certifications
Creating Skills
Required Information:
- Skill Name: Display name (e.g., "CPR Certified", "Spanish Fluent")
- Description: What this skill represents
- Category (optional): Skill category for organization
- Is Certification: Whether this is a formal certification
- Requires Expiry: Whether skill expires
Skill Configuration:
{
"name": "CPR Certified",
"description": "Current CPR/AED certification",
"category": "SAFETY",
"isCertification": true,
"requiresExpiry": true
}
Assigning Skills to Staff
Assigning a Skill:
- Select staff resource
- Add skill with optional details:
- Proficiency Level: 1-5 rating
- Certified At: Date of certification
- Expires At: Expiration date (if applicable)
- Certificate Number: Reference number
Tracking Expiration:
- System tracks skill expiration dates
- Warnings for upcoming expirations
- Expired skills excluded from matching
- Reports on expiring certifications
Product Skill Requirements
Requiring Skills for Products:
Products can specify required skills:
- Skill: Which skill is required
- Minimum Level: Required proficiency (1-5)
- Is Mandatory: Whether booking fails without skill
Example Requirements:
Product: Advanced Climbing Session
Required Skills:
├── Climbing Instructor (level 3+, mandatory)
├── First Aid Certified (level 1+, mandatory)
└── Rescue Training (level 2+, optional)
Skill-Based Availability
How Skill Matching Works:
- Customer selects product
- System checks product skill requirements
- Only staff with required skills shown available
- Expired skills excluded automatically
Availability Filtering:
- Staff without required skills hidden
- Skill level must meet minimum
- Mandatory skills must be present
- Optional skills used for ranking
Skill Management Best Practices
- Track Expirations: Set up expiry monitoring
- Document Requirements: Clear skill descriptions
- Regular Audits: Verify staff certifications
- Training Planning: Use reports to identify gaps
Add-ons
Add-ons are optional extras customers can add to their bookings. Each add-on has a type (what it is) and a mode (how the customer selects it).
Add-on Types (addonType)
The type categorizes the add-on and affects how the system handles it.
| Type | Description | Examples |
|---|---|---|
item | A physical or consumable product | T-shirt, snack pack, souvenir photo |
service | An additional service provided by staff | Professional photography, guided tour |
upgrade | An enhancement to the base activity | Premium equipment, VIP experience |
resource | A time-based bookable resource with its own availability and capacity. Uses the Resource Add-on Configuration system | Party room, VIP lounge, equipment rental |
Selection Modes (mode)
The mode controls how the customer selects the add-on in the booking flow.
| Mode | UI Control | Quantity Behaviour |
|---|---|---|
yesno | Checkbox (on/off) | Always 1 when selected |
free_qty | Numeric input | Customer enters any quantity (subject to min/max constraints via availabilityRules) |
per_participant | Automatic | Quantity is locked to the booking's party size |
Price Types (priceType)
The price type determines how the add-on price is calculated.
| Price Type | Formula | Example |
|---|---|---|
fixed | total = priceAmount × quantity | €50 party room (quantity 1) = €50 |
per_person | total = priceAmount × partySize | €10/person upgrade for 4 people = €40 |
percentage | total = bookingSubtotal × (priceAmount / 100) | 15% of €200 booking = €30 |
Creating Add-ons
Required Information:
- Add-on Name: Display name
- Description: What the add-on includes
- Type (
addonType):item,service,upgrade, orresource - Mode:
yesno,per_participant, orfree_qty - Price Type (
priceType):fixed,per_person, orpercentage - Price Amount: The unit price or percentage value
- Product Association: Which products offer this add-on
- Stock (optional): Inventory tracking
Availability Rules (optional):
| Field | Type | Description |
|---|---|---|
minQuantity | integer | Minimum quantity per booking |
maxQuantity | integer | Maximum quantity per booking |
defaultQuantity | integer | Pre-filled default |
quantityStep | integer | Must be ordered in multiples of this value |
timeRestrictions.availableFrom | string | Available from time (e.g. "09:00") |
timeRestrictions.availableUntil | string | Available until time (e.g. "17:00") |
timeRestrictions.daysOfWeek | integer[] | Available on these days (0=Sun, 1=Mon, …) |
Add-on Images (optional):
- Image URL: URL to an image representing the add-on
- Image Alt Text: Description for accessibility (WCAG 2.1 AA compliance)
Images help customers visualize add-ons during booking. The image appears alongside the add-on name and description in the booking flow.
Add-on Configuration:
- Link to products that can include this add-on
- Set pricing rules
- Configure availability
- Set stock limits (if using inventory)
Add-on Examples
Party Room Add-on:
- Type:
resource, Mode:yesno, Price type:fixed - Price: €50
- Duration: 2 hours
- Available for: All laser tag products
Equipment Upgrade Add-on:
- Type:
upgrade, Mode:per_participant, Price type:per_person - Price: €10 per person
- Description: Premium equipment set
- Available for: Adventure activities
Souvenir Photo Add-on:
- Type:
item, Mode:free_qty, Price type:fixed - Price: €15 per photo
- Max quantity: 5 per booking
- Available for: All products
Resource-Based Add-ons
Resource-based add-ons are a special type of add-on that allows customers to book time-based resources (like party rooms, VIP lounges, or equipment) alongside their primary activity.
How Resource Add-ons Differ from Regular Add-ons
| Aspect | Regular Add-ons | Resource-Based Add-ons |
|---|---|---|
| Inventory | Stock count (integer) | Time-based availability |
| Availability | Stock > 0 | Resource free during time window |
| Duration | N/A (instant item) | Specific time window (e.g., 2 hours) |
| Capacity | N/A | Max persons per resource |
| Scheduling | N/A | Must be contiguous with activity |
Use Cases
Resource-based add-ons are ideal for:
- Party Rooms: Book a private room before or after the main activity
- VIP Lounges: Exclusive lounge access with selectable duration
- Equipment Rentals: GoPro cameras, premium gear for activity duration
- Extended Facilities: Meeting rooms, catering areas
Creating a Resource Add-on Configuration
Step 1: Create the Add-on
First, create an add-on with type "RESOURCE":
- Add-on Name: Display name (e.g., "Party Room")
- Type: Set to RESOURCE
- Description: What the resource includes
Step 2: Link to a Resource
Create a Resource Add-on Configuration that links the add-on to a physical resource:
Required Information:
- Resource: Which physical resource to book
- Add-on: The add-on being configured
- Duration Mode: How duration is determined
- Pricing Mode: How pricing is calculated
- Timing Options: When the add-on can be booked
Duration Modes
FIXED Duration:
- Admin sets a single duration (e.g., 2 hours)
- Customer cannot change duration
- Best for: Party rooms with standard booking length
Duration Mode: FIXED
Fixed Duration: 120 minutes
SELECTABLE Duration:
- Admin provides list of options (e.g., 60, 90, 120 minutes)
- Customer chooses from available options
- Best for: VIP lounges with flexible booking
Duration Mode: SELECTABLE
Selectable Durations: [60, 90, 120]
CUSTOM Duration:
- Customer enters duration within min/max range
- Optional step increment (e.g., 15-minute intervals)
- Best for: Equipment rentals by the hour
Duration Mode: CUSTOM
Minimum: 30 minutes
Maximum: 240 minutes
Step: 15 minutes
Pricing Modes
FLAT Pricing:
- Fixed price regardless of duration
- Best for: Party room with fixed booking fee
Pricing Mode: FLAT
Flat Price: €75.00
PER_HOUR Pricing:
- Price multiplied by hours
- Handles fractional hours
- Best for: VIP lounges charged hourly
Pricing Mode: PER_HOUR
Hourly Rate: €50.00
PER_PERSON Pricing:
- Price multiplied by party size
- Best for: Per-participant facility fees
Pricing Mode: PER_PERSON
Per Person Rate: €10.00
PER_PERSON_HOUR Pricing:
- Combined person and time pricing
- Best for: Equipment rental per person per hour
Pricing Mode: PER_PERSON_HOUR
Per Person Hour Rate: €5.00
Timing Options
Configure when the resource can be booked relative to the main activity:
Allow Before:
- Resource can be booked before the activity starts
- Example: Pre-activity lounge access
Allow After:
- Resource can be booked after the activity ends
- Example: Post-activity party room
Allow During:
- Resource can be booked overlapping with activity
- Example: Equipment rental during activity
Buffer Times:
- Buffer Before: Setup time needed before resource use
- Buffer After: Cleanup time needed after resource use
- Prevents back-to-back bookings if needed
Allow Before: Yes
Allow After: Yes
Allow During: No
Buffer Before: 15 minutes
Buffer After: 15 minutes
Capacity Settings
Max Capacity:
Override the resource's default capacity for this add-on configuration:
- If not set, uses resource's base capacity
- Useful for different booking types (e.g., party vs. meeting)
Resource Base Capacity: 30 people
Add-on Max Capacity: 20 people (override for parties)
Resource Add-on Examples
Example 1: Party Room (Fixed 2-Hour)
Resource: Party Room A
Add-on: Party Room Package
Duration Mode: FIXED (120 minutes)
Pricing Mode: FLAT (€75.00)
Timing: After activity only
Buffer: 15 min before, 15 min after
Max Capacity: 20 people
Example 2: VIP Lounge (Selectable Duration)
Resource: VIP Lounge
Add-on: VIP Upgrade
Duration Mode: SELECTABLE (60, 90, 120 minutes)
Pricing Mode: PER_HOUR (€50.00/hour)
Timing: Before, during, or after activity
Buffer: None
Max Capacity: 10 people
Example 3: GoPro Rental (Activity Duration)
Resource: GoPro Camera Set
Add-on: GoPro Rental
Duration Mode: FIXED (matches activity)
Pricing Mode: FLAT (€25.00)
Timing: During activity only
Buffer: None
Max Capacity: 1 per booking
Customer Booking Flow
When a product has resource add-ons available:
- Selection: Customer sees available resource add-ons during checkout
- Time Window: Customer selects a time window (before/after/during activity)
- Availability Check: System verifies resource is available
- Pricing: Price calculated based on duration and pricing mode
- Confirmation: Resource allocation created alongside main booking
Post-Booking Management
Customers can modify resource add-ons after booking (before the activity date):
- Add: Select new resource add-ons
- Remove: Cancel unwanted resource add-ons
- Change Time: Move to a different time window
Price differences are calculated automatically.
Conflict Resolution
If a resource becomes unavailable between hold and confirmation:
- Detection: System identifies the conflict
- Notification: Customer is informed of the issue
- Options:
- Select an alternative time window
- Proceed without the resource add-on
- Cancel and return to booking
Best Practices
- Set Appropriate Buffers: Allow time for setup/cleanup
- Clear Descriptions: Explain what's included
- Realistic Capacity: Don't oversell resource space
- Test Availability: Verify time windows appear correctly
- Consider Pricing: Match pricing to value delivered
Schedules
Schedules define when products are available for booking.
Schedule Types
Recurring Schedules:
- Weekly patterns (e.g., Monday-Friday 10am-6pm)
- Repeat indefinitely or for date range
- Most common type of schedule
One-Time Overrides:
- Specific date exceptions
- Override regular schedule
- Can extend or restrict hours
Blackout Windows:
- Block out times for maintenance
- Holidays and closures
- System maintenance periods
Creating Schedules
Basic Schedule Configuration:
- Scope: Site, Product, or Resource level
- Day of Week: Which days (Sunday = 0, Saturday = 6)
- Start Time: When availability begins
- End Time: When availability ends
- Timezone: Site's timezone
Recurrence Patterns:
- Weekly: Every week on selected days
- Daily: Every day
- Custom: Specific pattern
Schedule Overrides:
- Extend hours for special dates
- Restrict hours for reduced operations
- Close completely for holidays
Schedule Examples
Standard Business Hours:
Monday-Friday: 10:00 - 18:00
Saturday: 09:00 - 20:00
Sunday: Closed
Holiday Override:
December 24: 10:00 - 14:00 (early close)
December 25: Closed (holiday)
December 26: 12:00 - 18:00 (late open)
Labels
Labels are tags applied to time slots to indicate special conditions.
Label Types
Age Restrictions:
- "Adults Only" (18+)
- "Toddler Friendly" (suitable for toddlers)
- "Teen Session" (13-17 years)
Skill Levels:
- "Beginner Friendly"
- "Intermediate"
- "Advanced Only"
Special Conditions:
- "Outdoor Only"
- "Weather Dependent"
- "Indoor Alternative Available"
Creating Labels
Required Information:
- Label Code: Unique identifier (e.g., "adults_only")
- Label Name: Display name
- Site: Which site this label applies to
- Rules: JSON rules for validation
Label Rules: Labels can enforce business rules:
{
"min_age": 18,
"max_age": null,
"requires_supervision": false
}
Applying Labels
Where Labels Can Be Applied:
- Specific time slots
- Schedule templates
- Product variants
- Resource availability windows
Label Validation:
- System checks labels during booking
- Prevents incompatible combinations
- Example: "Adults Only" prevents child participants
Participant Types
Participant types allow different pricing for different age groups or categories.
Common Participant Types
Age-Based:
- Adult (18+)
- Child (under 18)
- Senior (65+)
- Toddler (under 3)
Category-Based:
- Student
- Member
- Guest
- Instructor
Creating Participant Types
Required Information:
- Type Name: Display name
- Description: Who this applies to
- Age Range (optional): Min and max age
- Pricing Rules: Link to pricing configuration
Participant Type Configuration:
- Define age ranges if applicable
- Set default pricing
- Configure validation rules
- Link to pricing rulesets
Using Participant Types
In Pricing:
- Different prices per participant type
- Child discounts
- Senior discounts
- Member pricing
In Bookings:
- Customers specify participant breakdown
- System calculates pricing automatically
- Validation ensures correct categories
Catalog Best Practices
Organization Tips
-
Naming Conventions: Use consistent naming
- Products: "Activity Name"
- Variants: "Activity Name - Variant"
- Resources: "Type - Name" (e.g., "Room - A1")
-
Hierarchical Structure: Organize logically
- Group related products
- Use consistent categorization
- Tag resources appropriately
-
Documentation: Add descriptions
- Help customers understand products
- Guide admin users
- Document special requirements
Configuration Workflow
Recommended Order:
- Create sites
- Create resources
- Create products
- Create variants
- Configure schedules
- Set up pricing
- Configure add-ons
- Set up labels
- Test booking flow
Testing Checklist
After configuring catalog items:
- Create test booking for each product
- Verify resource allocation
- Check pricing calculation
- Test add-on functionality
- Validate schedule availability
- Test label restrictions
- Verify capacity limits
Common Configuration Scenarios
Scenario 1: Simple Activity
Product: "Escape Room Experience"
- Duration: 60 minutes
- Party Size: 2-6 people
- One variant: Standard pricing
- Resources: One room, one game set
- Schedule: Daily 10am-10pm
Scenario 2: Multi-Variant Activity
Product: "Cooking Workshop"
- Variant 1: "Beginner" (2 hours, basic)
- Variant 2: "Advanced" (3 hours, premium)
- Variant 3: "Kids" (1.5 hours, child-friendly)
- Resources: Kitchen stations, ingredients
- Schedule: Weekends only
Scenario 3: Resource-Intensive Activity
Product: "Laser Tag Tournament"
- Requires: Party room, equipment sets, staff, safety waivers
- Resource sequence with timing
- Capacity based on equipment availability
- Add-ons: Party room extension, equipment upgrade
- Schedule: Peak hours only
Troubleshooting
Products Not Showing Availability
- Check product is active
- Verify schedule is configured
- Check visibility settings
- Ensure resources are available
- Verify date range in schedule
Resources Not Allocating
- Check resource is active
- Verify resource capacity
- Check for conflicts
- Review resource sequences
- Check shared mode configuration
Pricing Not Calculating
- Verify variant has price ruleset
- Check participant types configured
- Review pricing rules
- Ensure currency matches
- Check for promotion conflicts
Next Steps
- Learn about Scheduling for detailed availability configuration
- Explore Calendar for visual booking management
- Review Reports to analyze product performance
- Check Dashboard for operational overview