Builder guide

Build a marketing website backed by Slab5 CMS

We built the Slab5 marketing site on Slab5 CMS. This post walks through how, why, and what to copy.

Why a headless CMS module instead of a hosted CMS SaaS

Most early marketing sites do not need a per-seat editorial UI. They need: a place to define content collections with typed fields, an API to read content from a Next.js or Astro app, an editorial workflow with revisions, and a way to let drafting agents propose updates.

Slab5 CMS gives all of that, and it lives in the same workspace as your CRM (for lead capture), Tasks (for editorial follow-ups), and Support (for inbound questions from the site). One workspace, one audit log, one set of credentials.

Step 1 — Create a CMS site and collections

Create a site (POST /v1/cms/sites) and then create the collections you need: pages, sections, blog posts, FAQs, pricing plans. Each collection takes a JSON schema for its fields. Keep schemas tight — typed strings, explicit arrays, markdown where it matters.

Step 2 — Draft entries as drafts

Write entries with status: "draft". Drafts are reachable through the API but should be filtered out of your production rendering. When you are ready to publish, call update_entry with status: "published". Every status transition creates a revision in the audit log.

Step 3 — Render through REST

Your rendering layer (Next.js, Astro, plain Node) calls GET /v1/cms/entries?collection_id=...&status=published and renders pages from the structured fields. Bake the markdown to HTML server-side; cache aggressively; revalidate on webhook events.

Step 4 — Wire drafting agents through MCP

Give a drafting agent an MCP client with cms:write scope but not cms:publish — the agent can propose, you publish. Use the audit log to review what the agent touched.

What we learned dogfooding

The CMS module is enough to power a real product marketing site. The harder problem is editorial taste, and Slab5 does not solve that for you — but it does keep your content, your leads, and your follow-ups in one workspace with one credential model.

Agent workflow

Drafting agent uses search_entries, create_entry, and update_entry with cms:write scope. Publishing remains a human step.

API workflow

Website calls GET /v1/cms/entries?collection_id=...&status=published. Status transitions via PATCH /v1/cms/entries/{id} or update_entry_status. Webhooks fire on entry.published for cache revalidation.

cmscrmtasks