CMT Sites Documentation

This site serves as the single source of truth for all design and architecture specifications, component and layout behavior across all CMT sites built with this repo.

Version Commit: ac130f8

Generated: 2026-03-21

1. Introduction

About The Project

CMT Sites is a Hugo-based monorepo that hosts multiple brand websites. The project emphasizes:

Documentation Structure

This documentation is organized into sections:

General

Global design principles, technical standards, and browser support guidelines that apply to all sites. This section includes:

Components

Reusable UI elements like buttons, cards, forms, and navigation elements.

Layouts

Page templates used across the sites. Each layout page documents

Version Control

All documentation is version-controlled in git alongside the codebase. Visual snapshots from Figma are exported and committed to ensure immutability. Each page displays its last modification date.

2. General

2.1 Technical Requirements

Performance

  • all of the pages are interactive in less than 2 seconds
  • websites achieve over 80% in all Lighthouse categories

Security

  • websites have SSL
  • SQL injection is not possible
  • used libraries are up-to-date
  • spam is prevented on all forms
  • email address are not included in html
  • all relevant XSS cross-site scripting protection headers are enabled
  • production doesn’t include any links to test or staging environment

Browser Support

The sites support the last two versions of major browsers:

  • Chrome
  • Safari
  • Firefox
  • Edge

Accessibility

All sites meet WCAG AA standards for accessibility.

2.2 Theming

The frontend is designed to be used by multiple brands. They share the same layouts and components, but each brand has a unique visual theme. The theme defines colors, typography, and border radii that align with the brand’s identity.

All theme and brand-specific values are implemented as CSS variables.

Theme primitives

Brand-specific

Each brand theme is built from a small set of theme-specific primitives:

  • Two base colors. Other surface/text/border/overlay colors are derived from these.
  • Typography choices. Each theme defines its own font family and font weights.
  • Border radius. Each theme defines its own radius scale.

Shared

  • Font sizes
  • Spacings
  • All colors except 2 base colors
  • Shadows
  • Breakpoints
  • Grid system

Colors

Colors are grouped based on purpose into:

  • Text on surfaces (backgrounds)
  • Text on media (images/videos)
  • Surfaces
  • Borders
  • Overlays

Typography

Only Google Fonts are used to ensure optimal performance and reliability. Each theme defines its own font family and weights, but all themes share the same font size scale.

2.3 Spacing and Sizing

The spacing and sizing system defines consistent space and dimensions across all components and layouts. It uses CSS variables that automatically scale from desktop to mobile, ensuring consistency and responsive behavior across all brands.

Soft Scale

Used for ~90% of spacing needs. Values decrease gradually (linearly) from desktop to mobile.

Primary use: Gaps, margins, paddings, and sizing for icons, badges, and small images.

Hard Scale

Values decrease by half for more dramatic scaling. Used for main section DIVs and specific cases requiring sharper reduction.

Primary use: Section-level spacing and containers.

Variable Scale

Custom scaling for contexts where flex direction changes and spacing needs may vary (increase, decrease, or stay the same).

Primary use: Gaps that transition from horizontal to vertical layouts.

To Zero Scale

Desktop values reduce to zero on mobile to maximize space.

Primary use: Decorative paddings and offsets that can be removed on mobile.

From Zero Scale

Zero on desktop, scales up on mobile (inverse of To Zero Scale).

Primary use: Spacing that’s only needed on mobile devices.

Site-Specific Variables

Certain values are brand-specific (Collegium, Mondial) for grid and navigation spacing:

PropertyDesktopMobile
12-col13921392
Navi offset76113
Navi offset with announcement strip118150

Site-specific variables:

  • --navi-offset: Navigation offset (varies by breakpoint)
  • --navi-banner-offset: Navigation offset with announcement banner (varies by breakpoint)

2.4 Internationalization (i18n)

CMT sites styles allows for each site to be multilanguge. The frontent i18n is handled by Hugo, Decap handles CMS translations. Both content and template strings can be translated and edited. user selects the preferred language via a language switcher component. The default language is set in the site config file (hugo.toml).

When enabling i18n for a site, the client defines which language is the default.

2.5 3rd-Party Services

A list of third-party services used across CMT sites, including content management, hosting, media delivery, and analytics.

TitleDescriptionCost
Decap CMSContent management systemFree for now, monthly fee for roles
CloudflareCDN and hosting platformUsage-based - Pricelist
Cloudflare Static FormsForm handling and spam protectionUsage-based - Pricelist
Cloudinary or Bunny CDNMedia asset storage, delivery, and video hosting (TBD)Usage-based - Cloudinary Pricelist and Bunny Pricelist
GitHubCode repository and issue tracking$4 per seat per month
Google Tag ManagerTracking and analytics (implemented by client)Free
Cookie Consent TBDCookie consent (client provides account)TBD

2.6 Cookies and Data Management

Consent tool will be chosen by CMT, PM helps with implementation.

Responsibility: Cookie handling and configuration is the client’s responsibility.

Implementation support: The PM team provides technical assistance with chosen tool integration and implementation.

PM does not implement any cookies for website development purposes. All cookies on the site originate exclusively from third-party services added by GTM (analytics, marketing tools, embeds, etc.).

Google Tag Manager (GTM)

  • PM integrates GTM into the site
  • Client provides the GTM container ID

Cloudflare Forms

Form submissions are processed through Cloudflare static forms and stored in Cloudflare’s system. Cloudflare acts as a data processor for all submitted form data.

Client responsibilities:

  • Ensure GDPR-compliant data processing agreement with PM

PM responsibility:

  • Technical integration
  • Manage form submissions via Cloudflare account

Privacy Policy

The client is responsible for maintaining their own privacy policy.

2.7 Creating a New Site

To create a new site, follow these steps:

Client defines these:

  • Site name
  • Theme primitives (base colors, typography choices, border radius)
  • Content structure (types of pages, content fields, etc.)
  • domain name
  • list of languages and the default language
  • define which footer to use

Developer Setup Steps

1. Configuration Files

Add brand to deployment:

  • .github/workflows/deploy.yml - Add to BRANDS env var
  • README.md - Add URLs and commands
  • package.json - Add dev:{brand} and build:{brand} scripts
  • bin/build.sh - Add to validation regex + Turbo site ID
  • bin/dev.js - Add to allowed sites

Hugo config:

  • config/{brand}/hugo.toml - Site config with params, social links, module mounts
  • config/{brand}/menus.json - Navigation structure (main, cta, relatedbrands)

CMS config:

  • static/admin/config.{brand}.yaml - Decap CMS collections

2. Brand Styling

File: assets/{brand}/styles/_brand-theme.scss

Define CSS variables for:

  • Brand colors (primary, secondary with 100/120 variants)
  • Accented colors (text, surfaces, borders)
  • Font families (display, heading, title, body, label, supporting, button)
  • Font weights for each family

3. Content & Data Files

Content:

  • content/{brand}/_index.{lang}.md - Homepage for each language

Data files in data/{brand}/:

Translations:

  • i18n/{lang}.toml - UI strings for new languages (see existing files for required keys)

4. Static Assets

Directory: static/{brand}/

  • favicon.png - Site favicon

5. Decap Turbo

  1. Log in to Decap Turbo dashboard
  2. Add new site with project name: cmt-{brand}
  3. Get the Turbo Site ID from dashboard
  4. Add ID to bin/build.sh in resolve_turbo_site_id() function:
    {brand})
      TURBO_SITE_ID="your-turbo-site-id-here"
      ;;
    

6. Cloudflare Deployment

  1. Create Pages project: cmt-{brand}
  2. Connect to GitHub repository
  3. Add required environment variables:
    • HUGO_VERSION (e.g., 0.154.5)
    • NODE_VERSION (e.g., 20)
  4. Disable automatic deployments - we use GitHub Actions for builds instead

Timeline

The deadline for creating a new site is 5 working days since the client provides all necessary inputs defined above. The client must inform the contractor 2 weeks in advance about the intention to create a new site.

2.8 CMS

The project uses Decap CMS as the content management system. We subscribe to Decap Turbo upgrade.

There is no centralized CMS that allows editing multiple sites simultaneously. Each site’s content is managed through its own dedicated CMS interface.

User Roles and Permissions

The CMS implements a role-based access control system with different permission levels:

  • Admin - Full access to all collections and CMS settings
  • Editor roles - Limited access based on specific collection permissions

Editor roles are configured to allow access only to designated collections, ensuring content editors can modify only the content areas relevant to their responsibilities.

Role definitions and permissions are determined by the PM, Poslovni mediji.

Note: User roles will be configured after all brands included in the first contract are set up and deployed.

SEO

Global settings:

  • Favicon
  • Site title
  • Site title suffix (added to subpages)
  • Site description
  • Site OG image

Page settings:

  • Page title
  • Page description
  • Slug
  • Page image

Page OG settings:

  • OG title
  • OG description
  • OG image

Each setting overrides the corresponding parent setting.

Example: if OG image and Page image fields are not set, Site OG image is displayed for that page i nthe og:image tag. If page image is added, og:image tag is the page image. If field OG image is set, tag og:image displays OG image.

2.9 Forms

Basic forms

They can be constructed via the CMS without the need for developers to set them up.

Fields in basic forms can include:

  • Text input
  • Email input
  • Textarea
  • Dropdown of text options
  • Checkbox group
  • Radio button group

Text paragraphs and headings can be added between fields.

A basic form will include a submit button, a success message, and an error message.

CMS editor will be able to set recipient email addresses for form submissions.

Complex forms

A developer sets up the form and configures strings to be editable in the CMS.

For example: contact form is hardocded and documented on Contact Form page.

Processing form submissions

We have 2 options. Both use Cloudflare Pages Functions for the server-side handler, but they differ in portability and vendor coupling.

Option A: Cloudflare Static Forms Plugin (CF-specific)

What it is: A Pages Plugin that intercepts forms with the data-static-form-name attribute, parses the submission, and calls a respondWith handler in a Function.

Pros:

  • Fast setup for basic forms (no custom routing)
  • Works well for simple email forwarding
  • Officially supported and production-ready (last updated Sep 15, 2025)

Cons:

  • Cloudflare-only (not portable to Netlify/Statichost)
  • Still requires a Function to send email and handle validation
  • Less flexible for future integrations

Best for:

  • Simple forms that will stay on Cloudflare Pages

Option B: Custom Function + Brevo API/SMTP (Portable)

What it is: A custom endpoint (e.g. /api/forms/submit) that accepts form posts, validates them, and sends email via Brevo (API or SMTP).

Pros:

  • Low vendor lock-in (easy to move to Netlify, Vercel, or a custom server)
  • Full control over validation, rate limiting, and spam protection
  • Easy to extend for future booking API integration
  • Email deliverability and GDPR tooling via Brevo

Cons:

  • More setup and maintenance than the plugin
  • More expensive if using Brevo API for high volume (SMTP is cheaper but less feature-rich)

Best for:

  • Forms that may evolve (auto-response, integrations, advanced logic)
  • Minimal friction if hosting changes

Recommendation

Use Option B (Custom Function + Brevo API/SMTP).

  • It minimizes vendor lock-in while still working on Cloudflare today.
  • It keeps GDPR-sensitive data flow under your control.
  • It supports future integrations without re-architecture.

2.10 Phase 2

Some features are drawn in Figma but are not part of the original contract. These are potential features that may be added in a future phase, but are not currently planned for development.

  • Dark mode
  • Advanced animations
  • Pages for guides
  • Video background support for hero components (in addition to images)

3. Components

Each component page includes:

3.1 Header

The Header component provides site navigation and branding. Shows brand logo, website switcher dropdown, main navigation menu with dropdown submenus, optional CTA button, and responsive mobile hamburger menu. Main navigation supports up to 2 levels of navigation (main items + one level of submenus/dropdowns).

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

Components

NameDescription
Navi Announcement StripA site-wide horizontal banner displayed above the main navigation for announcements or promotional messages. Features scrolling text on mobile and optional CTA button. Text has a 100 character limit to remain on a single line within the desktop container. Same banner appears across all pages.
Navi SectionMain navigation bar container for site header. Contains brand logo, website switcher dropdown (optional), horizontal navigation menu (optional), and CTA buttons (optional). Features responsive design with hamburger menu on mobile.
Navigation Link GroupThe Navigation Link Group component displays a grouped set of related navigation links. Used as part of the header navigation to organize links by category or topic.
Language SelectorA dropdown popover component that allows users to select their preferred language for viewing the website. Displays available language options with flag icons and language names. Appears in the header as a button showing current language and a globe icon.

3.2 Navi Section

Main navigation bar container for site header. Contains brand logo, website switcher dropdown (optional), horizontal navigation menu (optional), and CTA buttons (optional). Features responsive design with hamburger menu on mobile.

Functional Documentation

RoleScenarioDescription
systemDisplay navigation sectionShows brand logo, optional website switcher dropdown, optional horizontal navigation menu with page links, and optional CTA buttons on desktop. Switches to mobile hamburger menu on smaller viewports.
systemDisplay mobile navigationOn mobile, shows logo and hamburger icon. Clicking hamburger opens slide-out menu with navigation items.
editorConfigure brand logoUpload brand-specific logo for navigation section. Logo links to homepage. Supports different logos per brand (Collegium, Mondial, Cooltura, BW).
editorConfigure website switcherOptional website switcher displays available brand sites (Collegium, Mondial, Cooltura, BW etc.). Current site is shown with dropdown arrow. Label text "Naša spletna mesta:" precedes dropdown.
editorConfigure navigation menuOptional horizontal navigation menu. Each menu item requires label, optional icon, and URL. Supports nested submenu items organized in groups. Menu items can be reordered. Active page highlighting is automatic.
editorConfigure CTA buttonsOptional CTA buttons can be added to navigation section (e.g., "Pomoč in podpora"). Requires label and URL. Displays as outlined button style.
userUse navigation sectionClick logo to return to homepage. Use optional website switcher to navigate between brand sites. Click optional navigation menu items to navigate. Click optional CTA buttons to perform actions.
userUse mobile navigationOn mobile, click hamburger icon to open/close slide-out menu with navigation items.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.3 Navi Announcement Strip

A site-wide horizontal banner displayed above the main navigation for announcements or promotional messages. Features scrolling text on mobile and optional CTA button. Text has a 100 character limit to remain on a single line within the desktop container. Same banner appears across all pages.

Functional Documentation

RoleScenarioDescription
systemDisplay announcement stripShows banner above main navigation with announcement text and optional CTA button. Text scrolls horizontally on mobile if it exceeds viewport width.
editorConfigure announcement textSet announcement message text. Maximum 100 characters to ensure single-line display on desktop container. Text will auto-scroll on mobile if needed.
editorConfigure CTA buttonOptional CTA button can be added to announcement strip. Requires button label and URL. Displays as button component within the strip.
userRead announcementView announcement message in magenta banner at top of page. On mobile, text auto-scrolls if message is longer than viewport width.
userClick CTA buttonClick optional CTA button in announcement strip to navigate to related page or perform action (e.g., "Learn more", "Register now").

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.5 Breadcrumbs

Breadcrumbs provide navigation path showing the user's location within the site hierarchy. Displays page ancestors separated by chevron icons with interactive links to parent pages.

Properties

Layout

ValueExample
Default

State (Variant)

ValueExample
Default
Hover
Hover

3.6 Button

The button component is the primary call-to-action element used throughout the site. It can navigate to internal pages, external pages, anchor links on the same page, or trigger actions such as form submissions. For buttons with icons, editor can select icon from a predefined list of available icons.

Properties

State (Variant)

ValueExample
Default
Hover and Active
Focused
Loading
Disabled

Appearance (Variant)

ValueExample
Filled
Outlined
Text

Icon placement (Variant)

ValueExample
Both sides
Right side
No icons
Icon only

Size (Variant)

ValueExample
Large
Medium

Special (Variant)

ValueExample
Play button

3.7 Current Experiences and Events A

Section displaying two content categories - "Aktualna doživetja" (Current Experiences) and "Aktualni dogodki" (Current Events). The experiences section shows product/travel listings with background images, dates, titles, pricing, and inventory badges (Novo/Razprodano). The events section displays event cards with background images, dates, titles, and venue information. Both sections include horizontal scrolling with pagination dots and navigation arrows.

Functional Documentation

RoleScenarioDescription
systemDisplay content sectionsShows two sections - first slider with product cards (pricing, inventory badges, dates) and second slider with event cards (dates, venue). Both sections display in horizontal carousel with pagination dots and navigation arrows. Arrows show disabled state when at first/last slide.
editorConfigure sectionSection heading and cards are automatically pulled from system - content is globally configured and not manually added by editor.
userBrowse contentUse navigation arrows or pagination dots to scroll through carousel items in each section. Left arrow is disabled on first slide, right arrow is disabled on last slide.
userClick cardClick product or event card to navigate to detail page. Shows hover state on interaction.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.11 Product Text Offer

A comprehensive product offer section displaying included items, upgrades, exclusions, and optional package cards with legal disclaimers. Used for detailed product breakdowns and travel packages.

Functional Documentation

RoleScenarioDescription
systemDisplay product breakdownShows section with optional three-column lists (included/upgrades/excluded items), optional product package cards, and optional legal disclaimers. All list items and package cards open the Content Popover when clicked to show detailed information without navigating away from the page.
editorConfigure offer detailsEdit section heading and description. List columns, package cards section, and legal text are optional sections that display when added. Edit list items and package card content.
userReview offer detailsRead product inclusions, optional upgrades, and exclusions. View optional package cards with "Več informacij" links for more details. Clicking any list item or package card opens the Content Popover with the item's full details.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.13 Anchor Cards

The Anchor Cards displays a grid of clickable feature cards with icons, titles, descriptions, and call-to-action buttons. Includes optional heading and body text. Cards display key benefits or selling points in a visually organized layout.

Functional Documentation

RoleScenarioDescription
systemDisplay section titleShows heading and body text when present. Title area does not display when not present.
systemDisplay card grid layoutCards display in 4-column horizontal grid on desktop, single-column stack on mobile.
systemDisplay card contentEach card shows circular icon with brand color background, bold title text, body text description, and outlined button with label and arrow icon.
editorAdd section title contentHeading (optional) and body text (optional, can include multiple paragraphs).
editorAdd and configure cardsCreate up to 4 cards. Each card requires icon, title text, description text, and button with label and URL. URLs are typically anchor links to sections below on the same page.
userClick card buttonNavigates to destination URL (typically anchor link to section below on the same page). Button shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.15 Contact Form

The Contact Form component provides a form for visitors to submit inquiries or messages. Includes configurable input fields (such as name, email, phone, subject, message, etc.) with validation and feedback messages on submission. Form submissions are handled using Cloudflare Pages static forms plugin.

Functional Documentation

RoleScenarioDescription
systemDisplay form structureShows a left panel with a heading and description text, alongside the form organized into sections with titles (e.g., contact details, trip details). Each section contains input fields with labels, placeholder text, and required field indicators (asterisk).
systemAdd dynamic tour/activity entriesIn trip inquiry forms, displays a section where users can dynamically add multiple tour or activity entries using an add button. Each entry can be filled with specific details about desired activities during the trip.
systemRequest suggested itineraryShows an optional checkbox labeled "Ne vem kakšen bo program, želim predlog". When checked, the user can request a suggested itinerary and is not required to list individual activities.
systemValidate inputValidates required fields and email format before allowing submission. Shows error messages for invalid inputs.
systemDetermine required fieldsThe system determines which fields are required.
systemHandle submissionShows success message on successful submission or error message on failure.
editorCustomize title and descriptionChange translation strings for the form (labels, headings, placeholders).
userComplete and submit formFill in form fields and click submit button. Receives feedback on submission success or errors.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.16 Content Popover

A modal overlay component designed to display detailed information across various content types. Features a semi-transparent backdrop with a centered white card containing title, optional tag badge, a single image or multiple images (image carousel) with navigation, and rich text content. Responsive design with mobile-optimized layout. To simplify the handoff of information across the many different content types the client wants to present, such as: - Product CTA box explanations - Product events and activities - Product artists and guests - Product venues - Product offer items - Product optional packages A single Content Popover component was created that can handle all of these use cases with consistent interaction patterns and responsive behavior.

Functional Documentation

RoleScenarioDescription
systemOpen popover overlayWhen user clicks a trigger element (e.g., info icon, "Read more" button), the popover appears as a full-screen modal overlay with semi-transparent backdrop.
systemDisplay header with title and optional tagHeader section shows component title. If applicable, displays an inherited tag badge (e.g., "Day party" from event type) with icon and brand accent color.
systemRender image carouselImages display in a grey background container (elevated-a surface). Desktop shows side-by-side with navigation arrows (previous disabled when on first image, next active). Mobile shows single image with page indicator dots below.
systemDisplay rich text contentText column shows paragraphs, bold headings, and bulleted lists. Vertical scrollbar appears when content exceeds container height.
systemClose popoverClose button positioned top-right. Clicking closes the popover and returns user to previous view.
editorConfigure popover titleSet the heading text that appears in the header section.
editorAdd popover text contentCompose rich text content. Supports paragraphs, bold text, bulleted lists, and semantic HTML. Content automatically wraps and scrolls if it exceeds vertical space.
editorUpload imagesAdd one or multiple images to the image carousel. Images are automatically fitted to container with object-contain to preserve aspect ratios. On desktop, users can navigate with arrow buttons; on mobile, swipe gestures work with page indicators.
userNavigate image carouselDesktop users click previous/next arrow buttons to browse images. Mobile users swipe horizontally. Current position indicated by page dots (active dot is highlighted). Disabled arrow indicates first/last image.
userScroll long contentWhen text content exceeds visible area, a vertical scrollbar appears on the right edge. Users scroll with mouse wheel, trackpad, or touch gestures to read full content.
userClose popoverClick the close button (× icon) in top-right corner and return to the previous view.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.17 CTA Box

The CTA Box component displays a sticky call-to-action box with promotional content and action buttons. Appears on product hero and overlays the next module on the right side while scrolling.

Functional Documentation

RoleScenarioDescription
systemDisplay CTA BoxBox is visible on product hero and remains sticky, overlaying the next module on the right side as user scrolls.
systemDisplay default contentThe CTA box displays default content including special selling text, price information, action buttons (Rezerviraj zdaj, Poglej ponudbo), and purchase reassurance text. When applicable, it also shows contingent step arrows and a "Zakaj prej = ceneje?" link that opens a content popover. Some content elements will be dynamically pulled from the booking system.
editorConfigure CTA contentManually enter parts of CTA box content. If custom content is added, it overrides the default "Zakaj prej = ceneje" content.
editorConfigure CTA buttonsSet button labels and actions. Buttons lead to content popover.
userClick CTA buttonOpens content popover with additional information or booking options.

Properties

State (Variant)

ValueExample
Default

3.18 Current Experiences and Events B

The Current Experiences and Events component displays a curated list or grid of ongoing and upcoming experiences and events. Shows key information like dates, titles, and brief descriptions with links to detailed pages.

Functional Documentation

RoleScenarioDescription
systemDisplay content sectionsShows multiple content sections with headings. Displays promotional cards (yellow cards with large images and call-to-action buttons), followed by product/event cards with image, date, title, description, and pricing in grid layout on desktop, stacked on mobile. Shows hover state on hover.
systemFilter by dateShows only current and upcoming events. Past events do not display.
editorConfigure sectionContent cards are automatically pulled from system. Editor can manually add yellow promotional cards with custom images and call-to-action buttons.
userBrowse contentScroll through sections and use navigation arrows to view more items in each category.
userClick cardNavigates to detail page. Shows hover state on interaction.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.19 Ecommerce Product Hero

Full-screen hero section with image background, countdown timer, event title and metadata, and integrated CTA box with pricing and booking options.

Functional Documentation

RoleScenarioDescription
systemDisplay hero sectionDisplays full-screen hero with image background and gradient overlay (top and bottom for dramatic lighting and readability). Shows optional countdown timer with four boxes (days, hours, minutes, seconds) with semi-transparent backgrounds, heading, location with pin icon, dates with calendar icons, and urgency messaging with tier arrows. Uses responsive spacing variables for navigation offset, padding, and CTA positioning. On desktop, positions CTA box in right column. On mobile, overlaps CTA box below hero content.
editorConfigure displaySet event title, location, dates, optional countdown timer and background image.
userView event informationSees full-screen hero with high contrast countdown timer, title, location, dates, early bird pricing message with tier arrows, and pricing comparison with discounted price, strikethrough original, and discount badge. Responsive layout shows two-column layout on desktop with CTA box alongside content, or card-like floating CTA box on mobile with hero content below.
userTake actionClicks primary "Reserve now" or secondary "View offer" button.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.20 Experience Archive Categories

The Experience Archive Categories component displays category filters or navigation for browsing experiences. Shows category names with counts and links to filtered views.

Functional Documentation

RoleScenarioDescription
systemDisplay categoriesShows category list or grid with category names and optional item counts. Categories are only displayed if they contain at least one experience. Category order is consistent across all views.
systemHighlight active categoryCurrently selected category displays with active state styling.
editorConfigure categoriesCategories are automatically generated from content taxonomy.
userFilter by categoryClick category to filter experiences. Shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.21 General FAQ

The General FAQ component displays frequently asked questions in an expandable accordion format. Shows list of questions that expand to reveal answers when clicked.

Functional Documentation

RoleScenarioDescription
systemDisplay FAQ listShows questions in accordion format. Only one answer expanded at a time or all collapsed by default.
systemDisplay question and answerQuestion displays with expand icon indicator. Answer text displays when expanded with smooth transition.
editorAdd FAQ itemsEach FAQ item requires question and answer text. Items can be reordered. Supports rich text formatting in answers.
userExpand answerClick question to expand/collapse answer. Shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.22 Graduation Experience Terms Archive

The Graduation Experience Terms Archive component displays available graduation experience dates or terms. Shows schedule information with booking availability and pricing details.

Functional Documentation

RoleScenarioDescription
systemDisplay terms listShows available graduation experience terms in list or grid format with dates, availability status, and pricing.
systemDisplay term detailsEach term shows date range, destination, availability status (available, limited, sold out), and price.
systemShow availability statusTerms display availability indicator. Sold out terms may be visually de-emphasized.
systemSort terms automaticallyTerms are automatically sorted by date order (chronological).
systemPrice categories5 price categories are pre-defined in the system.
editorConfigure term displaySet sorting order and filtering options. Terms are automatically populated from booking system.
editorManage term availabilityManually input how sold out individual terms are (availability percentage).
editorConfigure CTA boxManually enter CTA box content. Buttons in CTA box lead to content popover.
userSelect termClick term to view details or proceed to booking. Shows hover state on available terms.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.23 Guide List

The Guide List component displays a structured list or grid of guides, articles, or resources. Shows preview cards with title, excerpt, and link to external social media content (Instagram or LinkedIn).

Functional Documentation

RoleScenarioDescription
systemDisplay guide contentEach guide card shows thumbnail image, title and links to social media platform (Instagram, LinkedIn, Facebook).
editorAdd and configure guidesAdd guide cards with title, image, and external link to social media content (Instagram, LinkedIn, Facebook URL).
userClick guide linkOpens social media post (Instagram or LinkedIn) in new tab. Icons shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.24 Help Center Contact

Contact options section displaying support availability, contact methods (email, WhatsApp, phone), and office visit information. Includes title, description text, and multiple call-to-action buttons.

Functional Documentation

RoleScenarioDescription
systemDisplay remote contact sectionShows section title, office hours text, and three contact buttons (email, WhatsApp, phone).
systemDisplay office visit sectionShows section title, availability text, and location button with address.
systemDisplay contact buttons with iconsEach button has icon (email, WhatsApp, phone, location) and label text. Buttons have outlined style with border.
editorConfigure section titlesSet title for remote contact section and title for office visit section.
editorConfigure contact informationSet office hours, support availability text, email address, WhatsApp number, phone number, and physical address.
editorConfigure button linksSet mailto link for email, WhatsApp URL, phone tel link, and Google Maps link for location.
userContact support remotelyClicks email, WhatsApp, or phone button to initiate contact via preferred method.
userVisit officeClicks location button to view address on map and plan visit during office hours.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.25 Help Center Group

