Recipe: Content and marketing operations
2min read
TL;DR: From a content brief, this playbook drafts a piece with an agent, saves it to Notion or your CMS as a draft, then parks with metaphor.waitForInput for reviewer Approve / Request changes. On approve it publishes to Webflow or your CMS. Trigger is manual or a new brief; outputs are a draft, a durable review gate, and an optional publish.
Who this is for
Marketing and content teams that want a consistent draft-review-publish pipeline.
What you'll need
- Connectors: Notion (or CMS), Webflow (or publishing API), Slack (optional notifier).
- Secrets: Notion token, CMS/Webflow API key, Slack token (stored in Secrets — never hardcoded).
- Trigger: Manual run, or a webhook when a brief is created.
How to build it with Ask Ballet
- Open the Console on Home.
- Paste the prompt below; set your brand voice and review channel.
- Review the plan and confirm.
- Connect Notion/CMS, Webflow, and Slack.
Build a playbook that takes a content brief (topic, audience, keywords, outline) as
input. Draft a 600-800 word article in our brand voice with a title and meta
description. Save it as a draft page in Notion. Then call metaphor.waitForInput with
prompt "Approve draft for publish?", details (title, draft link, summary), and choices
Approve / Request changes — do not busy-wait or poll Slack. On Approve, publish to
Webflow as a draft post. On Request changes, stop and notify #content-review.
Optionally have a Slack notifier wake the run via POST /api/runs/:id/reply.
What the playbook does
- Manual/webhook trigger — accepts the brief input.
- Code step (draft) — generates the article and metadata from the brief.
- HTTP step (save draft) — creates the Notion/CMS draft.
- Code step (review gate) —
await metaphor.waitForInput({ prompt, details, schema })parks the samerunIduntil a reviewer Continues in Studio or a notifier replies. - HTTP step (publish) — on approve, pushes to Webflow/CMS; on reject, skips publish and notifies.
Variations and tips
- Feed this from Generate a content brief: that recipe produces the brief; this one drafts, reviews, and publishes from it.
- Keep a human approval gate with durable
waitForInput— not Console Allow/Ask mode and not a busy-loop. See pause and resume. - Pass the draft link and summary as
detailsso reviewers see the payload while Paused. - Store all CMS and Slack tokens in Secrets.
