Creating a Content Repository
A Showroom content repository is an Antora project that contains your lab instructions written in AsciiDoc. The Showroom platform clones, builds, and serves this content at runtime.
Start from the Template
The recommended starting point is showroom_template_nookbag.
-
In GitHub, click Use this template to create a new repository. Suggested naming:
showroom_<lab-name>(for exampleshowroom_my-ansible-workshop). -
Clone your new repo locally.
-
Replace the sample pages in
content/modules/ROOT/pages/with your own content.
The template gives you a clean structure with zero boilerplate and the Red Hat Demo Platform UI theme.
Directory Layout
your-content-repo/
├── content/
│ ├── antora.yml (1)
│ ├── supplemental-ui/ (2)
│ │ └── partials/
│ └── modules/ROOT/
│ ├── nav.adoc (3)
│ ├── assets/images/ (4)
│ ├── examples/ (5)
│ ├── pages/ (6)
│ │ ├── index.adoc
│ │ ├── module-01.adoc
│ │ └── module-02.adoc
│ └── partials/ (7)
├── site.yml (8)
└── ui-config.yml (9)
| 1 | Antora component descriptor — defines the component name, version, navigation, and default AsciiDoc attributes. |
| 2 | Custom CSS or HTML partials that override the UI theme. |
| 3 | Navigation file — controls the sidebar table of contents. |
| 4 | Images referenced from your AsciiDoc pages. |
| 5 | Downloadable files (scripts, configs) that readers can copy. |
| 6 | Your lab pages — one AsciiDoc file per module or section. |
| 7 | Reusable AsciiDoc snippets you can include inline. |
| 8 | Antora playbook — do not modify; uses the Red Hat theme and extension settings managed by the template. |
| 9 | Showroom UI configuration — defines tabs, layout width, and dynamic URLs. See UI Configuration. |
The Antora Component Descriptor (antora.yml)
The content/antora.yml file is the heart of your Antora component.
Here is a minimal example:
name: modules
title: My Workshop Title
version: master
nav:
- modules/ROOT/nav.adoc
asciidoc:
attributes:
lab_name: My Workshop
guid: '%GUID%'
ssh_user: lab-user
ssh_password: changeme
page-pagination: true
AsciiDoc Attributes and Variable Injection
At deploy time, Showroom replaces attribute placeholders with real runtime values from user_data.
This means you can write:
SSH to the bastion:
[source,bash,subs="attributes"]
ssh {ssh_user}@{bastion_public_hostname}
And the rendered page will show the actual username and hostname for each lab participant.
The full list of available attributes depends on what your infrastructure roles write into user_data.
See User Data and Variables for the complete flow.
Provide sensible defaults in antora.yml so the content renders correctly during local development and in CI previews.
See the Attribute Injection Example page for a live demonstration of attribute injection.
|
Antora Playbook (site.yml)
Your content repo needs an Antora playbook file — typically site.yml.
This file tells Antora where to find your content, which UI theme to use, and where to write the output.
Do not modify site.yml.
It contains settings that must not change — the UI theme, extensions, and output path are managed by the template.
All content-specific configuration (AsciiDoc attributes, navigation, component metadata) belongs in content/antora.yml.
|
The Showroom Antora container image auto-detects the playbook at build time, preferring site.yml and falling back to default-site.yml.
You can override the filename in your AgnosticV config:
ocp4_workload_showroom_content_antora_playbook: site.yml
Navigation (nav.adoc)
The content/modules/ROOT/nav.adoc file defines the sidebar navigation:
* xref:index.adoc[Lab Overview]
* xref:module-01.adoc[1. Getting Started]
* xref:module-02.adoc[2. Deploy the Application]
Pages not listed in nav.adoc are still accessible by URL but will not appear in the sidebar (unless dev-mode is enabled).
Dev Mode
Dev mode is a built-in diagnostic tool that every content developer should enable during development. When active, it:
-
Adds an Attributes reference page listing every AsciiDoc attribute and its current value — invaluable for verifying that variable injection works correctly.
-
Shows unlisted pages (pages not in
nav.adoc) in the sidebar under a Dev Mode section, so you can navigate to work-in-progress pages without adding them to the navigation yet.
Enabling dev mode
Add a single line to your catalog item’s dev.yaml:
| OCP4 workload | VM workload |
|---|---|
|
|
Always enable dev mode in dev.yaml, never in common.yaml or prod.yaml.
It is a development-time aid and must not be visible to end users in production.
|
The working examples in tests/showroom-ocp4/dev.yaml and tests/showroom-vm/dev.yaml in agnosticv both enable dev mode — use them as a reference.
|
You can also expose dev mode as a catalog parameter so it can be toggled from the demo.redhat.com order form. See OCP4 Dev Mode or VM Dev Mode for the full variable reference and catalog parameter examples.
In local development
Dev mode is not available when running Antora locally.
The dev-mode.js extension is bundled inside the Showroom Antora container image and injected at build time — it is not part of the content repository.
To verify your AsciiDoc attributes locally, inspect content/antora.yml directly or deploy to RHDP with dev mode enabled.
Local Development
Option 1: Podman / Docker (recommended)
cd your-content-repo
podman run --rm --name antora -v $PWD:/antora -p 8080:8080 -i -t ghcr.io/juliaaano/antora-viewer
On SELinux-enabled systems, append :z to the volume mount:
podman run --rm --name antora -v $PWD:/antora:z -p 8080:8080 -i -t ghcr.io/juliaaano/antora-viewer
Open http://localhost:8080 in your browser. Live reload is not supported — stop and restart the container after making changes.
Option 2: Podman Compose (live reload)
If your template includes a podman-compose.yaml:
podman-compose up --build
Open http://localhost:8080. Edit content files and refresh the browser to see changes.
Adding External Links
You can add links to external resources (documentation, product pages, etc.) in the Showroom UI links dropdown.
Add them to content/antora.yml:
asciidoc:
attributes:
page-links:
- url: https://docs.redhat.com
text: Red Hat Documentation
- url: https://access.redhat.com
text: Red Hat Customer Portal
Extensions
Showroom content images include the Mermaid extension for Antora, which lets you embed diagrams and visualizations written in text directly in your AsciiDoc pages.
Add the extension to your site.yml playbook:
antora:
extensions:
- require: '@sntke/antora-mermaid-extension' (1)
mermaid_library_url: https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs (2)
script_stem: header-scripts (3)
mermaid_initialize_options: (4)
start_on_load: true
| 1 | The Antora extension package (pre-installed in the Showroom Antora image). |
| 2 | The Mermaid JS library loaded by the browser. |
| 3 | Injects the script tag into the HTML <head>. |
| 4 | Mermaid initialisation options — start_on_load renders diagrams automatically. |
Then use a [mermaid] block in your AsciiDoc pages:
[mermaid]
\....
sequenceDiagram
autonumber
participant a as Alice
participant b as Bob
a ->>+ b : Hello.
b -->>- a : Hi, there.
\....
The diagram above renders as:
AsciiDoc Experimental Features (UI Macros)
The experimental AsciiDoc attribute unlocks three UI macros for documenting user interactions: buttons, keyboard shortcuts, and menu selections.
These render with distinct styling so readers can instantly recognise interactive elements.
Enabling experimental
Add experimental: true to the asciidoc.attributes section of your content/antora.yml:
asciidoc:
attributes:
experimental: true
The template already includes experimental: true in the default content/antora.yml.
In AsciiDoc, setting an attribute to an empty string ('') is equivalent to true — both forms activate the experimental macros.
|
Button Macro — btn:[]
Use the button macro to represent a clickable UI button.
| AsciiDoc source | Rendered output |
|---|---|
|
Press Save to commit your changes. |
|
Click OK or Cancel. |
Keyboard Macro — kbd:[]
Use the keyboard macro to display key presses and shortcuts.
Separate individual keys with +.
| AsciiDoc source | Rendered output |
|---|---|
|
Press Enter to confirm. |
|
Copy text with Ctrl+C and paste with Ctrl+V. |
|
On macOS, use ⌘+Shift+P to open the command palette. |
|
Press Ctrl+Alt+Delete to open the security screen. |
Menu Macro — menu:[]
Use the menu macro to describe a sequence of menu selections.
The top-level menu goes before the colon; submenus and the final item go inside the square brackets, separated by >.
| AsciiDoc source | Rendered output |
|---|---|
|
Select . |
|
Navigate to to create a new project. |
|
Open to manage extensions. |
|
Go to to change the editor theme. |
Creating Content with AI Tools
The RHDP Skills Marketplace provides skills for generating and validating Showroom content using Claude Code or Cursor IDE.
Install the marketplace skills, then use:
| Skill | What it does |
|---|---|
|
Generate workshop modules from reference materials with AsciiDoc formatting. |
|
Generate presenter-led demo content with Know/Show structure. |
|
Validate content against Red Hat standards (style, AsciiDoc, scaffold files). |
|
Convert completed modules into blog posts. |
See the RHDP Skills Marketplace README for setup instructions.
Next Steps
-
UI Configuration — configure the tab layout, terminal tabs, and embedded consoles.
-
AgnosticV Configuration — wire your content repo into an AgnosticV catalog item.
-
User Data and Variables — understand how runtime variables become AsciiDoc attributes.