Help center archive page with accordion-based FAQ groups displaying categorized help topics. Optionally includes tab filters at the top to switch between trip types. Each group has expandable category titles containing question lists.

Functional Documentation

RoleScenarioDescription
systemDisplay optional tab filtersWhen enabled, shows horizontal tab group at top of page to filter FAQs by trip type (Collegium CRO). Active tab is highlighted with border and background.
systemDisplay FAQ group accordionsShows multiple accordion groups. Each group has a title with a chevron/arrow icon that changes (rotates) to indicate open or closed state. Groups are collapsed by default. The component supports two accordion levels: top-level category groups and nested second-level groups (or question lists) so editors can group questions hierarchically when needed.
systemExpand/collapse groupClicking group title expands to show list of questions within that category. Chevron icon rotates to indicate open/closed state.
systemDisplay questions within groupEach question displays as clickable row with title and chevron icon. Clicking navigates to full answer page.
systemApply brand and trip type categoriesFAQ categories and optional tab labels vary by brand and trip type (Collegium SL, Collegium CRO School/Individual/Experiences, Mondial, Cooltura).
editorConfigure optional tab filtersOptionally enable tab filters and set trip type tabs that appear at top of help center archive.
editorCreate FAQ groupsSet group title for each category. Add multiple questions with titles and URLs to each group.
editorConfigure brand archiveSelect brand archive determines visible tabs, categories, and localized text.
userFilter by trip typeIf tabs are enabled, clicks tab at top to switch between different trip types and see relevant FAQ categories.
userBrowse help categoriesClicks group title to expand/collapse category. Clicks question to view full answer page.

Properties

Responsive (Variant)

ValueExample
Desktop and mobile

Is opened (Boolean)

ValueExample
False
True

3.26 Icon Boxes

The Icon Boxes component displays a grid of numbered icon-based process steps. Shows the booking flow steps (choose, upgrade, pay, enjoy) with optional CTA button.

Functional Documentation

RoleScenarioDescription
systemDisplay process stepsShows numbered icon boxes in a grid, each explaining one step or feature. Number of boxes is flexible (typically 4-8). Grid layout adjusts based on viewport size.
systemDisplay with CTA buttonWhen displayed on main pages (home, why pages), includes a CTA button below the icon boxes linking to experiences archive or other destination.
systemDisplay without CTA buttonWhen displayed on archive or template pages, shows only the icon boxes without CTA button.
editorConfigure boxesThere are two fixed variants - ecommerce (4 boxes showing booking process steps) and catalog (8 boxes showing features/benefits). Both the number of boxes and content are fixed per variant type and cannot be edited. An optional CTA button can be added below the boxes.
userClick boxWhen link URL is present, CTA button is clickable and navigates to destination. See hover state on hover.

Properties

Has CTA Button (Variant)

ValueExample
With CTA
Without CTA

Responsive (Variant)

ValueExample
Desktop
Mobile

3.27 Image and Text

The Image and Text component combines image content with structured text content. It displays optional kicker, headline, body paragraph, optional button and optional bulleted list with icons. Images can be static or animated sequences.

Functional Documentation

RoleScenarioDescription
systemDisplay image contentShows single static image or cycles through 3 images when multiple provided.
systemDisplay text contentShows kicker (when present), headline, body text, button (when present), and list (when present).
editorAdd text contentKicker (optional), headline, body text, and button (optional) with label and URL.
editorUpload imagesSingle static image or 3 images for animated sequence.
userView contentStatic images display without interaction. Animated images cycle automatically.
userClick buttonNavigates to destination URL. Shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

Layout (Variant)

ValueExample
Default
White BG + button
Image on right

3.28 Image Box Accordion Grid

The Image Box Accordion Grid displays a grid of partner or accreditation logos with expandable accordion items. Each item contains a logo image, title, truncated description, and expand button. The component includes an title, heading, and introductory text.

Functional Documentation

RoleScenarioDescription
systemDisplay section headerShows optional kicker, heading, and optional body text above grid when present.
systemDisplay grid layoutArranges accordion items in rows of 3 on desktop, single-column stack on mobile.
systemDisplay accordion itemEach item shows logo image, title, truncated single-line description with ellipsis, and expand button with down arrow icon.
editorAdd section header contentKicker (optional), heading and introductory body text (optional).
editorAdd and configure accordion itemsEach item requires logo image upload (square format), title text, and description text. Items can be reordered.
userClick expand buttonExpands accordion to show full description text. Button shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.29 Image Cards

The Image Cards component displays a grid of image-based cards with section title and optional description at the top. Each card contains an image, title, and arrow button. <br>The designer needs to ensure that the background of the image in that area supports sufficient contrast so that text can be overlaid on the image.

Functional Documentation

RoleScenarioDescription
systemDisplay section headerShows optional section title and description above the cards grid.
systemDisplay cards gridShows cards in grid layout. Number of columns adjusts based on viewport size.
systemDisplay card contentEach card shows image, title, and arrow icon button.
editorConfigure section headerSet section title for the component.
editorAdd and configure cardsEach card requires image, small title and title. Cards can be reordered.
editorSelect image typeEditor can choose between light or dark image variant for each card. Light images display black text overlay, dark images display white text overlay for optimal contrast and readability.
systemDisplay optional buttonShows an optional button with link below the cards grid.
editorConfigure optional buttonEditor can add an optional button below the cards with custom text and link URL.
userView card contentReads card title and views image.
userClick optional buttonNavigates to configured URL. Button shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.30 Image Cards Hero

The Image Cards Hero component displays large image-based cards in a hero section. Features prominent images with overlaid text and call-to-action elements.

Functional Documentation

RoleScenarioDescription
systemDisplay hero cardsShows large image cards with text overlay containing heading and optional button.
systemDisplay card layoutArranges cards in horizontal layout on desktop, stacks on mobile.
editorAdd and configure hero cardsEach card requires background image, heading text, optional description, and optional button with label and URL. Cards can be reordered.
userClick card or buttonNavigates to destination URL. Shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.31 Image with Icon Box Grid

The Image with Icon Box Grid component displays a grid of icon boxes with optional featured image. Image can be positioned at the top, center, or omitted entirely, with icon boxes arranged in a grid layout.

Functional Documentation

RoleScenarioDescription
systemDisplay layoutShows icon boxes in grid layout. If image is included, it appears at top or center position based on selected variant. Without image, icon boxes fill the full width.
systemDisplay icon boxesEach icon box shows icon, heading, and description in compact format within grid.
editorSelect layout variantChoose layout with image at top, image at center, or no image. Featured image is optional.
editorAdd and configure icon boxesEach box requires icon selection, heading, and description. The system limits the number of boxes based on layout - either 3/6 boxes (displays as 1/2 rows) or 4/8 boxes (displays as 1/2 rows). Boxes can be reordered within the allowed limit.
userView content

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

Layout

ValueExample
Image top
Image center
No image

3.32 Language Selector

A dropdown popover component that allows users to select their preferred language for viewing the website. Displays available language options with flag icons and language names. Appears in the header as a button showing current language and a globe icon.

Functional Documentation

RoleScenarioDescription
systemDisplay current language on buttonShows the current language code (e.g., "SI") and a globe icon on the language selector button in the header. Button styled as text-only variant.
systemOpen language popover on clickWhen user clicks the language button, displays a dropdown popover with list of available language options.
systemShow language options with flagsEach language option in the popover shows a flag icon and the language name in that language (e.g., "Slovenščina", "English").
systemClose popover after selectionWhen user selects a language from the popover, closes the dropdown and switches site language to selected option.
userSwitch languageUser clicks the language button in header, reviews available languages in the popover, and clicks their preferred language to switch the site content.
userView current languageUser can see which language is currently active by viewing the language code displayed on the language button (e.g., "SI" for Slovenščina).

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

Popover (Variant)

ValueExample
Other languages

3.33 Large Intro Text

Displays large introductory text with optional small title above. Uses large typography for emphasis.

Functional Documentation

RoleScenarioDescription
systemDisplay intro textShows optional small uppercase title above large bold main text.
editorSet text contentEnter main text content (required) and optional small title text.
userRead intro textSees large, prominent introductory text.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.34 Logos

The Logos component displays a grid or row of partner, sponsor, or certification logos. Shows brand logos with optional links to partner websites.

Functional Documentation

RoleScenarioDescription
systemDisplay logos gridShows logos in evenly-spaced grid or horizontal row. Adjusts layout based on viewport size.
systemDisplay logo imagesEach logo displays at consistent size with proper aspect ratio maintained.
editorAdd and configure logosEach logo requires image upload and optional link URL. Logos can be reordered.
userClick logoNavigates to partner website when link is present. Shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.36 Product Additional Information

The Product Additional Information component displays supplementary details about a product or experience. Shows organized content sections with headings and descriptions for terms, policies, requirements, etc.

Functional Documentation

RoleScenarioDescription
systemDisplay information sectionsShows content organized into sections with headings and body text. The module title is provided as a translation ("Dodatne informacije") and cannot be changed by the editor. On the right, an additional information box is shown; its presence and content depend on whether the context is ecommerce or catalog.
systemDisplay section contentEach section shows heading and formatted body text with optional lists or links.
editorAdd information sectionsEach section requires heading and body text content. Supports rich text formatting including lists and links. Sections can be reordered.
userView informationRead content sections. If accordion format, click heading to expand/collapse section.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.37 Product Archive

The Product Archive component displays a list or grid of products or experiences. Shows product cards with images, titles, key information, and links to detail pages.

Functional Documentation

