# How it works

> Mental model: sites, headlines, drafts, posts, runs, taxonomy. The pull-based delivery model. Why Mentionwell is headless, not a CMS.

Mentionwell is a **headless content engine** with a public read-only API. Your destination site **pulls** content; Mentionwell never writes to your codebase.

## The data model

Five top-level objects live in Mentionwell's database. Most operations move data from one to the next.

- **Site** — one destination domain. Has a brand profile, taxonomy, delivery config, and an automation policy.
- **Taxonomy** — a tree of content clusters. Headlines get attached to nodes for topical authority + internal linking.
- **Headline** — a planned article. Has a target keyword, search intent, schedule, and lifecycle status (`proposed → approved → queued → generating → drafted → scheduled → published`).
- **Draft** — a generated article waiting on review. Includes HTML, Markdown, FAQs, JSON-LD, sources, and a measured cost.
- **Post** — a published article. Same shape as a draft plus `published: true` + `publishedAt`.

Plus **Run** (one execution of the planner / writer / critic / publish flow, with cost + duration) and **Job** (one worker run on the queue: onboarding, draft, publish, autopilot, refresh).

## The pipeline

```text
Site profile + taxonomy
        │
        ▼
   Headline ─────► Draft ─────► Post ─────► /api/public/.../posts
   (planner)      (writer +     (publish     (your site fetches)
                   critic)       flow)
```

Every step writes to the database; the API serves directly off the latest published row.

## Pull, not push

Older blog stacks **push** content into the destination (CMS → webhook → SSG rebuild → CDN). Mentionwell inverts that: your destination **pulls** on every revalidation. Three reasons:

1. **No deploy on every post.** You publish in Mentionwell and your site picks it up on its next ISR / SWR cycle. No CI run, no minutes burned.
2. **No coupling.** Your destination doesn't need a CMS adapter, plugin, or build-time content fetch. One API call replaces it.
3. **Caching is honest.** The API returns Cache-Control headers tuned for SWR. Your CDN takes care of the rest.

The optional webhook (see [Webhooks](/docs/webhooks)) is for cases where you want zero-second publishing — it just nudges your destination to revalidate the relevant paths.

## What lives where

| Concern | Where it lives |
|---|---|
| Article body (HTML, Markdown, JSON-LD, FAQ, TOC) | Mentionwell database, served via `/api/public` |
| Site chrome (header, footer, layout) | Your destination repo |
| URL structure (`/blog`, `/blog/[slug]`) | Your destination repo (typically) |
| SEO metadata for the article | Mentionwell returns it; your destination renders it into `<head>` |
| RSS / JSON Feed / sitemap | Mentionwell serves them; you link to them from your destination |
| Auth + roles | Mentionwell handles internal auth; your destination only needs the read API key |

## What Mentionwell is *not*

- Not a CMS. There's no rich-text editor for non-technical users; it's an AI editorial pipeline.
- Not a static site generator. Posts aren't built into your site at deploy time.
- Not a CDN. The reader API has caching headers; your destination's CDN does the actual edge serving.

> Once this model clicks, every weird symptom ("post isn't showing", "it's stale", "preview is fine but prod isn't") collapses to either: env var wrong, cache stale, or post not published yet. Treat those three as your first checks every time.


---

Canonical URL: https://mentionwell.com/docs/concepts
Live HTML version: https://mentionwell.com/docs/concepts
Section: Get started
Site index for AI ingestion: https://mentionwell.com/llms.txt
Full reference: https://mentionwell.com/llms-full.txt
