> EmDash's multi-site architecture lets agencies run dozens of SEO-optimized blogs from a single CMS instance — turning blog management into a subscription service that local businesses pay $200-$2,000/month for, with zero marginal infrastructure cost per tenant.

The Problem

Local businesses know they need SEO content to compete. Dentists, salons, plumbers, and real estate agents all rank for high-value local keywords. But none of them want to write blog posts. The math is brutal: a single SEO-optimized post takes 3-6 hours to research and draft. Publishing three posts per week would require a half-time content manager at $25,000-$40,000/year — more than most small businesses can justify.

The result is a massive gap between what local businesses need and what they can afford. They know content drives traffic. They know traffic drives leads. But they cannot hire writers, manage SEO tools, or maintain a custom CMS.

Existing solutions fall into two inadequate buckets:

- **DIY blog platforms** (WordPress, Wix): Charge $15-$50/month for hosting, but require the business owner to write or commission their own content. The platform solves hosting, not the content problem.

- **Content agencies**: Charge $2,000-$5,000/month for managed blogging. Excellent output, but priced out of reach for a single-location dental practice or boutique salon.

Neither model addresses the core contradiction: small businesses need professional-grade SEO content at commodity prices.

The EmDash Solution

EmDash's architecture is uniquely suited to bridge this gap. Three technical properties make it possible to run a content-as-a-service business on top of a single EmDash instance: multi-site routing, D1 tenant isolation, and the Auto Blog/SEO plugin.

**Multi-site routing via Cloudflare Workers.** Each tenant gets their own subdomain or custom domain. A single EmDash deployment on Workers routes requests to the correct site based on the Host header. The agency deploys once and manages 10, 50, or 200 sites from one codebase.

**D1 tenant isolation with shared schema.** Each tenant's blog lives in its own D1 database, or in a database sharded by a tenant_id column. The schema is identical — posts, pages, SEO metadata, plugin configuration — but the data is isolated. A query across all tenants for aggregate metrics uses a single UNION query. This keeps operational costs near zero while providing full data segregation.

**Auto Blog/SEO plugin as the content engine.** The same plugin that generates the AIKit blog automatically adapts to each tenant's keyword universe. The agency configures per-tenant keywords, industry vertical, and brand voice. The plugin generates and publishes SEO-optimized posts on a configurable schedule — daily, weekly, or monthly — without human intervention.

Architecture Overview

The multi-tenant content platform sits on a lean infrastructure stack that costs less than a monthly coffee tab to run:

```

Tenant A (dentist-blog.com) ──┐

Tenant B (salon-blog.com) ──┤──▶ Cloudflare Workers ──▶ EmDash CMS ──▶ D1 (per tenant)

Tenant C (plumber-blog.com) ──┘ (Host routing) (single inst.) (isolated DB)

```

Each tenant request flows through Workers (hostname-based routing) → EmDash (shared CMS instance, tenant-aware rendering) → D1 (tenant's own database for full data isolation). The agency runs one Workers deployment, one EmDash instance, and N D1 databases — one per tenant. Billing is handled separately through Stripe subscriptions with per-tenant line items.

Implementation: From Zero to Multi-Tenant

Setting up a new tenant takes roughly 15 minutes of engineering time, after which the Auto Blog/SEO plugin handles all content production.

1. Tenant Database Creation

Each tenant gets a dedicated D1 database. The standard EmDash post schema applies:

```bash

npx wrangler d1 create tenant_dentist_avenue

npx wrangler d1 execute tenant_dentist_avenue --remote --file=./schema.sql

```

The schema includes the standard post table plus tenant metadata for brand customization and keyword targeting.

```sql

CREATE TABLE ec_posts (

id TEXT PRIMARY KEY,

slug TEXT NOT NULL,

title TEXT NOT NULL,

content TEXT NOT NULL DEFAULT '[]',

excerpt TEXT DEFAULT '',

status TEXT DEFAULT 'draft',

category TEXT DEFAULT 'uncategorized',

tags TEXT DEFAULT '[]',

created_at TEXT DEFAULT (datetime('now')),

published_at TEXT DEFAULT NULL,

UNIQUE(slug, locale)

);

```

2. Workers Route Configuration

The Workers router maps each tenant's domain to their D1 binding. Tenant configuration is stored in a KV namespace for hot-reloadable updates:

```javascript

// In the Workers entrypoint — routes requests by Host header

const TENANT_MAP = {

"dentist-avenue-blog.com": "db_dentist_avenue",

"salon-finder-blog.com": "db_salon_finder",

};

export default {

async fetch(request, env) {

const url = new URL(request.url);

const tenant = TENANT_MAP[url.hostname];

if (!tenant) return new Response("Not Found", { status: 404 });

// Route to EmDash with tenant context

return env.EMDASH.render(request, { db: env[tenant], brand: url.hostname });

}

}

```

3. Auto Blog Plugin Configuration

Each tenant receives a keyword list and brand voice template entered through the EmDash admin UI or a management API. The Auto Blog/SEO plugin reads these at generation time and produces posts targeting the configured keywords in the tenant's voice. The agency configures branding once — logo URL, color palette, meta description template — and the plugin applies it to every generated post.

Revenue Math

The economics of multi-tenant content commerce are compelling because infrastructure scales sub-linearly while revenue scales linearly with tenant count:

| Metric | Value |

|--------|-------|

| Cost per tenant (infra) | $0.10-$0.50/month |

| Average subscription price | $642/month |

| Infrastructure for 28 tenants | ~$200/month |

| Gross margin at 28 tenants | 99.7% |

| Annual revenue at 28 tenants | $216,000 |

| CAC payback period | 1-2 months (self-serve signup) |

At 28 tenants and an average $642/month, the agency pulls in $18,000/month. The entire tech stack — Workers, D1 databases, EmDash plan, domain registrations — costs under $200/month. The only non-zero-marginal-cost item is customer acquisition. A self-serve signup flow with a 7-day free trial brings CAC down to near zero for the lower tiers.

Compare this to a traditional content agency with three writers. Writers cost $9,000-$12,000/month. The EmDash model replaces writer salaries with the Auto Blog/SEO plugin's LLM generation — 95% lower labor cost per post with the same SEO outcomes.

Key Takeaways

- **EmDash's multi-site architecture is a sales channel multiplier.** One CMS instance serves 50+ tenant blogs at near-zero marginal cost per tenant. The agency's only scaling variable is customer acquisition.

- **The Auto Blog/SEO plugin removes the content bottleneck.** Per-tenant keyword configuration replaces per-tenant writing. Configure once per tenant, collect recurring revenue indefinitely.

- **Cloudflare Workers + D1 keep infrastructure invisible.** No servers, no database management, no CDN config. The agency deploys once and adds tenants by adding D1 databases — a 5-minute operation.

- **Revenue compounds with tenant count at media margins.** 28 tenants at ~$642/month average = $216K/year revenue with sub-$3K/year in infrastructure. This is a 72x margin business disguised as a CMS reseller.

- **The same pattern works for any vertical.** Dentists, salons, plumbers, real estate agents — each vertical is a new sales channel accessible through targeted keyword lists. The agency expands TAM with every vertical added.