RoleScenarioDescription
systemDisplay products gridShows products in grid layout. Number of columns adjusts based on viewport size.
systemDisplay product cardsEach product card shows an image, title, key information, and links to the detail page.
systemAutomatically list tripsProducts (trips/experiences) are automatically populated in the archive without manual selection.
userBrowse productsView the list of available products or experiences displayed in the grid layout.
userClick product cardNavigates to product detail page. Card shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.38 Product Banner

The Product Banner component displays a compact label showing product classification or category information. Features a rounded container with title text and optional status indicators, separated by a horizontal divider line.

Functional Documentation

RoleScenarioDescription
systemDisplay product bannerThe component renders as a compact rounded container with light background and subtle border styling. Contains title text and optional status area separated by a horizontal line.
systemDisplay title sectionThe title appears in the upper section using semibold font with tight letter spacing.
systemDisplay divider lineA horizontal line with rounded ends separates the title from any status content below.
systemApply container stylingThe banner has a light translucent background, rounded corners, subtle shadow, and minimal padding around the content.
editorSet banner titleEditor can configure the title text that appears in the banner (e.g., category name, product type).
editorAdd status indicatorsEditor can optionally add status badges or indicators in the status area below the title and divider line.
userView product classificationUser sees the product category or classification information displayed in a compact, visually distinct banner format.
userIdentify product typeUser can quickly identify the product type or category by reading the title text in the banner.

Properties

Responsive

ValueExample
Desktop
Mobile

3.39 Product Booking Items Archive

The Product Booking Items Archive component displays a list or grid of available booking items for a product. Shows individual booking options with dates, availability, and selection controls.

Functional Documentation

RoleScenarioDescription
systemDisplay booking itemsShows available booking options in list or grid format with dates, availability status, and pricing.
systemDisplay item detailsEach item shows date range, availability indicator (available, limited, sold out), price, and selection button or checkbox.
systemShow availability statusItems display availability indicator. Sold out items may be disabled or visually de-emphasized.
editorConfigure item displayAdd and manage booking items. Display format and sorting options can be configured.
userSelect booking itemClick or check item to select for booking. Proceeds to booking form or cart. Shows hover state on available items.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.40 Product Booking Offer

The Product Booking Offer component displays pricing and booking options for a product or experience. Shows package options with pricing, inclusions, and booking buttons.

Functional Documentation

RoleScenarioDescription
systemDisplay booking optionsShows available booking packages or pricing tiers with features and pricing information.
systemDisplay package detailsEach package shows name, price, inclusions list, and booking button.
systemCollapse description with "Prikaži več"On desktop, the description is truncated to 4 lines by default and an ellipsis ("...") + the "Prikaži več" button are shown to expand it. In the right part of the component (pricing column) where content is grouped in categories with bullet lists, the system shows two bullet items per category by default and then shows an ellipsis ("...") + the "Prikaži več" button. On mobile, the description is hidden by default and only the ellipsis ("...") + the "Prikaži več" button are visible; in the right part bullet lists, only one bullet item per category is shown by default.
systemInherit contingent tag badgeIf the product template defines a current contingent (e.g., Super Early Bird, Early Bird), the component automatically pulls and displays the corresponding tag badge (label + styling) from the product template.
systemHighlight featured offer(s) in listWhen rendering a list of Product Booking Offer entries, the system can wrap selected products with the featured-banner-container to visually emphasize them as featured choices.
systemRender ecommerce vs catalog columnsOn ecommerce pages, the right pricing + CTA column is rendered with a fixed width. In catalog contexts, this column is not rendered and the middle content stretches to fill the remaining space.
editorConfigure booking packagesEach package requires name, price, inclusions list, and booking button URL. Packages can be reordered. Optional featured package highlighting.
editorSelect accommodation tagsAccommodation tags are defined in advance by the system. Editor selects accommodation tags from a predefined list; number of persons and location are entered manually - those values will not be selected from the tag list.
editorConfigure available upgradesFor upgrades (nadgradnje), editor chooses which offer-list-item entries are available to users by selecting them from a predefined list.
editorSet featured products in listEditor can mark product booking offers as featured (e.g., via a boolean toggle). The system then renders those items using featured-banner-container in the offers list.
userSelect packageClick booking button to proceed with selected package. Button shows hover state on hover.
userExpand descriptionUser clicks "Prikaži več" to reveal the full description text and expand the bullet lists in the right column.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

Layout

ValueExample
Collegium
Mondial

3.41 Product Hero

The Product Hero component displays a hero section for product or experience detail pages. Features large image with product title, key information, and booking call-to-action.<br><br>*Note: Design version has been updated in Figma. Need to verify with Damir which version is correct. TBD

Functional Documentation

RoleScenarioDescription
systemDisplay hero contentShows product image or image gallery, product title, brief description, key details (dates, location, duration), and primary booking button.
systemDisplay image galleryWhen multiple images present, shows image gallery with navigation controls. Single image displays without gallery controls.
editorAdd hero contentEditor can manually add all content including product title, description, primary image, additional images (optional), key details (dates, location, duration), and booking button label with URL.
userClick booking buttonNavigates to booking page or form. Button shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.42 Product Hero Slider

The Product Hero Slider displays a rotating carousel of hero images or content at the top of product pages. Features navigation controls and automatic progression through slides.

Functional Documentation

RoleScenarioDescription
systemDisplay slider contentShows hero slides with automatic rotation. Displays navigation dots (numbered pagination) and arrow controls.
systemAuto-advance slidesAutomatically progresses to next slide after set interval. The slide indicator loader progressively fills before transitioning to the next slide.
editorAdd and configure slidesEach slide requires image, optional heading, body text, and button with label and URL. Optionally, a slide may include a banner area above the content. Slides can be reordered.
userNavigate slidesClick navigation arrows or dots to view specific slide. Hover pauses auto-rotation.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

Type (Variant)

ValueExample
Collegium Experience
Mondial Destination

Components

NameDescription
product-hero-slider-banner

Each hero slide can optionally include a banner object. When present, the slider renders the product-hero-slider-banner partial inside the banner slot.

Translated UI strings

The banner step labels and CTA label are translated via i18n:

  • higher-occupancy
  • higher-price
  • check-occupancy

3.43 Product Overview

Comprehensive product overview section displaying title, expandable description, anchor navigation cards, selling points with images, what's included list, and gallery preview. Desktop layout uses two-column structure.

Functional Documentation

RoleScenarioDescription
systemDisplay product title and descriptionShows large heading and expandable description text with "Show more" button to reveal full content.
systemDisplay anchor navigation cardsShows 3 cards with large numbers, descriptive text, and yellow scroll-down icons. Cards link to sections further down the page.
systemDisplay selling points sectionShows section title and list of feature cards. Each card has image, bold title, and description text.
systemDisplay what's included listShows section title and list of included items with green checkmarks. Extra/add-on items marked with orange plus icon and underlined text (clickable).
systemDisplay gallery sectionShows section title and gallery preview component with image grid and optional video embed.
editorAdd product title and descriptionSet main product title. Add description text that can be expanded/collapsed.
editorConfigure anchor cardsSet number, label text, and target section ID for each navigation card.
editorAdd selling pointsSet section title. Add feature cards with image, title, and description. Cards can be reordered.
editorConfigure included itemsSet section title. Add included items (with checkmarks) and optional extra items (with plus icons and underline).
editorAdd gallerySet gallery section title. Choose gallery images and optional video.
userExpand descriptionClick "Show more" button to expand full description text.
userNavigate via anchor cardsClick anchor card to scroll to corresponding section on page.
userView galleryClick gallery preview to open full gallery lightbox or video player.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.44 Product Program

The Product Program component displays detailed itinerary or schedule for an experience or trip. Shows day-by-day breakdown with activities, timings, and descriptions.

Functional Documentation

RoleScenarioDescription
systemDisplay program scheduleShows day-by-day itinerary with fixed sequence - two rows of events, followed by artists, followed by venues. System provides predefined event tags (DAY PARTY, NIGHT PARTY, BOAT PARTY, CHILL, etc.) for editor selection. All cards open content popover with additional information, tag is passed to popover. Module can optionally include a legal text section at the bottom.
systemDisplay day contentEach day shows heading, list of activities with times (when present), and descriptions.
editorAdd programEditor can add a title and image for each card under the correct category. For events, the editor chooses from predefined tags (e.g., DAY PARTY, NIGHT PARTY, BOAT PARTY, CHILL). The editor can also toggle whether the activity is included in the basic arrangement. Days and activities can be reordered.
editorAdd legal textModule can optionally include a legal text section at the bottom.
userView programUser can click on each card to open a content popover with additional information.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.45 Product Template FAQ

The Product Template FAQ component displays frequently asked questions specific to a product or experience type. Shows accordion-style Q&A list with expandable answers.

Functional Documentation

RoleScenarioDescription
systemDisplay FAQ listShows questions in accordion format. Answers are collapsed by default.
systemDisplay question and answerEach item shows question text with expand icon. Answer text displays when expanded.
editorAdd FAQ itemsEach FAQ item requires question and answer text. Items can be reordered. Supports rich text formatting in answers.
userExpand answerClick question to expand/collapse answer.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.46 Social Media Cards

The Social Media Cards component displays embedded social media posts or links to social media profiles. Shows cards with social media platform branding, content previews, and links to full posts.

Functional Documentation

RoleScenarioDescription
systemDisplay social cardsShows social media cards in grid layout with platform icons and branding.
systemDisplay card contentEach card shows platform icon, content preview or description, and link to full post.
editorAdd social media linksEach card requires platform selection (Instagram, Facebook, etc.) and post URL or profile link.
userClick social cardOpens social media post or profile in new tab.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.47 Stats

