Content Platform
State of the Art
A semantic pipeline that turns YAML specs into production-ready HTML. Five deterministic stages. Zero runtime dependencies. One tool call to deploy.
Key Metrics
These are the numbers that define the pipeline's health. Some are measured from production data. Others are asserted from code analysis. The distinction matters.
5 pipeline stages
LINT → SCAFFOLD → ENRICH → STYLE → SNAPSHOT. Each stage is independent, testable, and produces a diffable artifact on disk.
Zero runtime dependencies
Output is a single .html file with all CSS embedded. No JavaScript, no CDN, no build tools required at runtime.
12 / 12 tests passing
Full integration test suite covers all 5 pipeline stages. Status — measured. Threshold — green.
1 theme, infinite pages
The ink theme applies to any content structure via semantic roles. Same CSS, any content, always correct.
Convention over config
Drop a YAML file in the project directory. Navigation is auto-injected. Output paths are derived. Nothing to wire.
Cloudflare Pages deploy
One tool call deploys every page as a single project. MD5-based deduplication — only changed files are uploaded.
Pipeline Architecture
Each stage is a pure function with a defined input and output artifact. Stages are independently runnable and produce diffable output on disk.
- LINT — Parse YAML into a typed
PageSchema. Validate required fields, section types, and semantic axes. Returns structured errors and warnings. - SCAFFOLD — Walk the schema and build a classless
RenderNodetree. Each component has a dedicated.data.tsextractor and.scaffold.tsbuilder. - ENRICH — Resolve semantic roles (
hero-heading,btn-primary,feature-card) and layout hints (layout-3col,width-narrow) into CSS class names via the enricher map. - STYLE — Generate theme CSS and serialize the
AnnotatedNodetree to complete HTML. Inlines everything into a single<style>block — no external requests except opted-in web fonts. - SNAPSHOT — Capture a full-page screenshot using headless Chromium for visual regression testing and deployment previews.
Every stage writes its artifact to rendered/. Intermediate outputs are inspectable, diffable, and independently reproducible. Run any stage in isolation with its MCP tool.
Components
Six section types cover the full surface area of a content page. Each has typed variants, semantic axes, and a dedicated scaffold.
Hero
Full-bleed or centered headline sections. Supports overline, heading, subheading, and CTA button groups. Variants — centered, split, full-bleed.
Features
Grid layouts for capability lists, metrics, or comparisons. Material cards or accent-border style. Variants — grid-2, grid-3, grid-4, list.
Content
Markdown prose with full typographic support — headings, ordered and unordered lists, inline code, code blocks, tables, blockquotes. Variants — prose, narrow, wide.
CTA
Conversion sections with heading, supporting copy, and one or more action buttons. Variants — centered, split, banner.
Navigation
Cross-page nav rendered into the left sidebar in docs layout, or a sticky top bar in standard layouts. Supports logo, links, and a CTA button.
Footer
Page footer with logo, link groups, social links, and copyright. Variants — simple, detailed, newsletter.
Deploy
Gutenberg deploys to Cloudflare Pages via direct upload. A project is defined by a single gutenberg.yaml file. All .yaml files in the same directory are auto-discovered as pages.
1. Define your project
project:
name: my-site
2. Build all pages
The build tool runs the full pipeline for every page. It auto-discovers specs, lints all pages to gather titles, builds a shared navigation structure, injects nav into each page, and writes HTML to rendered/.
3. Publish to Cloudflare Pages
The publish tool reads the rendered directory and deploys to Cloudflare Pages using direct upload. Assets are content-addressed — only changed files are uploaded. Returns a live deployment URL.
Required credentials — set as environment variables: CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN with Pages write access.
API Reference
Nine MCP tools covering the full pipeline. Individual stage tools for inspection and debugging. Project-level tools for production builds and deploys.
lint
Parse and validate a YAML spec. Returns a typed PageSchema and a structured list of errors and warnings.
scaffold
Build a classless RenderNode tree from a PageSchema. Produces the structural skeleton of the page with no CSS decisions.
enrich
Resolve semantic roles and layout hints into CSS class names. Produces an AnnotatedNode tree ready for serialization.
style
Serialize an AnnotatedNode tree to complete HTML with embedded theme CSS. Single file, no external dependencies.
snapshot
Capture a full-page screenshot in headless Chromium. Supports custom viewport width and height for responsive testing.
build
Run the full pipeline for all pages in a project. Auto-discovers specs, injects shared navigation, writes all HTML to rendered/.
publish
Deploy the rendered/ directory to Cloudflare Pages. Content-addressed — only uploads changed assets. Returns the live deployment URL.
create_project
Create or verify a Cloudflare Pages project by name. Idempotent — safe to call multiple times.
list_projects
List all Cloudflare Pages projects in the account. Useful for verifying deployment targets before publishing.