Minisite Theme
The minisite default template is a documentation theme with a dark header and footer, a neutral background, a spacious reading column and rounded cards derived from the yupiik.com
brand identity. It ships as a set of handlebars
-like templates (.hb files) and a CSS variable-driven stylesheet supporting light and dark color schemes with a manual toggle.
This page documents how the template engine works, which templates and partials exist, and how to override them for your own website.
How templating works
Templates are rendered by an embedded handlebars engine (fusion-handlebars). The syntax is a subset of handlebars:
|
TIP
|
|
The {{...}}/{{{...}}} sequences you write in the minisite templates (.hb files) are handlebars and are rendered by the engine. In contrast, the paragraphs and blocks of a page's AsciiDoc source are converted to HTML by the Asciidoctor renderer and then inserted via {{{body}}} without being re-parsed, so a literal {{name}} or {{{name}}} you write in a page body (for example when documenting handlebars) is preserved as-is and does not need to be escaped.
|
NOTE
|
the old |
The values (the "model") are provided by the generator Java code. Most of them are dynamic (page title, body, breadcrumb, dates and so on). Values that are only relevant when a feature is enabled (search, blog, llm chat, copy button) are available as boolean flags you can use with {{#if ...}}.
Default templates
Templates live under the templates folder of your minisite source (src/main/minisite/templates by default). If a template is not found there, the generator falls back to its bundled defaults, so you only need to copy the files you want to customize.
The layout is composed of the following default templates:
| File | Purpose |
|---|---|
|
|
|
|
|
Sticky site header: brand/logo, header actions (custom menu, search, blog link, social links, theme toggle) and the opening |
|
|
Right-hand navigation column (the table of contents populated by |
|
|
Site footer (social links + copyright), search modal, jQuery, highlight.js, |
|
|
The page |
|
|
The main content column: breadcrumb, title and the |
|
|
Optional left navigation column rendered when the left menu is enabled. |
|
|
Single entry of the left navigation. |
|
|
One tile (card) of an automatically generated index page. |
|
|
The index page layout: heading, intro and the docs overview grid. |
|
|
Previous/next pagination navigation block. |
|
|
Single previous/next link. |
|
|
Asciidoctor page listing all blog posts (title, items and pagination links). |
|
|
Asciidoctor passthrough wrapping one blog post card. |
Prefix and suffix
header.hb, menu.hb and footer-top.hb, footer-end.hb are the prefix and suffix templates that wrap each page. The templatePrefixes / templateSuffixes configuration (default header.hb,menu.hb and footer-top.hb,footer-end.hb) lists which files to use, in order.
Partials
Reusable fragments are stored in the templates/_partials folder and included with {{> name}}. They are exposed to templates either as static HTML or as HTML gated behind a boolean model flag:
| Partial | Purpose |
|---|---|
|
|
The search button in the header ( |
|
|
The search modal dialog ( |
|
|
The blog link in the header ( |
|
|
The highlight.js stylesheet link ( |
|
|
The highlight.js script tag ( |
|
|
LLM chat stylesheet link ( |
|
|
The LLM chat widget markup and scripts ( |
Extension points
The generator sets a few partials from your site configuration so they can be placed anywhere: socialLinks, socialLinksFooter, copyrightLine and any custom entry of templateExtensionPoints. You can also provide your own partial by putting a *.hb file under the templates/extension-points folder; its name (without the .hb extension) is then usable as {{> name}}.
Model (available values)
The following keys are available in all page templates when applicable:
| Key | Description |
|---|---|
|
|
The site absolute base URL. |
|
|
Page title. |
|
|
Page description (from |
|
|
Author or |
|
|
Prebuilt |
|
|
Logo URL. |
|
|
Text next to the logo. |
|
|
Small uppercase label next to the logo text. |
|
|
Favicon URL. |
|
|
Current project version. |
|
|
LinkedIn company identifier. |
|
|
Copyright line. |
|
|
Rendered Asciidoctor content (raw HTML). |
|
|
Breadcrumb HTML (raw). |
|
|
Classes/icons used to style cards and pages. |
|
|
Blog metadata. |
|
|
Blog extra content (categories, authors, navigation). |
|
|
Link and title used by cards. |
|
|
Raw HTML injected by the user configuration. |
|
|
Boolean toggles gating feature HTML via |
Theme colors and light/dark mode
The theme uses CSS variables defined on :root, overridden by :root[data-theme='light'] and :root[data-theme='dark']. The data-theme attribute is set on the <html> element and persisted in the yupiik-theme localStorage key; an inline script in header.hb applies it before first paint to avoid a flicker, and the toggle button in menu.hb switches it in footer-end.hb.
The palette is derived from the yupiik.com brand:
| Token | Value |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
The bundled template starts in light mode. A saved visitor preference is applied before first paint, and the header toggle switches between light and dark mode. Custom templates can omit data-theme to follow the operating system preference via prefers-color-scheme. Override --bg, --surface, --text, --brand, --ring and the other semantic variables in a stylesheet loaded through customHead. Set them on :root[data-theme='light'] and :root[data-theme='dark'] to customize each mode. Alternatively, provide your own css/theme.css asset to replace the bundled stylesheet. The header and footer use a dark neutral frame with a blue accent in both modes. On smaller screens, the left menu becomes a horizontal navigation strip and the right table of contents is hidden. The table of contents uses clickable rows without bullets, with indented tree branches connecting child headings to their parents. Keyboard focus indicators and reduced-motion preferences are supported.