Search
Sitemap, canonical addresses and structured data.
- Changes
- How fast new pages are found.
- Tune
- The
seoblock in site.yaml.
Reference
Every section of a page has a form: plain text, a list, steps, cards, a table and so on. You never pick the form in a setting. HERON reads how the section is written and tells the theme which form it is, and the theme draws each form with its own module.
Below is every form this site's theme draws. Each one shows how to write it, the live result, the HTML the theme produces and the CSS behind it. Switch the colour dots to see how the same block looks in another palette.
A section starts with a heading and an anchor: ## Title {#anchor}. Everything up to the next heading of the same level belongs to it. HERON looks at what is inside and checks the rules in this order, the first match wins:
key | value without a separator are facts;### groups that each have a list: exactly two are two columns, three or more are cards;### groups without lists are questions;> without a list is a callout;A class in the anchor overrides the rules: {#tips .list}, {#guide .prose}, {#plans .checklist}. If the class does not fit the content, the section falls back to text and the build report says so. The full rules are in the contract.
Form · prose
Plain paragraphs, subheadings, links and code. Use it for explanations that read top to bottom. A long text section keeps its ### subheadings when you add the .prose class.
A HERON site is a folder of text files. You can read, copy and keep it in git, and nothing runs on the server except nginx.
Pages in content/, photos in media/, settings in site.yaml.
## Why a folder is enough {#why .prose}
A HERON site is a folder of text files. You can **read**, copy
and keep it in git, and nothing runs on the server except nginx.
### What is inside
Pages in `content/`, photos in `media/`, settings in `site.yaml`.
The theme receives the whole section as HTML (section.html) and draws it with modules/prose.html.
Form · list
A bulleted list. When an item starts with a bold term ending in a full stop, HERON splits it into a term and its explanation, and the theme can draw the term apart.
## What you get on the first build {#first-build}
- **Sitemap.** Every page, with the date it last changed.
- **llms.txt.** A short map of the site for AI assistants.
- **A real 404.** In every language, with the right answer code.
The theme receives items: a list of pairs term, text, links, and draws them with modules/list.html.
Form · steps
A numbered list. Each item is a step with a title, text and links. A tag in capitals in square brackets at the start becomes a label on the step.
heron new my-site -y makes the folder with demo pages.## From a folder to a live site {#path}
1. **Create.** `heron new my-site -y` makes the folder with demo pages.
2. **Fill in.** Change the texts, add photos, copy a page for a new one.
3. **[WHEN READY] Publish.** Build files or an image and publish it the way you chose.
The theme receives a list of steps n, tag, title, text, links and draws them with modules/steps.html.
Form · checklist
Three or more ### groups, each with a list. Every group becomes a card: its first paragraph is always visible, the list and anything after it open on click. A summary that starts with "Available.", "Coming soon." or "Paid." gets a badge.
Sitemap, canonical addresses and structured data.
seo block in site.yaml.Each language gets its own addresses.
Updates your server from new images.
## What HERON does for you {#does}
### Search
Sitemap, canonical addresses and structured data.
- **Changes.** How fast new pages are found.
- **Tune.** The `seo` block in site.yaml.
### Languages
Each language gets its own addresses.
- **Changes.** Each language ranks in its own country.
### Agent
Paid. Updates your server from new images.
- **Asks.** In Telegram, before every update.
The theme receives groups title, html, items and draws them with modules/cards.html. Card rows look even with 2, 3, 4, 6 or 8 cards.
Form · two-lists
Exactly two ### groups with lists. Written like cards, but meant as a contrast: suits / does not suit, before / after.
## Is HERON for you {#fit}
### Good fit
- Business sites, blogs and documentation.
- Several languages.
### Not the goal
- An online shop with a cart.
- Editing pages in a browser.
The theme receives the same groups as cards and draws them side by side with modules/cards.html.
Form · table
A markdown table with a separator line. Any number of columns. In this theme a cell that starts with + is highlighted as the strong side, and code in backticks stays code.
| Way | You do | Costs |
|---|---|---|
| git push | Edit and push | Free on GitHub |
| Docker Hub | Build and push an image | A server |
| Static files | Build and copy | Free on Pages |
marks where a tool is strong.
## Ways to store and publish {#ways}
| Way | You do | Costs |
|---|---|---|
| git push | Edit and push | + Free on GitHub |
| Docker Hub | Build and push an image | A server |
| Static files | Build and copy | + Free on Pages |
The theme receives head and rows and draws them with modules/table.html.
Form · faq
### groups without lists: the heading is the question, the text below is the answer. HERON also adds FAQPage structured data for search engines from this section.
No. Pages are text files with a few simple marks.
Yes. HERON is open source under AGPL-3.0.
## Questions {#faq}
### Do I need to know how to code?
No. Pages are text files with a few simple marks.
### Is it free?
Yes. HERON is open source under AGPL-3.0.
The theme receives pairs q, a and draws them as an accordion with modules/faq.html.
Form · facts
Lines key | value without a table header. Short data: format, price, duration, address.
## In short {#short}
Licence | AGPL-3.0
Image | ghcr.io/fmstm/heron:prod
Languages | as many as you need
The theme receives pairs key, value and draws them with modules/facts.html.
Form · callout
A quote > in a section without a list. One important note that should stand out from the text around it.
Run the strict build first: it stops on any warning, so a broken link never reaches visitors.
## Before you publish {#note}
> Run the strict build first: it stops on any warning,
> so a broken link never reaches visitors.
The theme receives the quote as HTML and draws it with modules/callout.html.
Some blocks of this site's theme are not separate forms: the theme recognises them by the anchor.
{#publish} or {#ship} with cards becomes tabs with a diagram beside them.{#story} with steps becomes slides that turn as you scroll.{#llms-gen} draws the llms.txt generator.{#learn} on the home page becomes a list of link cards.Another theme may draw the same sections differently: the content stays, the look changes. How to add a module of your own is in Theme and design.