A single function that takes a target keyword, its brief, the working title and any human-written outline, and returns a title, a meta description, the markdown body and a described hero subject as validated JSON. It is told the publish gate's exact thresholds — 350-word floor, no leftover plan block, no H1 — so what comes back is publishable rather than a draft that needs a second pass. Real token usage produces the true cost recorded in the ledger.
Also called: AI blog posts · automated content writing · blog generator · content writing
- 1The house voice is passed as a cached system prompt; the task carries the keyword, volume, intent, SERP shape, the brief's angle, any existing outline, and the current top ten.
- 2The response is constrained to a JSON schema with four required fields.
- 3A refusal, an empty response, invalid JSON, a body under 350 words or a leftover plan block are each returned as a specific error rather than a bad post.
- 4Cost is computed from real input and output token counts, not the flat estimate used for the budget check.
- 5The caller saves the post as a draft, stamps generated_by, and starts the hero.
The header names what was missing: "THE WRITER (Keith 08-24) — the organ the SEO system was missing. Everything around authoring already existed: a scored keyword universe, SERP briefs, stage-gated priority, a publishing calendar, a gate that rejects unfinished drafts. The authoring step itself did not exist in any form, so every word of every post was typed by a human and the whole loop stalled there." Writing against the gate's thresholds is deliberate: "a draft that comes back is publishable rather than a draft that needs a second human pass to become one."
- Every other part of the content loop existed; the writing didn't, so nothing moved.
- Generated drafts arrived unfinished and needed a second human pass.
- Cost per post was a guess.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →