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.

  1. LINT — Parse YAML into a typed PageSchema. Validate required fields, section types, and semantic axes. Returns structured errors and warnings.
  2. SCAFFOLD — Walk the schema and build a classless RenderNode tree. Each component has a dedicated .data.ts extractor and .scaffold.ts builder.
  3. 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.
  4. STYLE — Generate theme CSS and serialize the AnnotatedNode tree to complete HTML. Inlines everything into a single <style> block — no external requests except opted-in web fonts.
  5. 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.