Skip to content

ZenML

ZenML's production website — 2,224 pages across 20 CMS collections — was stuck on Webflow.

Core trick

Exports CMS content via API, converts it to standard Markdown, validates it against Zod schemas, and builds about 2,200 static pages.

Tags

Description

ZenML's production website — 2,224 pages across 20 CMS collections — was stuck on Webflow. No version control, no CI/CD, expensive, and migrating manually would take months. I built the replacement during this hackathon using Claude Code with Opus 4.6. It runs on Astro v5 + Cloudflare Pages: content exported via Webflow API, transformed to Markdown, validated against 20 Zod schemas, deployed as ~2,224 static pages in 33s. Seven Preact islands handle interactivity, including a faceted research hub with Pagefind search across 1,453 entries. Live at zenml-io-v2.pages.dev. Opus handled the hard parts: it audited its own schema plan and caught 7 issues before I'd built a page. It noticed Webflow's HTML would break MDX parsing and switched all 1,904 files to standard Markdown unprompted. After hitting parity with the original it went further — redesigning the LLMOps database with features Webflow couldn't support, then fixing its own accessibility bugs. 120 commits, 6 phases, open source.
zenml-io/zenml-io-v2★ 00 forksTypeScriptApache-2.0Created Feb 10, 2026 · last push Oct 27, 2026

README excerpt

# ZenML Website (zenml.io)

The [zenml.io](https://www.zenml.io) marketing website — an Astro static site hosted on Cloudflare Pages. ~2,200 pages across 21 content collections, built in ~33 seconds.

Markets two sub-products under one paid umbrella (ZenML Pro):
- **ZenML** — ML workflow orchestration
- **Kitaru** — durable runtime for AI agents (folded in May 2026; see `MERGE_PLAN.md`)

## Quick Start

### Prerequisites

- [Node.js](https://nodejs.org/) 22+ (matches CI)
- [pnpm](https://pnpm.io/) 10+

### Run locally

```bash
pnpm install
pnpm dev       # Dev server at http://localhost:4321
pnpm build     # Production build (~2,200 pages)
pnpm preview   # Serve dist/ through the local Cloudflare Workers runtime
```

### Other commands

```bash
pnpm check              # Astro + TypeScript checks for site source
pnpm check:tests        # Type-check tests, Vitest config, and dist smoke script
pnpm check:surface      # Verify pages/components declare their analytics surface
pnpm check:alt          # Verify image alt-text coverage
pnpm check:blog-covers  # Verify every blog post points at its content/blog/<slug>/ AVIF + JPEG cover
pnpm lint               # Biome linter
pnpm test               # Run Vitest once
pnpm build              # Production build (~2,200 pages)
pnpm smoke:dist         # Smoke-test dist/ after pnpm build
pnpm check:worker       # Exercise dist/ through the production-format Worker
pnpm check:worker-bindings -- metadata.json
                        # Verify a

Team