# Review & scheduling

How content gets planned, written, approved, and published — and where you
stay in the loop.

## What language a blog is written in

Each blog publishes in one language, chosen on the blog's settings page. It
is not a label stuck on top of English output: the planner, the writer and
the editor are all prompted **in that language**, from a prompt pack written
in it, so an article comes out as something written in Romanian rather than
something translated into it. The topic queue is planned in it too — the
phrases a reader actually types into a search box are not what translating an
English topic list produces.

The setting is also what the outside world is told:

- every server-rendered page declares it as `<html lang="...">`,
- the [delivery API](/docs/delivery-api) defaults `?locale=` to it,
- the featured image's `alt` text — which a screen reader announces mid-article
  — is written in it.

| Language | Tag |
|---|---|
| English | `en` |
| Deutsch (German) | `de` |
| Español (Spanish) | `es` |
| Français (French) | `fr` |
| Italiano (Italian) | `it` |
| Nederlands (Dutch) | `nl` |
| Português (Portuguese) | `pt` |
| Română (Romanian) | `ro` |

A site can run several blogs in different languages — one blog at `/blog`, one
at `/blog/ro` — and each is planned, written and served in its own.

:::callout{severity=warning title="Changing it moves the articles you already have"}
Articles already published move to the new language along with the blog, so
the archive keeps serving and none of its URLs break. What they *say* stays as
written until you regenerate or edit them.

Topics still queued from the old language are kept but no longer used — a
brief carries the language it was planned in, and generation only spends one
matching the blog. They stay in the queue, marked, in case you move back. Plan
topics again to fill it in the new language.
:::

Need a language that is not on the list? Ask for it. A language here is one
prompt pack, not a change to the product.

## The review queue

Every generated post lands in **pending review**. The post page shows:

- the full rendered preview (exactly the components readers will see),
- the **backlinks** the article carries — anchor text and target URL for
  each placement,
- the **generation trace** — every pipeline step with model, token counts,
  latency, and status.

**Approve & publish** makes the post live on your delivery surface within a
minute (CDN caches revalidate on a short window). Nothing ships without a
click unless you opt in to auto-publish.

:::callout{severity=warning title="Auto-publish is per blog, and off by default"}
Toggle it in the blog's schedule settings when you trust the output.
Scheduled generations then go straight to published. You can turn it off at
any time; posts already published stay published.
:::

## The topic queue

**Plan topics** asks the planner for article briefs grounded in your site
profile — title, target keyword, secondary keywords, and an outline. Briefs
arrive as *proposed*; you approve or reject them.

Approved briefs are consumed first — both by the scheduler and by the
**Generate now** button — before any ad-hoc topic planning happens. Keeping
a handful of approved briefs in the queue means you always know what's
coming next.

## Schedules

Each blog has one schedule:

| Setting | Values |
|---|---|
| Cadence | weekly · biweekly · monthly |
| Posts per period | 1–10 |
| Publish hour | 0–23, in the schedule's timezone |
| Timezone | any IANA zone, e.g. `Europe/Bucharest` |
| Paused | stops the schedule without losing its settings |

When a run is due, the scheduler creates the post (consuming an approved
brief if one exists), generates it, and routes it to review — or straight
to published with auto-publish on. The next-run time is always visible on
the blog page.

## Quotas and failure behavior

- Generation consumes one post credit at creation time; your plan's monthly
  quota and usage meter live on the site page
  ([plans & quotas](/docs/billing)).
- When quota runs out, the schedule **pauses itself** instead of failing
  silently or billing you by surprise.
- If a generation step fails, the post is marked *failed* with the error in
  its trace — a failed run doesn't publish anything half-finished.
