Multi-tenant blog platform · Cloudflare-native

Write once.
Publish to every SaaS you run.

One writing studio for your team. A headless API for your engineers. Every product you ship renders its own blog from a single platform — isolated by tenant, SEO-ready, and live on your domain in minutes.

No CMS to build Fully tenant-isolated 2-line embed
Acme SaaS New post
All128 Published96 Scheduled4 Drafts22 Pending3
PublishedJul 6
ScheduledJul 9
PublishedJul 4
DraftJul 3
PendingJul 1

Built on the Cloudflare developer platform

Workers D1 R2 Edge cache RSS & sitemap JWT SSO
Everything, one platform

A complete blog stack, without the rebuild

The pieces your writers and engineers actually need — designed to be shared across every product you ship.

Multi-tenant by design

One sign-in, a dropdown of every product. Write for one SaaS, switch to the next — each site fully isolated, down to every query and token.

Acme SaaS Globex Initech 12 more

Headless & framework-free

Each product renders its own blog from the versioned REST API — a two-line web-component embed, or the typed SDK in any framework.

<blog-post-list site="acme-saas" per-page="9"></blog-post-list>

Block editor

Headings, lists, quotes, tables, code & images — with drafts, scheduling, and private or password pages.

SEO out of the box

Per-post SEO title & meta, clean slugs, categories & tags, plus RSS and sitemap generated for you.

Media on the edge

Drop images into a post; they stream to R2 and serve on your domain, scoped per site.

Secure by tenant

Identity comes from your app — never a path or a shared table.

Host-issued JWT (SSO)Your app is the identity provider. Tenant & roles ride in the token.
Short-lived tokensEvery admin action is scoped to the chosen site and expires fast.
Role-based accessAdmin, editor, author — capabilities derived from role claims.
Headless by design

Render the blog your way

Your writers never touch code. Your engineers never touch a CMS theme. Pick the integration that fits each product and ship it in an afternoon.

Drop-in embed

A web component that renders anywhere HTML runs — no build step.

Typed SDK

Fully-typed client for Next.js RSC, Remix loaders, or plain scripts.

Plain REST

Cached, ETag-aware JSON endpoints when you want full control.

blog.html
<!-- the entire blog, in two tags --> <script type="module" src="https://blog.example.com/embeds.js"></script> <blog-post-list site="acme-saas" per-page="9" link-base="/blog"></blog-post-list>
import { createClient } from "@blog/sdk"; const blog = createClient({ baseUrl: "https://blog.example.com", site: "acme-saas", }); const { posts, meta } = await blog.listPosts({ perPage: 9 });
# public, cached, ETag-aware curl https://blog.example.com/v1/sites/acme-saas/posts \ ?per_page=9&render=html # → { "data": [ … ], "meta": { "total": 128 } }
The workflow

From blank page to published everywhere

Four steps your writer repeats for every product — no engineering handoff required.

1

Sign in once

One SSO session from your operator account gets you into the studio.

2

Pick the SaaS

Choose the product from the top-bar switcher — everything scopes to it.

3

Write & publish

Compose in the block editor. Save a draft, schedule it, or go live now.

4

It renders itself

The product's own site pulls the post from the API. Switch, repeat, done.

Ship your next blog
without building a CMS.

Give your team one studio and every product a blog. The platform handles tenancy, rendering, SEO, and delivery.