Writing pages
How this site is built — file layout, frontmatter, navigation, and local preview.
This documentation site is plain Markdown compiled to static HTML. There is no CMS and no runtime
framework; if you can edit a .md file you can ship a docs change.
Repository layout
docs.json site config: branding, navbar, navigation
content/ every page, one .md file per page
index.md → /
quickstart.md → /quickstart/
connections/
postgresql.md → /connections/postgresql/
public/ static assets copied verbatim
images/ → /images/…
src/ styles.css and app.js
scripts/ the generator (build.mjs, dev.mjs)
dist/ build output — generated, not committed
The URL of a page is its path under content/, minus the extension. index.md becomes the site
root.
Frontmatter
Every page starts with a YAML block.
---
title: PostgreSQL
description: Connect a PostgreSQL database over Chartizer Cloud or a local agent.
navTitle: Postgres
---
| Key | Required | Purpose |
|---|---|---|
title |
yes | <h1>, browser title, search result title |
description |
recommended | Subtitle under the <h1>, meta description, search snippet |
navTitle |
no | Shorter label for the sidebar when title is long |
updated |
no | Overrides the automatic “last updated” date |
Do not write your own `# Heading`
The title frontmatter already renders the <h1>. Start the body at ## — otherwise the page
gets two competing top-level headings and the table of contents doubles up.
Add a page to the navigation
A file in content/ does nothing until it is listed in docs.json. Pages appear in the sidebar in
the order they are listed.
{
"navigation": {
"groups": [
{
"group": "Data catalogue",
"icon": "database",
"pages": [
"data-catalogue/overview",
"connections/postgresql"
]
}
],
"hidden": [
{
"group": "API reference",
"pages": ["api/authentication"]
}
]
}
}
- Groups are the collapsible sections in the sidebar, in the order listed.
iconaccepts any name from the built-in icon set (database,plug,folder,book,key,code,rocket,lock,sheet,globe,file,map,layers,sync,sparkles,terminal,table,users,chart,sliders,shield,share,message,mail). - Pages are paths under
content/, without.md. hiddengroups build normally — they are linkable, searchable, and get prev/next — but never appear in the sidebar. Use it for reference material that would otherwise clutter the nav, and link to it from the footer or from within a page.
There is one sidebar, always visible
The nav is a flat list of groups with no tab switcher above it, so every section is one click away from every page.
Missing files warn, they don't crash
Listing a page that does not exist prints ! missing content for: … during the build and skips it.
The rest of the site still builds.
Links and images
Internal links are absolute from the site root and keep their trailing slash:
See [Mappings](/data-catalogue/mappings/) for the full flow.
Images live in public/images/ and are referenced from the root. They are lazy-loaded and open in
a lightbox on click:

Wrap a screenshot in a frame to get a border and a caption:
::::frame The Overview tab after a successful sync

::::
Put screenshots at 2× and let CSS scale them
Retina screens are the common case. A 2000px-wide capture displayed at 1000px stays crisp.
Preview locally
npm install # once
npm run dev # http://localhost:4321, rebuilds and reloads on save
Build the static site for deployment:
npm run build # writes dist/
dist/ is plain HTML, CSS, JS, and images — serve it with anything: nginx, Caddy, S3, GitHub
Pages, Netlify.
Hosting under a subpath
If the site is served from https://chartizer.com/docs rather than a domain root, set baseUrl
once and every link, asset, and search result adjusts:
{
"baseUrl": "/docs"
}
Style conventions
- One
<h2>per idea; the table of contents is generated from<h2>and<h3>. - Lead with what the reader is trying to do, not with how the feature is built.
- Prefer a table over three paragraphs describing the same three options.
- Use callouts sparingly — a page where everything is highlighted highlights nothing.
- Reserve
:::dangerfor actions that lose data or expose it.
See Components for everything you can put on a page.