Content Automation Pipeline
I tell a Claude agent an idea; it lands in Notion. A Claude Code job in GitHub Actions writes the post, fact-checks it, renders an on-brand image and writes the draft back to Notion. I review it there — and once approved, it is scheduled to LinkedIn for Tuesday or Thursday.
- Trigger
- Agent
- Tool / data
- Guardrail
- Human
⊘ Nothing posts until I approve it.
The problem
What this replaced
- 01Brainstorm a topic.
- 02Search for facts and verify them.
- 03Draft the post.
- 04Design carousel images by hand, on-brand, every time.
Who has this problem
Engineers and creators maintaining a technical brand through consistent publishing.
What it costs
Consistency drives reach, but one to two hours a day of manual production comes straight out of engineering time.
The build
What I built
Ideas are captured by talking to a Claude agent, which files each one in a Notion ideas database. A new idea triggers a Claude Code job running in GitHub Actions: it researches and fact-checks the topic with live web search, drafts the post, generates the carousel as HTML against my brand guidelines and renders it to an image with Playwright, then writes the draft and the image back to the Notion page for review. When I approve it in Notion, the post is scheduled automatically for the next Tuesday or Thursday slot.
Keep a consistent publishing cadence without the writing and design eating engineering time — while nothing goes out that I have not read.
Capabilities
- 01Idea capture through a Claude agent into Notion
- 02Claude Code job in GitHub Actions, triggered by a new idea
- 03Live web search for facts and fresh data
- 04Brand-guideline HTML rendered to images with Playwright
- 05Draft written back to Notion for review
- 06Approved posts auto-scheduled for Tuesday and Thursday
How it runs
The workflow
- in
Trigger
An idea, told to a Claude agent and stored in the Notion ideas database.
- 01
The new idea triggers a Claude Code job in GitHub Actions
- 02
Research and fact-check the topic with live web search
- 03
Draft the post — hook, body, close
- 04
Generate the carousel as HTML from the brand guidelines; render it with Playwright
- 05
Write the draft and image back to the Notion page, status: ready for review
- 06
I review in Notion; on approval it is scheduled for the next Tuesday or Thursday
- out
Output
A reviewed, on-brand LinkedIn post with its visuals, scheduled without any manual design or posting work.
Components
- Claude agent — idea capture
- Notion database — ideas, drafts and review status
- Claude Code in GitHub Actions — writing and rendering
- Live web search (Tavily)
- Brand guidelines → HTML → Playwright render
- LinkedIn scheduling — Tuesday and Thursday
The guardrail
What it is not allowed to do
⊘ Boundary
Nothing posts until I approve it.
Drafting is grounded in live search results rather than model recall, which is what keeps factual errors out of published technical content. The agent can write, render and fill in Notion — it cannot publish. Scheduling only happens after I mark the draft approved, so nothing goes out under my name that I have not read.
Stack
What it is built on
- Runtime
- Claude CodeGitHub Actions
- Workspace
- Notion database
- Search
- Tavily
- Rendering
- HTML generationPlaywright
- Publishing
- LinkedIn — Tue & Thu schedule
Hard parts
What made it difficult
- 01
Generating layouts that stay on-brand across wildly different content lengths.
- 02
Grounding claims well enough that technical readers do not catch errors.
- 03
Keeping visual consistency without hand-designing each asset.
Outcome
What changed
2h → 15 min
daily production time
Content production time fell from one to two hours a day to under fifteen minutes — mostly the review.
A steady Tuesday and Thursday cadence without anyone remembering to post.
Search-grounded drafting reduced factual errors in published technical posts.
The output is public — the posts are on my LinkedIn profile.
Get in touch
Building an agent that has to survive production?
I write about MCP design, evals and guardrails on LinkedIn most days. If you're working on something similar, I'm happy to talk shop.