Skip to content

Blog Publisher Pipeline

Turn your agents into a publishing team. This recipe sets up a pipeline where Bob drafts content, Cody handles technical formatting, and the final post auto-deploys to Cloudflare Pages.

  • Bob drafts blog posts from prompts or research notes
  • Cody formats as Astro-compatible MDX, adds frontmatter
  • Git commit triggers Cloudflare Pages auto-deploy
  • End-to-end: prompt → live post in < 10 minutes
  • OpenClaw swarm running (at least Bob + Cody)
  • Astro blog repo connected to Cloudflare Pages
  • GitHub integration enabled for your agents
  1. Create the blog repo structure

    blog/
    ├── src/
    │ └── content/
    │ └── posts/
    │ └── YYYY-MM-DD-slug.mdx
    ├── astro.config.mjs
    └── package.json
  2. Add the publish skill to Bob’s workspace

    Create ~/.openclaw/workspace/skills/blog-publish/SKILL.md:

    # Blog Publish Skill
    When asked to publish a blog post:
    1. Write the post content in MDX format
    2. Add frontmatter: title, description, date, tags
    3. Save to `src/content/posts/YYYY-MM-DD-slug.mdx`
    4. Commit and push to main branch
    5. Cloudflare auto-deploys on push
  3. Configure Cloudflare Pages

    • Connect your GitHub repo
    • Build command: npm run build
    • Output directory: dist
    • Auto-deploy on push to main
  4. Test the pipeline

    Ask Bob: “Write a blog post about [topic] and publish it.”

sequenceDiagram
participant J as Joseph
participant B as Bob
participant C as Cody
participant GH as GitHub
participant CF as Cloudflare
J->>B: "Write a post about RAG pipelines"
B->>B: Draft content
B->>C: "Format this as MDX for the blog"
C->>C: Add frontmatter, format code blocks
C->>GH: git commit + push
GH->>CF: Webhook trigger
CF->>CF: Build + deploy
CF-->>J: Live at blog.fluckiger.org
  • Keep drafts in Obsidian first — Bob can read from your vault, refine, then publish
  • Use tags consistently — helps with site navigation and SEO
  • Schedule publishing — set up a cron job for “publish draft posts every Monday”