The Stats component displays key statistics and metrics in a grid layout. Each stat contains a large number or value, label, and descriptive text. The component arranges stats in a horizontal row on desktop and stacks them vertically on mobile.

Functional Documentation

RoleScenarioDescription
systemDisplay stats layoutShows stats in horizontal row on desktop with vertical borders between items, stacks vertically on mobile with horizontal borders between items.
systemDisplay stat contentEach stat shows large number/value, title label, and descriptive text in centered layout.
editorAdd and configure statsEach stat requires numeric value or text, label/title, and description text. Stats can be reordered.
userView stats

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.48 Sub Page Hero

The Sub Page Hero Section displays a hero banner at the top of subpages with breadcrumb navigation and large heading text. Features full-width background image with gradient overlay and centered text card with brand-colored bottom border.

Functional Documentation

RoleScenarioDescription
systemDisplay hero backgroundShows full-width background image with dark-to-transparent gradient overlay covering entire hero section.
systemDisplay text cardShows centered card with black background, brand-colored bottom border, breadcrumb navigation, and heading text.
editorAdd background imageUpload image that displays as full-width background.
editorAdd heading textText field for main hero heading matching page title.
userClick breadcrumb linkNavigates to linked page. Link shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.49 Tertiary Hero

The Tertiary Hero component displays a simplified hero section for tertiary or detail pages. Features minimal design with heading and breadcrumb navigation.

Functional Documentation

RoleScenarioDescription
systemDisplay hero contentShows heading text and breadcrumb navigation in minimal layout. The background can be either a color or an image.
systemDisplay breadcrumbsShows breadcrumb trail when present with separator between items.
editorAdd hero contentAdd heading text and image.
userClick breadcrumb linkNavigates to parent page. Link shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.50 Text Columns

The Text Columns displays text content in a two-column layout on desktop and single-column layout on mobile. The left column contains a heading and body text, while the right column contains additional body text and an optional button.

Functional Documentation

RoleScenarioDescription
systemDisplay column layoutShows two-column layout side by side on desktop, stacks vertically on mobile.
systemDisplay left column contentShows heading and body text in left column.
systemDisplay right column contentShows body text and optional button with label and arrow icon in right column. Button does not display when not present.
editorAdd left column contentHeading text and optional body paragraph for left column.
editorAdd right column contentBody paragraph text and optional button with label and URL for right column.
userClick buttonNavigates to destination URL. Button shows hover state on hover.

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

3.51 Why Cards

Section with heading and list of benefit cards alongside video player. Desktop shows sticky video on left with scrolling cards on right. Mobile stacks vertically. Video can be YouTube embed or self-hosted (Cloudinary).

Functional Documentation

RoleScenarioDescription
systemDisplay section with titleShows small uppercase title and large heading, centered.
systemDisplay sticky video (desktop)Left column shows video player with thumbnail and centered play button overlay that remains visible while scrolling.
systemDisplay cards listShows vertically stacked cards with image, title, and description.
editorConfigure section titlesSet small title and main heading.
editorChoose videoAdd video to section.
editorAdd cardsAdd cards with image, title, and description text.
userWatch videoClicks play button to watch video.
userScroll through cardsReads benefit cards while video remains visible (desktop).

Properties

Responsive (Variant)

ValueExample
Desktop
Mobile

4. Layouts

Each layout page includes:

Component Modes Legend

ModeDescription
GlobalAppears on all pages in the same position (e.g., header, footer)
FixedRequired component that appears in this layout at a specific position
ModuleOptional content module that can be added/removed through CMS

4.1 Home

Primary landing page layout featuring hero section with brand showcase and modular content areas. Supports three hero variants (product slider, image cards, or tertiary hero) with flexible content modules below for experiences, features, and social proof.

Components

NameDescriptionMode
HeaderThe Header component provides site navigation and branding. Shows brand logo, website switcher dropdown, main navigation menu with dropdown submenus, optional CTA button, and responsive mobile hamburger menu. Main navigation supports up to 2 levels of navigation (main items + one level of submenus/dropdowns).global
Product Hero Slider
Hero option 1 - Used for Collegium/Mondial homepages
The Product Hero Slider displays a rotating carousel of hero images or content at the top of product pages. Features navigation controls and automatic progression through slides.fixed
Image Cards Hero
Hero option 2 - Used for Cooltura homepage
The Image Cards Hero component displays large image-based cards in a hero section. Features prominent images with overlaid text and call-to-action elements.fixed
Tertiary Hero
Hero option 3 - Used for Cooltura homepage
The Tertiary Hero component displays a simplified hero section for tertiary or detail pages. Features minimal design with heading and breadcrumb navigation.fixed
current-experiences-and-eventsmodule
Current Experiences and Events BThe Current Experiences and Events component displays a curated list or grid of ongoing and upcoming experiences and events. Shows key information like dates, titles, and brief descriptions with links to detailed pages.module
Image and TextThe Image and Text component combines image content with structured text content. It displays optional kicker, headline, body paragraph, optional button and optional bulleted list with icons. Images can be static or animated sequences.module
Image CardsThe Image Cards component displays a grid of image-based cards with section title and optional description at the top. Each card contains an image, title, and arrow button. <br>The designer needs to ensure that the background of the image in that area supports sufficient contrast so that text can be overlaid on the image.module
Icon BoxesThe Icon Boxes component displays a grid of numbered icon-based process steps. Shows the booking flow steps (choose, upgrade, pay, enjoy) with optional CTA button.module
Social Media CardsThe Social Media Cards component displays embedded social media posts or links to social media profiles. Shows cards with social media platform branding, content previews, and links to full posts.module
LogosThe Logos component displays a grid or row of partner, sponsor, or certification logos. Shows brand logos with optional links to partner websites.module
FooterMulti-column footer section with site branding, navigation links, support information, and related site logos. Adapts across different brand sites (Collegium, Mondial, Collegium CRO, Cooltura) and responsive breakpoints.global

4.2 Default List

Default layout for list/archive pages displaying filterable content collections. Used for experience archives, blog posts, event listings, and other content categories.

Components

NameDescriptionMode
HeaderThe Header component provides site navigation and branding. Shows brand logo, website switcher dropdown, main navigation menu with dropdown submenus, optional CTA button, and responsive mobile hamburger menu. Main navigation supports up to 2 levels of navigation (main items + one level of submenus/dropdowns).global
Sub Page HeroThe Sub Page Hero Section displays a hero banner at the top of subpages with breadcrumb navigation and large heading text. Features full-width background image with gradient overlay and centered text card with brand-colored bottom border.fixed
Experience Archive CategoriesThe Experience Archive Categories component displays category filters or navigation for browsing experiences. Shows category names with counts and links to filtered views.fixed
Icon BoxesThe Icon Boxes component displays a grid of numbered icon-based process steps. Shows the booking flow steps (choose, upgrade, pay, enjoy) with optional CTA button.module
Social Media CardsThe Social Media Cards component displays embedded social media posts or links to social media profiles. Shows cards with social media platform branding, content previews, and links to full posts.module
FooterMulti-column footer section with site branding, navigation links, support information, and related site logos. Adapts across different brand sites (Collegium, Mondial, Collegium CRO, Cooltura) and responsive breakpoints.global

4.3 Contact

Dedicated layout for contact pages featuring header, tertiary hero, contact form and footer. Designed for help and support pages where users can submit inquiries. Simple structure focuses on form submission without additional content modules.

Components

NameDescriptionMode
HeaderThe Header component provides site navigation and branding. Shows brand logo, website switcher dropdown, main navigation menu with dropdown submenus, optional CTA button, and responsive mobile hamburger menu. Main navigation supports up to 2 levels of navigation (main items + one level of submenus/dropdowns).global
Tertiary HeroThe Tertiary Hero component displays a simplified hero section for tertiary or detail pages. Features minimal design with heading and breadcrumb navigation.fixed
Contact FormThe Contact Form component provides a form for visitors to submit inquiries or messages. Includes configurable input fields (such as name, email, phone, subject, message, etc.) with validation and feedback messages on submission. Form submissions are handled using Cloudflare Pages static forms plugin.fixed
FooterMulti-column footer section with site branding, navigation links, support information, and related site logos. Adapts across different brand sites (Collegium, Mondial, Collegium CRO, Cooltura) and responsive breakpoints.global

4.4 Default Single

Default layout for content pages. Customizable with shortcodes and modules. Content can be added via Hugo's .Content variable or through modular components. Example usage includes About Us, landing pages, explanation pages, etc.

Components

