Landing pages
pagers landing generates a single-page static site from one
landify.yaml — no Node.js, no JavaScript runtime, no build step beyond
the CLI itself. It is a port of the Go landify tool: strict YAML in,
self-contained HTML/CSS/SVG out.
pagers landing new --type product # scaffold an annotated landify.yaml
pagers landing validate # strict schema check
pagers landing build -o public/ # render the site
pagers landing preview --dir public # serve it locally
pagers landing themes # list the 64 built-in presets
Page types
Twelve layouts cover the common landing-page shapes. new -t <type>
scaffolds a commented starter config for each:
| Type | Use for |
|---|---|
product |
SaaS/product marketing page (default) |
waitlist |
Email capture before launch |
event |
Conference, meetup, webinar |
download |
App/binary download page |
app |
Mobile/desktop app showcase |
pricing |
Plans and tiers |
portfolio |
Personal portfolio |
docs |
Documentation/product docs landing |
faq |
FAQ / knowledge base |
team |
Team page |
status |
Status page |
linktree |
Link-in-bio page |
Every page is fully static — no JavaScript at all. Navigation, mobile menu, and theme are pure CSS driven by custom properties.
Theming
Two ways to set colors:
theme: <name>— one of 64 built-in presets (pagers landing themeslists them all; lookup is case-insensitive).--theme <name>onbuildoverrides the YAML value.theme:block — explicitbase,primary,secondary,neutral,info,warning,success,error, andradiusvalues. Empty fields merge with defaults.
From those eight colors the build derives a full token set — surface
tints/shades, readable foregrounds, borders, and semantic states — all
computed for WCAG contrast and emitted as plain hex --tokens in the
page's inline <style>. No color-mix(), no runtime theming.
landify.yaml structure
site:
name: My Product
description: One-line pitch
url: https://example.com # used for sitemap/robots/OG
mark: "🚀" # favicon + OG monogram
og: # optional social card
title: …
description: …
image: og.png
nav:
- label: Docs
url: https://docs.example.com
theme: ocean # or a theme: {…} block
hero: … # type-specific sections follow
Unknown fields are rejected — validate catches typos before build.
Build output
pagers landing build -o public/index.html writes into the output
directory:
| File | Contents |
|---|---|
index.html |
The rendered page — inline <style> carries only the :root theme tokens derived from theme: |
styles.css |
Shared stylesheet for all 12 page types (base + per-type rules) |
og/og.svg |
1200×630 social card, only when site.og is configured |
favicon.svg |
Theme-colored monogram (site mark or initial) |
robots.txt |
Allow-all + Sitemap: line when site.og.url is set |
sitemap.xml |
Single canonical URL with a trailing slash |
humans.txt |
Site credits + generation year |
site.webmanifest |
Web app manifest (name, colors, SVG icon) |
llms.txt |
llmstxt.org-style index for LLM crawlers |
Every file except index.html is write-if-absent: a robots.txt,
favicon.svg, or styles.css you place in the output directory is never
overwritten — drop in a customized file and rebuild freely. Delete it to
regenerate the default on the next build. index.html itself always
reflects the current landify.yaml.
The generated <head> already links favicon.svg, site.webmanifest,
and theme-color, and carries Open Graph/Twitter tags when site.og
is set. To rasterize the card to PNG for social previews:
rsvg-convert -o public/og/og.png public/og/og.svg
The examples/landing
directory in this repository is a working docs-type config —
./scripts/examples.sh --landing runs the full pipeline against it.
Commands
The full flag reference lives in Commands.