AI content pipeline with human approval
GitHub Actions workflows where Claude researches and drafts blog posts daily, and nothing publishes until a human approves it in the CMS.
The publishing engine behind this site: scheduled GitHub Actions where Claude
Code researches, writes, and validates blog posts — with a human-approval gate
built out of nothing but a draft flag and how GitHub tokens work.
The approval trick
Every automated post lands on main as draft: true, which every page,
listing, and feed filters out — so the draft is versioned and reviewable but
invisible. The workflows commit with the built-in GITHUB_TOKEN, and GitHub
never triggers workflows from those pushes, so a bot commit can’t deploy.
Publishing happens when I open the CMS, review the post in a live preview, and
flip Draft off — my save is a normal commit that triggers the deploy. No
custom approval system, no queue, no extra state: the git provenance of the
commit is the approval gate.
The writers
- Daily roundup — researches the last 24 hours of AWS and cloud-security news from primary sources and writes a ~500-word practical digest.
- Weekly evergreen set — three writers run in sequence in one job (a tutorial, an AWS service spotlight, a security deep-dive), each surveying existing posts first so they never overlap.
- Bulk front-loader — fills each collection toward a target count from a deduplicated topic backlog, for seeding a new content type.
Every writer must pass npm run build — the same Zod frontmatter validation
the site uses — before anything is committed, so a malformed post can’t land.
Downstream automation
Approving a post in the CMS is also the trigger for syndication: a workflow diffs the approval push, finds posts whose draft flag flipped off, and shares them to X — with a per-post opt-out toggle right next to the Draft switch.