Custom Product Templates
Products can have very different design requirements. Assign a named custom product template when a product needs a purpose-built layout.
Product Template Location
Store product templates under templates/catalogue:
templates/catalogue/
product.html
product.subscription.html
product.bundle.htmlThe segment between product. and .html is the product's template key. A product URL slug does not select the template.
Build a Standalone Product Document
Create the exact file for the key you plan to assign:
templates/catalogue/product.<template-key>.htmlDo not extend templates/catalogue/product.html from a product.<template-key>.html file. Runtime template resolution already treats the generic template as a fallback; inheriting from it can hide selection mistakes and couples the custom design to a separate page implementation.
A custom product template may be a complete document or extend the shared layouts/base.html shell. Keep independently replaceable global surfaces in named template blocks.
{% extends "layouts/base.html" %}
{% block title %}{{ product.title }}{% endblock title %}
{% block content %}
<article data-product-id="{{ product.id }}">
<h1>{{ product.title }}</h1>
{# Render the complete custom product experience here. #}
</article>
{% endblock content %}Validate and upload the exact file before assigning it:
ntk validate --server templates/catalogue/product.subscription.html
ntk push templates/catalogue/product.subscription.html --json --no-progressAssign and Verify the Template
On the product, set Product Template to the template key—for example, subscription. You can use the dashboard or the Admin API. Then open the product route in a preview session with skip_cache=1.
On the network domain, confirm X-Theme-Template: templates/catalogue/product.subscription.html. If the header reports templates/catalogue/product.html, the platform fell back to the generic template; check the product's template field, filename, validation result, and upload outcome.
Preview selection is pinned in the preview_theme cookie. Use the storefront preview indicator's Exit preview action or /?deactivate-theme=true when you finish; opening a plain URL does not deactivate the preview.