NameDescriptionMode
HeaderThe Header component provides site navigation and branding. Shows brand logo, website switcher dropdown, main navigation menu with dropdown submenus, optional CTA button, and responsive mobile hamburger menu. Main navigation supports up to 2 levels of navigation (main items + one level of submenus/dropdowns).global
Sub Page HeroThe Sub Page Hero Section displays a hero banner at the top of subpages with breadcrumb navigation and large heading text. Features full-width background image with gradient overlay and centered text card with brand-colored bottom border.fixed
Text ColumnsThe Text Columns displays text content in a two-column layout on desktop and single-column layout on mobile. The left column contains a heading and body text, while the right column contains additional body text and an optional button.module
Product ArchiveThe Product Archive component displays a list or grid of products or experiences. Shows product cards with images, titles, key information, and links to detail pages.module
Anchor CardsThe Anchor Cards displays a grid of clickable feature cards with icons, titles, descriptions, and call-to-action buttons. Includes optional heading and body text. Cards display key benefits or selling points in a visually organized layout.module
Image with Icon Box GridThe Image with Icon Box Grid component displays a grid of icon boxes with optional featured image. Image can be positioned at the top, center, or omitted entirely, with icon boxes arranged in a grid layout.module
Image and TextThe Image and Text component combines image content with structured text content. It displays optional kicker, headline, body paragraph, optional button and optional bulleted list with icons. Images can be static or animated sequences.module
Icon BoxesThe Icon Boxes component displays a grid of numbered icon-based process steps. Shows the booking flow steps (choose, upgrade, pay, enjoy) with optional CTA button.module
General FAQThe General FAQ component displays frequently asked questions in an expandable accordion format. Shows list of questions that expand to reveal answers when clicked.module
StatsThe Stats component displays key statistics and metrics in a grid layout. Each stat contains a large number or value, label, and descriptive text. The component arranges stats in a horizontal row on desktop and stacks them vertically on mobile.module
Image Box Accordion GridThe Image Box Accordion Grid displays a grid of partner or accreditation logos with expandable accordion items. Each item contains a logo image, title, truncated description, and expand button. The component includes an title, heading, and introductory text.module
FooterMulti-column footer section with site branding, navigation links, support information, and related site logos. Adapts across different brand sites (Collegium, Mondial, Collegium CRO, Cooltura) and responsive breakpoints.global

4.5 Guides List

Layout for guides listing page with hero section, icon boxes explaining guide selection, and filterable guide list. Displays guide cards with profile images, names, and action buttons.

Components

NameDescriptionMode
HeaderThe Header component provides site navigation and branding. Shows brand logo, website switcher dropdown, main navigation menu with dropdown submenus, optional CTA button, and responsive mobile hamburger menu. Main navigation supports up to 2 levels of navigation (main items + one level of submenus/dropdowns).global
Sub Page HeroThe Sub Page Hero Section displays a hero banner at the top of subpages with breadcrumb navigation and large heading text. Features full-width background image with gradient overlay and centered text card with brand-colored bottom border.fixed
Image with Icon Box GridThe Image with Icon Box Grid component displays a grid of icon boxes with optional featured image. Image can be positioned at the top, center, or omitted entirely, with icon boxes arranged in a grid layout.fixed
Guide ListThe Guide List component displays a structured list or grid of guides, articles, or resources. Shows preview cards with title, excerpt, and link to external social media content (Instagram or LinkedIn).fixed
FooterMulti-column footer section with site branding, navigation links, support information, and related site logos. Adapts across different brand sites (Collegium, Mondial, Collegium CRO, Cooltura) and responsive breakpoints.global

4.6 Help List

Help center layout with hero section, categorized help topics, and contact options. Displays accordion-style help categories with contact methods including email, WhatsApp, and phone support.

Components

NameDescriptionMode
HeaderThe Header component provides site navigation and branding. Shows brand logo, website switcher dropdown, main navigation menu with dropdown submenus, optional CTA button, and responsive mobile hamburger menu. Main navigation supports up to 2 levels of navigation (main items + one level of submenus/dropdowns).global
Tertiary HeroThe Tertiary Hero component displays a simplified hero section for tertiary or detail pages. Features minimal design with heading and breadcrumb navigation.fixed
Help Center GroupHelp center archive page with accordion-based FAQ groups displaying categorized help topics. Optionally includes tab filters at the top to switch between trip types. Each group has expandable category titles containing question lists.fixed
Help Center ContactContact options section displaying support availability, contact methods (email, WhatsApp, phone), and office visit information. Includes title, description text, and multiple call-to-action buttons.fixed
FooterMulti-column footer section with site branding, navigation links, support information, and related site logos. Adapts across different brand sites (Collegium, Mondial, Collegium CRO, Cooltura) and responsive breakpoints.global

4.7 Product List

E-commerce product archive layout displaying booking items with filtering, search, and detailed product cards. Used for villa rentals, accommodation listings, and similar bookable products.

Components

NameDescriptionMode
HeaderThe Header component provides site navigation and branding. Shows brand logo, website switcher dropdown, main navigation menu with dropdown submenus, optional CTA button, and responsive mobile hamburger menu. Main navigation supports up to 2 levels of navigation (main items + one level of submenus/dropdowns).global
Tertiary HeroThe Tertiary Hero component displays a simplified hero section for tertiary or detail pages. Features minimal design with heading and breadcrumb navigation.fixed
Product Booking Items ArchiveThe Product Booking Items Archive component displays a list or grid of available booking items for a product. Shows individual booking options with dates, availability, and selection controls.fixed
FooterMulti-column footer section with site branding, navigation links, support information, and related site logos. Adapts across different brand sites (Collegium, Mondial, Collegium CRO, Cooltura) and responsive breakpoints.global

4.8 Product Single

E-commerce product detail page layout with hero, sticky CTA box, product overview, program details, booking offers, and FAQ sections. Used for travel packages, experiences, and events.

Components

NameDescriptionMode
HeaderThe Header component provides site navigation and branding. Shows brand logo, website switcher dropdown, main navigation menu with dropdown submenus, optional CTA button, and responsive mobile hamburger menu. Main navigation supports up to 2 levels of navigation (main items + one level of submenus/dropdowns).global
Product Hero SliderThe Product Hero Slider displays a rotating carousel of hero images or content at the top of product pages. Features navigation controls and automatic progression through slides.fixed
sticky-ctafixed
Product OverviewComprehensive product overview section displaying title, expandable description, anchor navigation cards, selling points with images, what's included list, and gallery preview. Desktop layout uses two-column structure.fixed
Anchor Link NavigationThe Anchor Link Navigation component displays a navigation menu with links to different sections within the same page. Shows section links that smooth scroll to corresponding content when clicked.fixed
Product ProgramThe Product Program component displays detailed itinerary or schedule for an experience or trip. Shows day-by-day breakdown with activities, timings, and descriptions.fixed
Product Booking OfferThe Product Booking Offer component displays pricing and booking options for a product or experience. Shows package options with pricing, inclusions, and booking buttons.fixed
Product Text OfferA comprehensive product offer section displaying included items, upgrades, exclusions, and optional package cards with legal disclaimers. Used for detailed product breakdowns and travel packages.module
Product Additional InformationThe Product Additional Information component displays supplementary details about a product or experience. Shows organized content sections with headings and descriptions for terms, policies, requirements, etc.module
Product Template FAQThe Product Template FAQ component displays frequently asked questions specific to a product or experience type. Shows accordion-style Q&A list with expandable answers.fixed
Social Media CardsThe Social Media Cards component displays embedded social media posts or links to social media profiles. Shows cards with social media platform branding, content previews, and links to full posts.module
Social Media CarouselA full-width section showcasing actual social media posts in a horizontal scrolling carousel, with heading, social media icon buttons, and post preview cards with video/image content. Used to display recent social media activity and encourage users to follow brand's social channels.module
FooterMulti-column footer section with site branding, navigation links, support information, and related site logos. Adapts across different brand sites (Collegium, Mondial, Collegium CRO, Cooltura) and responsive breakpoints.global

4.9 Occupancy List

Occupancy tracking layout displaying available spots and booking deadlines for graduation trips and group travel experiences. Shows real-time capacity information organized by date groups.

Components

NameDescriptionMode
HeaderThe Header component provides site navigation and branding. Shows brand logo, website switcher dropdown, main navigation menu with dropdown submenus, optional CTA button, and responsive mobile hamburger menu. Main navigation supports up to 2 levels of navigation (main items + one level of submenus/dropdowns).global
Tertiary HeroThe Tertiary Hero component displays a simplified hero section for tertiary or detail pages. Features minimal design with heading and breadcrumb navigation.fixed
Graduation Experience Terms ArchiveThe Graduation Experience Terms Archive component displays available graduation experience dates or terms. Shows schedule information with booking availability and pricing details.fixed
FooterMulti-column footer section with site branding, navigation links, support information, and related site logos. Adapts across different brand sites (Collegium, Mondial, Collegium CRO, Cooltura) and responsive breakpoints.global

5. Development

5.1 Booking API Reference

The Booking API (Azure Functions) handles all dynamic booking operations including cart management, checkout, payment processing, and order placement.

For static program catalog data (build-time only), see the Programs Index API.

Overview

The Booking API provides endpoints for:

  • Cart operations - Add/remove services and cross-sale products
  • Checkout - Calculate totals, fees, taxes, and installments
  • Coupons - Add and remove discount codes
  • Orders & Payments - Place orders and handle payment initialization
  • Data lookups - Get packages, products, accommodation, and cross-sale items

All endpoints require programId (and often bookingId or serviceId) to operate on specific program bookings.

Base URLs

Authentication

All endpoints are configured with anonymous access (auth_level=ANONYMOUS). If an external gateway enforces auth, that is outside this codebase.

Content Type

  • Request bodies are JSON (application/json) for POST endpoints.
  • Most responses are JSON with a shared envelope (see below).

Response Envelope

Most endpoints return:

{
  "success": true,
  "data": <payload>
}

On error (500):

{
  "success": false,
  "error": "<message>"
}

Notes:

  • GET /sync-all returns a plain text response ("sync successful") and does not use the JSON envelope.
  • Some response payloads are passed through from Salesforce retdata and are not fully described here.

Endpoint Index

