Templates

Templates control what's rendered on each type of page in a theme.

Templates control what's rendered on particular types of pages in a theme. Each page type has an associated template that determines its structure and content.

The platform automatically generates pages at specific URLs and passes the relevant data objects to the template for rendering.


Location

Template files are located in the templates directory of the theme. Each template type has its own folder containing an index.html file and an optional index.css file for template-specific styles.

templates
├── blog_overview
│   ├── index.css
│   └── index.html
├── blog_post
│   ├── index.css
│   └── index.html
├── content
│   └── index.html
├── product
│   ├── index.css
│   └── index.html
├── selections
│   └── index.html
├── recommendation
│   └── index.html
└── package_booking
    ├── index.css
    └── index.html

Template types

The following template types are available. Templates marked as optional do not need to be included in your theme — the platform will use a default page or simply not render the page type.

TemplateRequiredDescriptionURL
Blog overviewYesLists all blog posts/blog
Blog postYesDisplays a single blog post/blog/{post-slug}
ContentYesDisplays a content biography/contents/{content-slug}
ProductYesDisplays a single product/products/{product-slug}
SelectionsNoAllows customers to make selections on their order/items/{booking-id}/selections
RecommendationNoDisplays a personalised recommendation/recommendations/{recommendation-slug}
Package bookingYes - if using the Package product typeRenders steps in a multi-step package booking journeyPlatform-managed URLs

Template customisation

Some templates support a schema that allows creators to customise the template's appearance and behaviour through the site builder. The schema is defined as YAML front matter at the top of the index.html file, in the same way as block schemas.

Templates that support schemas: product, package booking.


Blog overview

Renders a blog index page displaying all posts.

Object: A posts array of Post objects.

The blog overview page automatically implements pagination, displaying 12 posts per page. A Paginate object can be accessed via paginate to generate links to other pages and display page counts.


Blog post

Renders a single blog post.

Object: A single Post object.


Content

Renders a single content biography page.

Object: A single Content object.


Product

Renders a single product page.

Object: A single Product object.

If the product is part of a series, the product page will also be available at /products/{series-slug}/{product-departure-date}.

This template supports a schema for creator customisation.


Selections

Optional

Allows a customer to return after booking and make selections on their order, such as choosing which workshops they'll attend.

Object: A single Modifier Selection object, combining the data for a particular line item with the guest information for the currently logged-in customer.

This page can only be accessed by the customer to whose booking the selection applies.


Recommendation

Optional

Renders a personalised recommendation page.

Object: A single Recommendation object.

This template will only render if it has been configured on the associated site — otherwise, the platform renders a default recommendation page.


Package booking

Renders each step in a multi-step package booking journey. Packages allow creators to build custom booking flows where customers select from available options at each step before proceeding to checkout.

Object: A Package Step object containing the current step's name, description, available variants, and the URL of the next step.

This template supports a schema for creator customisation.

On this page