Markdown pages

The pages add-on serves markdown files as HTML — no database, no admin. Author them in your editor or with AI.

npm run dev -- --edit   # tick the "pages" add-on

Drop .md files in the pages/ directory (created automatically on first run). Each file is served at its slug:

pages/about.md     ->  /about
pages/pricing.md   ->  /pricing

Front-matter sets the page title:

---
title: About us
---

# About us

Written in **markdown**, served as HTML.

Pages are code-owned files (trusted), so their HTML renders as-is. A page with format: html in its front-matter is served verbatim (no markdown processing) — used by the WYSIWYG editor to preserve complex layouts. The router is mounted last, so your app routes always win; unknown slugs fall through to 404.

Per-page SEO (Open Graph + JSON-LD)

Front-matter drives the page head — no plugin needed:

---
title: About Us
description: Who we are.        # meta description + og:description
image: /media/og.webp           # og:image
type: article                   # og:type (default: website)
canonical: https://site.com/about
jsonld: {"@context":"https://schema.org","@type":"Article","headline":"About Us"}
---

The page emits Open Graph + Twitter tags and a <script type="application/ld+json"> block (JSON-LD is validated; < is escaped so it can’t break out of the script). The WYSIWYG editor has a SEO panel that sets these for you.

The home page

pages/index.md is your site's front page — it is rendered in your theme and served at / (taking over from the app's views/index.html). Delete it to fall back to the default home.