Forma

Your first Forma page

Create a page, set the slug and SEO, drop in snippets, and ship HTML — the whole Forma page workflow without a theme framework.

A Forma page is an HTML (or Markdown) document in SQLite. It is not a theme file, a builder JSON blob, or a WordPress “template + content” split. You write the page. Forma stores it. Apache can serve the published file.

Create the page

In Admin → Pages, add a filename such as about. That is the internal id. The public URL comes from the slug.

Open the META block at the top — or the SEO fields in the editor — and set at least:

  • title — what humans see
  • slug/about
  • seo_title — the <title> tag, usually shorter and more specific
  • seo_description — one sentence that earns the click
  • canonical if the automatic URL is not the one you want

Do not leave the homepage slug as a preview domain after launch. Forma uses the site URL to build canonicals, the sitemap, and social tags.

Write the document

You can ship a full HTML document with its own <head>, or a fragment that Forma wraps. This site’s homepage is a full document. Most interior pages are too, because they include the shared chrome:

[[site-head]]
[[site-header]]
…
[[site-footer]]

Those are snippets. Edit them once; every page that includes them updates together. If HTML cache is on, saving a snippet republishes the derived files.

Need a search box on the page? Drop in the built-in snippet:

[[search]]

Code fences keep that text literal. In prose, write [[!search]] when you want the characters [[search]] on the page instead of the live box.

Twig, only when it pays

If the page needs a loop — recent posts, a filtered list — Twig is there. Keep it boring:

{% for post in posts|slice(0, 3) %}
  <a href="/blog/{{ post.slug }}">{{ post.title }}</a>
{% endfor %}

HTML for structure. Snippets for reuse. Twig for data. That is the whole design system.

Publish

Save. If HTML cache is enabled, Forma writes fallback/about.html (or whatever the slug maps to) and Apache can serve it without waking PHP. Flush or rebuild if you have just changed sitewide SEO or chrome.

Then open the public URL, view source, and check the title, description, and canonical. Fifteen seconds. That is the page workflow.