MethodPathPurpose
GET/keep-warmHealth keep-warm ping
GET/sync-allForce cache sync
GET/packagesList available packages
GET/productsGet cached products for a program element
GET/accommodationGet cached accommodation + units
GET/cross-saleGet cached cross-sale products
DELETE/cartEmpty cart in Salesforce
POST/cart/mainAdd main service to cart
POST/cart/cross-saleAdd cross-sale service to cart
DELETE/cart/cross-saleRemove cross-sale service from cart
GET/checkoutProceed to checkout (fees, totals)
POST/couponAdd coupon
DELETE/couponRemove coupon
POST/orderPlace order + handle payment

Endpoints

GET /keep-warm

Returns a successful response with an empty array.

Response data:

  • []

GET /sync-all

Forces cache refresh of active programs.

Response:

  • Plain text "sync successful" (not JSON).

GET /packages

Lists packages for a program and date range. Proxies to Salesforce checkavailability.

Query parameters:

  • programId (string, required)
  • channelId (string, required)
  • arrival (string, required) - start date
  • departure (string, required) - end date

Response data:

  • Array of packages (retdata.wpackages from Salesforce).

GET /products

Returns cached products for a program element.

Query parameters:

  • programId (string, required)
  • programElement (string, required)

Response data:

  • Array of products (cached JSON), or empty array if not found.

GET /accommodation

Returns cached accommodation details plus computed units for the date range.

Query parameters:

  • programId (string, required)
  • programElement (string, required)
  • accommodationSlug (string, required)
  • arrival (string, optional) - defaults to program defaultArrivalDate
  • departure (string, optional) - defaults to program defaultDepartureDate

Response data:

  • Accommodation object from cache with added units field.

GET /cross-sale

Returns cached cross-sale products for a program element and package.

Query parameters:

  • programId (string, required)
  • programElement (string, required)
  • packageId (string, required)

Response data:

  • Array of products (base + extension) from cache.

DELETE /cart

Empties the cart in Salesforce for a booking.

Query parameters:

  • bookingId (string, required)
  • programId (string, required)

Response data:

  • null

POST /cart/main

Adds a main service to the cart.

Request body:

  • programId (string, required)
  • serviceId (string, required)
  • arrival (string, required)
  • departure (string, required)
  • guests (number, required)
  • quantity (number, required)
  • bookingId (string, optional)
  • timeSlotId (string, optional)
  • extras (array, optional)
    • Each item:
      • serviceId (string, required)
      • timeSlotId (string, required)

Response data:

  • bookingId (string)
  • total (number)
  • bookingServices (array) - Salesforce retdata.wmservices

POST /cart/cross-sale

Adds a cross-sale service to the cart.

Request body:

  • programId (string, required)
  • bookingId (string, required)
  • serviceId (string, required)
  • timeSlotId (string, required)
  • guests (number, required)

Response data:

  • bookingServiceId (string)
  • total (number)

DELETE /cart/cross-sale

Removes a cross-sale service from the cart.

Query parameters:

  • bookingServiceId (string, required)
  • bookingId (string, required)
  • programId (string, required)

Response data:

  • total (number)

GET /checkout

Proceeds to checkout and returns totals, fees, installments, and coupons.

Query parameters:

  • bookingId (string, required)
  • programId (string, required)
  • paymentType (string, optional) - defaults to Bank transfer
  • cardType (string, optional) - used when paymentType is a card
  • insurance (string, optional) - true or false (default false)

Response data:

  • total (number)
  • bookingFee (number)
  • serviceFee (number)
  • touristTax (number)
  • installments (array)
  • insurancePrice (number)
  • coupons (array)
  • debug (object) - raw Salesforce retdata

POST /coupon

Adds a coupon to the booking.

Request body:

  • programId (string, required)
  • couponCode (string, required)
  • bookingId (string, required)

Response data:

  • {}

DELETE /coupon

Removes a coupon from the booking.

Query parameters:

  • programId (string, required)
  • bookingId (string, required)
  • couponCode (string, required)

Response data:

  • {}

POST /order

Places an order and handles payment initialization or finalization. When paymentMethod is not Bank transfer, this flow may return a payment URL for the next step.

Request body:

  • orderData (object, required) - Salesforce payload for placing order
  • paymentMethod (string, required) - Bank transfer, creditcard, or other supported values
  • paymentToken (string, optional) - returned from Saferpay initialization
  • bookingNumber (string, optional) - required when continuing a payment
  • installmentId (string, optional) - required when continuing a payment
  • installmentAmount (number, optional) - required for card/PayPal flow
  • cardType (string, optional) - required for creditcard
  • returnUrl (string, optional) - used for payment redirect
  • locale (string, optional) - used for payment page

Response data (one of):

  • bookingNumber (string) - when order is finalized or bank transfer
  • bookingNumber, installmentId, paymentToken, paymentUrl - when payment page is initialized

Known Gaps

Some field types and allowed enum values are defined by upstream Salesforce or Saferpay APIs and are not validated in this app. If you need strict schemas, confirm the upstream contracts for retdata shapes and supported paymentMethod or cardType values.

5.2 Programs Index API (Netlify)

The Programs Index API provides a static catalog of all programs and their elements.

For runtime booking operations, see the Booking API Reference.

Overview

The Programs Index API serves a cached, read-only JSON index of:

  • All active programs with their metadata
  • Program elements (accommodation types, packages, etc.) within each program
  • Cross-sale product mappings
  • Default booking dates and constraints

Base URLs

Environment Variables

Set the following environment variables for the Hugo build:

# fetch program data
BOOKING_PROGRAMS_URL=https://develop--cmt-booking.netlify.app/api/programs/index.json

# Enable build-time product fetching from the Booking API (Azure Functions):
BOOKING_API_URL=https://cmt-booking-develop.azurewebsites.net/api/

Variables are loaded from .env during the build process (see bin/build.sh).

Endpoint: GET /api/programs/index.json

Description

Returns a complete index of all programs and their program elements. This is a static JSON file endpoint designed for build-time consumption.

Usage in Hugo

The Hugo build process fetches this endpoint via the layouts/partials/get-booking-programs.html partial:

  1. Hugo calls resources.GetRemote to fetch the URL
  2. The response is unmarshaled into a data structure
  3. The data is cached using partialCached to avoid refetching
  4. Individual program pages match their programId front matter against this index
  5. Program details are rendered directly into the HTML during build

Response

Content-Type: application/json

Format: Plain JSON array (not wrapped in success envelope)

Example Response:

[
  {
    "programId": "a1mQx000002frf7IAA",
    "title": "@bw - Balkan Wave 2026",
    "link": "/balkan-wave2026/",
    "channelId": "p8fdirzhf7cu8qbzdqo6x4qda5nxzant",
    "defaultGuests": 2,
    "maxGuests": 12,
    "unitSelection": "auto",
    "defaultArrivalDate": "2026-07-09",
    "defaultDepartureDate": "2026-07-12",
    "lockDates": true,
    "minArrivalDate": "2026-07-05",
    "maxDepartureDate": "2026-07-12",
    "bookingFeeName": "Booking fee",
    "touristTaxName": "Tourist tax:",
    "programElements": [
      {
        "slug": "3_night_packages",
        "title": "3-DAY PACKAGES",
        "type": "Accommodation services",
        "subtype": ["apartments"],
        "icon": "bed",
        "crossSale": ["a1nQx00000fLLUyIAO", "a1nQx00000fLH9fIAG"]
      },
      {
        "slug": "4_night_packages",
        "title": "4-DAY PACKAGES",
        "type": "Accommodation services",
        "subtype": ["hotels"],
        "icon": "bed",
        "crossSale": ["a1nQx00000fLLUyIAO", "a1nQx00000fLH9fIAG", "a1nQx00000fL7dFIAS"]
      },
      {
        "slug": "7_night_packages",
        "title": "7-DAY PACKAGES",
        "type": "Accommodation services",
        "subtype": ["hotels"],
        "icon": "bed",
        "crossSale": ["a1nQx00000fLLUyIAO", "a1nQx00000fLH9fIAG", "a1nQx00000fL7dFIAS", "a1nQx00000fLOFpIAO"]
      }
    ]
  }
]

Response Fields

Program Object

FieldTypeDescription
programIdstringUnique program identifier (Salesforce ID)
titlestringProgram title
linkstringBooking app URL path (e.g., /balkan-wave2026/)
channelIdstringSalesforce channel identifier
defaultGuestsnumberDefault number of guests for booking
maxGuestsnumberMaximum guests allowed
unitSelectionstringUnit selection strategy (auto, manual, etc.)
defaultArrivalDatestringDefault arrival date (YYYY-MM-DD format)
defaultDepartureDatestringDefault departure date (YYYY-MM-DD format)
lockDatesbooleanWhether dates are locked (user cannot change)
minArrivalDatestringEarliest allowed arrival date
maxDepartureDatestringLatest allowed departure date
bookingFeeNamestringLabel for booking fee (e.g., “Booking fee”)
touristTaxNamestringLabel for tourist tax (e.g., “Tourist tax:”)
programElementsarrayArray of program element objects

Program Element Object

FieldTypeDescription
slugstringURL-safe identifier for the element (e.g., 3_night_packages, 4_night_packages)
titlestringDisplay title (e.g., 3-DAY PACKAGES, 4-DAY PACKAGES)
typestringCategory type (e.g., Accommodation services, Activities)
subtypearraySubcategory types (e.g., ["apartments"], ["hotels"], ["tours"])
iconstringIcon identifier (e.g., bed, utensils, camera)
crossSalearrayArray of cross-sale product IDs (Salesforce IDs)

Integration with cmt-sites

Program pages define their program ID in front matter:

---
title: Balkan Wave
programId: a1mQx000002frf7IAA
start_date: 2026-07-12T00:00:00Z
end_date: 2026-07-18T00:00:00Z
price: 145
---