Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Content Publishing Pipeline

Your team wants to publish a blog post, case study, or guide. This procedure coordinates the entire pipeline — from creating a brief, through writing and review, to publishing and announcement. It keeps author, editor, designer, and publisher in sync without anyone playing project manager.

Use it when: Someone has a content idea that needs to go from draft to published. Works for blog posts, case studies, guides, announcements, and newsletters.

What makes it interesting: It has review loops — if the editor requests changes, the procedure sends the author back to drafting. It nudges authors who are falling behind on deadlines, and handles different content types (blog vs. newsletter) with different publishing checks.


Walkthrough

Header

id: content-publishing
version: 1
trigger: manual
category: Operations
 
# Content Publishing Pipeline
 
Take a content piece from idea through writing, review, design, and publishing.
Covers blog posts, case studies, and educational guides.

Input

The inputs capture the content brief. SEO keywords and a topic brief are optional but help the author get started faster.

## Input
 
| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| title | string | yes | | Working title |
| type | string | yes | | blog-post / case-study / guide / announcement / newsletter |
| author | string | yes | | Who's writing it |
| target_date | date | no | +2 weeks | Target publish date |
| brief | string | no | | Topic brief, angle, audience, key points |
| seo_keywords | string | no | | Target keywords |
| channel | string | no | #marketing | Slack channel for updates |

State

## State
 
| Field | Storage | Description |
|-------|---------|-------------|
| content_record | Notion DB row | Row in Content Calendar |
| draft_page | Notion page | The actual draft |
| current_step | invocation | Where we are |

Steps

Step 1 — Create the brief. Set up a Content Calendar entry and a draft page. If no brief was provided, the procedure creates a template for the author to fill in.

### create_brief
 
Create a row in the **Content Calendar** database with title, type, author,
status "Drafting", target date, and SEO keywords.
 
Create a Notion page for the draft. If brief provided, add it as the opening
section. Otherwise, add a template:
 
  ## Brief
  **Audience:** [who is this for?]
  **Angle:** [what's the unique take?]
  **Key points:** [3-5 bullet points]
  **CTA:** [what should the reader do next?]
 
DM {input.author}: "Content piece created: '{input.title}'. Draft page: [link].
Target: {input.target_date}."
 
→ write_draft

Step 2 — Wait for the draft. The procedure waits until one week before the publish date. If the author goes quiet for too long, it sends a reminder.

### write_draft
 
**Wait until**: {input.target_date} - 7d (one week before publish)
 
**On event** `draft_ready` → review
 
Periodic nudge if no event after 50% of time:
DM {input.author}: "Reminder: '{input.title}' draft is due soon."
 
→ review

Step 3 — Review. Post the draft for the team to review. If the reviewer requests changes, execution loops back to the writing step.

### review
 
Update content record status to "In Review".
 
Post in {input.channel}:
> 📝 Ready for review: **{input.title}**
> Author: {input.author} | Type: {input.type}
> Draft: [link]
> Please review and leave comments. React ✅ when approved.
 
**Wait**: 3d
- **On event** `approved` → prepare_publish
- **On event** `changes_requested`: DM author with feedback, → write_draft
- **On timeout**: Ping reviewer again, CC marketing lead.
 
→ prepare_publish

Step 4 — Prepare for publishing. Run content-type-specific checks before handoff to the publisher.

### prepare_publish
 
Update status to "Ready to Publish".
 
For blog-post or guide:
- Check SEO metadata (title tag, meta description, keywords)
- Check for at least one image/graphic
- If no image, request one in {input.channel}
 
For newsletter:
- Prepare email subject line and preview text
 
DM publisher: "'{input.title}' is ready to publish. All assets attached."
 
→ publish

Step 5 — Publish. Go live and announce to the company.

### publish
 
Update status to "Published". Set Published Date to today.
 
Post in {input.channel}:
> 🚀 Published: **{input.title}** — [URL]
> Author: {input.author}. Please share on socials!
 
Post in #general: "New on the blog: **{input.title}** — [link]"
 
→ done ✓

Output

## Output
 
| Field | Type | Description |
|-------|------|-------------|
| published_url | string | URL of the published piece |
| content_record_id | string | Notion page ID in Content Calendar |
| days_to_publish | number | Days from creation to publish |
| type | string | Content type |

Key Patterns

This procedure demonstrates patterns you can reuse:

  • Review loopschanges_requested sends the author back to drafting
  • Periodic nudges — the author gets reminded before deadlines
  • Content-type branching — different checks for blog posts vs. newsletters
  • Multi-role coordination — author, reviewer, designer, and publisher stay in sync
View full procedure file →