Content Generation Workflow

Overview

This document describes the end-to-end workflow for creating content using the AI-assisted content generation system. The workflow combines automated scheduling, AI drafting, human review, and multi-platform publishing.

Workflow Diagram

┌─────────────────────────────────────────────────────────────────────────┐
│                        Weekly Content Workflow                           │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  MONDAY 9:00 UTC                                                        │
│  ┌──────────────────┐                                                   │
│  │  GitHub Actions  │                                                   │
│  │  Calendar Check  │                                                   │
│  └────────┬─────────┘                                                   │
│           │                                                              │
│           ▼                                                              │
│  ┌──────────────────┐    ┌──────────────────┐                          │
│  │  Scan Calendars  │───▶│  Create Issues   │                          │
│  │  for Due Content │    │  for Due Items   │                          │
│  └──────────────────┘    └────────┬─────────┘                          │
│                                   │                                      │
│  MONDAY-THURSDAY                  ▼                                      │
│  ┌──────────────────┐    ┌──────────────────┐                          │
│  │  Assign Issue    │───▶│  Draft Content   │                          │
│  │  (Human/Copilot) │    │  (AI-Assisted)   │                          │
│  └──────────────────┘    └────────┬─────────┘                          │
│                                   │                                      │
│                                   ▼                                      │
│  ┌──────────────────┐    ┌──────────────────┐    ┌──────────────────┐  │
│  │  Validate Draft  │───▶│  Human Review    │───▶│  Schema Check    │  │
│  │  Against Schema  │    │  & Edit          │    │  (CI Workflow)   │  │
│  └──────────────────┘    └────────┬─────────┘    └────────┬─────────┘  │
│                                   │                       │             │
│  PUBLISH DAY                      ▼                       │             │
│  ┌──────────────────┐    ┌──────────────────┐            │             │
│  │  Merge to Main   │───▶│  Jekyll Build    │◀───────────┘             │
│  │  (PR Approved)   │    │  & Deploy        │                          │
│  └──────────────────┘    └────────┬─────────┘                          │
│                                   │                                      │
│  POST-PUBLISH                     ▼                                      │
│  ┌──────────────────┐    ┌──────────────────┐    ┌──────────────────┐  │
│  │  Social Posts    │───▶│  Update Calendar │───▶│  Close Issue     │  │
│  │  (Repurposing)   │    │  Status          │    │                  │  │
│  └──────────────────┘    └──────────────────┘    └──────────────────┘  │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

Phase 1: Calendar Check (Automated)

When It Runs

What It Does

  1. Scans Calendar Files
    // Checks all YAML files in calendar/ directory
    const calendarDir = 'calendar';
    const files = fs.readdirSync(calendarDir, { recursive: true });
    
  2. Finds Due Content
    • Looks ahead 7 days (configurable via days_ahead)
    • Filters for status: planned only
    • Ignores published and in-progress items
  3. Creates GitHub Issues
    • One issue per due content item
    • Includes context for AI drafting
    • Applies labels: content, copilot, type-specific labels

Issue Format

## Content Request from Editorial Calendar

**Type**: blog
**Title**: The State of AI Coding Assistants in 2026
**Due Date**: 2026-01-09
**Publish Date**: 2026-01-13
**Priority**: high

### Description
Comparing Claude Code, GitHub Copilot, Cursor, and emerging tools

### Topics
- ai-development
- tools
- industry-analysis

### Platforms
- blog
- twitter
- linkedin

---

### For Copilot

Use the following resources:
- Brand voice: `brands/zircote/brand.yml`
- Blog template: `brands/zircote/templates/blog-post.prompt.md`
- Schema: `schemas/blog.schema.yml`

Save draft to: `content/blog/drafts/2026-01-09-the-state-of-ai-coding-assistants.md`

---
*Auto-generated from calendar/2026/q1.yml*

Phase 2: Content Drafting

Step 1: Gather Context

# Read the issue for requirements
gh issue view <issue-number>

# Load brand configuration
cat brands/zircote/brand.yml

# Review the template
cat brands/zircote/templates/blog-post.prompt.md

Step 2: Research (For News Integration)

For posts with news_integration: true:

  1. Check news sources from calendar
  2. Search for recent developments
  3. Note 2-3 relevant news items
  4. Include citations in draft

Step 3: Generate Draft

Using Claude Code or similar AI:

Based on the following context, generate a blog post draft:

**Title**: The State of AI Coding Assistants in 2026
**Target Word Count**: 2000
**Topics**: ai-development, tools, industry-analysis

**Brand Voice** (from brands/zircote/brand.yml):
- Tone: technical, practical, direct, helpful
- Style: Write from hands-on experience, show code examples
- Audience: Software architects, backend developers, DevOps engineers

**Structure Requirements**:
1. Hook/Introduction (150-200 words)
2. Main sections (3-4 major points)
3. Code examples where relevant
4. Practical takeaways
5. Call to action: "What's your preferred AI coding setup?"

**News to Incorporate**:
- [Recent development 1]
- [Recent development 2]

Step 4: Save Draft

# Save to drafts directory
# Format: YYYY-MM-DD-slug.md
content/blog/drafts/2026-01-09-the-state-of-ai-coding-assistants.md

Option B: Manual Drafting

  1. Open issue for context
  2. Create new file in content/blog/drafts/
  3. Use templates/blog-post.md as starting point
  4. Write content following brand guidelines
  5. Reference topics from issue

Draft File Format

---
layout: post
title: "The State of AI Coding Assistants in 2026"
date: 2026-01-13
author: Robert Allen
categories: [ai-development, tools]
tags: [claude-code, copilot, cursor, ai-assistants]
description: "Comparing Claude Code, GitHub Copilot, Cursor, and emerging tools"
image: /assets/images/blog/2026/ai-coding-assistants.png
canonical_url: https://www.zircote.com/blog/2026/01/13/ai-coding-assistants
---

<!-- Content here -->

Phase 3: Review and Validation

Automated Validation

On PR creation, the validate-content.yml workflow:

  1. Checks Frontmatter
    • Required fields present
    • Date format correct
    • Categories valid
  2. Schema Validation
    • Validates against schemas/blog.schema.yml
    • Reports errors in PR comments
  3. Link Checking
    • Verifies internal links
    • Flags broken external links

Human Review Checklist

Update Issue Status

# Update calendar status
# In calendar/2026/q1.yml, change:
# status: planned → status: in-progress

# Comment on issue
gh issue comment <number> --body "Draft submitted: #<pr-number>"

Phase 4: Publishing

Pre-Publish Steps

  1. Merge PR to main
    gh pr merge <number> --merge
    
  2. Verify Build
    • GitHub Pages builds automatically
    • Check Actions tab for success
  3. Verify Live
    • Visit published URL
    • Test all links
    • Check mobile rendering

Post-Publish Steps

  1. Update Calendar
    # Change status
    status: published
    
    # Add published URL
    published_url: "https://www.zircote.com/blog/2026/01/13/slug"
    
  2. Close Issue
    gh issue close <number> --comment "Published: <url>"
    

Phase 5: Social Repurposing

Generate Social Posts

Use prompts/blog-to-social.prompt.md:

Given this blog post, create social media versions:

**Source**: [Blog post content]

**Target Platforms**:
1. Twitter/X (280 chars, 2-3 tweet thread)
2. LinkedIn (professional, 1000-1500 chars)
3. Bluesky (300 chars, conversational)

**Include**:
- Link to full post
- Relevant hashtags
- Call to action

Platform-Specific Prompts

Each platform has a dedicated template:

Platform Template Character Limit
Twitter templates/social/twitter.prompt.md 280
LinkedIn templates/social/linkedin.prompt.md 3000
Bluesky templates/social/bluesky.prompt.md 300
Mastodon templates/social/mastodon.prompt.md 500

Scheduling

Use your preferred social media scheduler:

Friday Roundup Workflow

Special Process for Weekly Digests

THURSDAY
┌──────────────────┐
│  Curate News     │
│  from Sources    │
└────────┬─────────┘
         │
         ▼
┌──────────────────┐
│  Select 3-5      │
│  Top Stories     │
└────────┬─────────┘
         │
         ▼
┌──────────────────┐
│  Draft Using     │
│  Recurring.format│
└────────┬─────────┘
         │
FRIDAY   ▼
┌──────────────────┐
│  Post to All     │
│  Platforms       │
└──────────────────┘

Curating News

  1. Check Sources (see NEWS-SOURCES.md)
    • Anthropic Blog
    • OpenAI Blog
    • HuggingFace
    • AgFunder
    • GitHub Blog
  2. Selection Criteria
    • Relevance to audience
    • Recency (within 7 days)
    • Actionability (can readers use this?)
    • Uniqueness (not covered elsewhere)
  3. Format Output
    🗞️ Friday Roundup - Week 2
    
    🤖 AI Development:
    - Claude 4 adds extended thinking with 128K output tokens
    - LangChain releases v0.3 with improved agent framework
    
    🌾 Agriculture Tech:
    - New USDA grants for precision agriculture
    
    🛠️ Developer Tools:
    - GitHub Actions now supports M4 Mac runners
    
    What caught your attention this week?
    

Video Content Workflow

Pre-Production

  1. Script from Calendar
    • Use title and description as outline
    • Reference related blog post if exists
  2. Recording
    • Screen capture for demos
    • Talking head for explanations
    • Keep under 5 minutes for demos

Post-Production

  1. Edit and Export
  2. Create Thumbnail
  3. Write Description
    • Include links to related content
    • Add timestamps for longer videos

Publishing

Emergency Content Updates

Urgent News Response

When major news breaks that affects your content areas:

  1. Evaluate Relevance
    • Does it fit content pillars?
    • Is it actionable for audience?
    • Time-sensitive?
  2. Create Ad-Hoc Issue
    gh issue create --title "[URGENT] Analysis: Major AI Announcement" \
      --label "content,urgent" \
      --body "Breaking news requires immediate response..."
    
  3. Fast-Track Review
    • Expedited review process
    • Same-day publish if critical

Rescheduling Content

When planned content must be delayed:

  1. Update Calendar
    status: rescheduled
    rescheduled_from: 2026-01-13
    rescheduled_reason: "Major news requires priority coverage"
    
  2. Update Issue
    gh issue comment <number> --body "Rescheduled due to priority content"
    
  3. Reschedule for Next Available Slot

Workflow Metrics

Track These Metrics

Metric Target Where to Track
Calendar to Issue < 24 hours GitHub Actions logs
Issue to Draft < 3 days Issue comments
Draft to Published < 2 days PR timeline
Publishing consistency 90%+ on-time Calendar status
Social engagement Platform analytics Twitter/LinkedIn analytics

Weekly Review

Every Friday: