Editorial Calendar Reference

Overview

Editorial calendars are YAML files that define the content schedule for a given quarter. They specify what content to create, when to publish it, and provide context for AI-assisted generation.

File Location

calendar/
├── 2026/
│   ├── q1.yml    # January 1 - March 31
│   ├── q2.yml    # April 1 - June 30
│   ├── q3.yml    # July 1 - September 30
│   └── q4.yml    # October 1 - December 31
└── schema.yml    # Validation schema (optional)

File Format

Top-Level Structure

# 2026 Q1 Editorial Calendar
# Theme: "AI-Assisted Development & Smart Agriculture"
# Focus: Active projects + weekly news curation

quarter: "2026-Q1"
theme: "AI-Assisted Development & Smart Agriculture"
goals:
  - Establish bi-weekly publishing cadence
  - Weekly news/trends roundup (Fridays)
  - Deep-dive active projects (git-adr, claude-spec, agriculture tools)
  - Build engaged community around AI development workflows

recurring:
  # Recurring content series definitions

months:
  january:
    # Monthly content schedule
  february:
    # ...
  march:
    # ...

news_sources:
  # News source definitions for weekly roundups

Field Reference

Root Fields

Field Type Required Description
quarter string Yes Quarter identifier in format “YYYY-Q#”
theme string Yes Overarching theme for the quarter
goals list[string] Yes 3-5 strategic goals for the quarter
recurring object No Recurring content series definitions
months object Yes Monthly content schedules
news_sources object No External news sources for curation

Recurring Content

recurring:
  weekly_digest:
    name: "Friday Roundup"
    description: "Curated news on AI development, agriculture tech, and open source"
    schedule: every_friday
    type: social
    platforms: [twitter, linkedin, bluesky]
    content_sources:
      - ai_development: ["Anthropic blog", "OpenAI news", "HuggingFace", "LangChain"]
      - agriculture_tech: ["AgFunder", "Precision Ag", "AgriTech Tomorrow"]
      - developer_tools: ["GitHub blog", "Dev.to", "Hacker News"]
    format: |
      🗞️ Friday Roundup - Week 

      🤖 AI Development:
      - 
      - 

      🌾 Agriculture Tech:
      - 

      🛠️ Developer Tools:
      - 

      What caught your attention this week?
Field Type Description
name string Display name of the series
description string Series description for context
schedule enum every_friday, every_monday, bi_weekly, monthly
type enum blog, social, video, newsletter
platforms list[string] Target platforms
content_sources object Categorized source lists
format string Template with `` placeholders

Monthly Structure

months:
  january:
    theme: "New Year Planning & git-adr Launch Campaign"
    posts:
      - # Post 1
      - # Post 2
      # ...
Field Type Description
theme string Monthly sub-theme
posts list[Post] Ordered list of content items

Post Object

Complete Example

- week: 2
  type: blog
  title: "The State of AI Coding Assistants in 2026"
  description: "Comparing Claude Code, GitHub Copilot, Cursor, and emerging tools"
  topics:
    - ai-development
    - tools
    - industry-analysis
  status: planned
  due_date: 2026-01-09
  publish_date: 2026-01-13
  platforms: [blog, twitter, linkedin]
  priority: high
  pillar: ai-development
  word_count: 2000
  cta: "What's your preferred AI coding setup?"
  repo: zircote/git-adr
  news_integration: true

Post Fields

Field Type Required Default Description
week integer Yes - Week number within the month (1-5)
type enum Yes - Content type (see below)
title string Yes - Content title
description string Yes - Brief description for context
topics list[string] No [] Topic tags for categorization
status enum No planned Lifecycle status
due_date date No - Draft completion deadline (YYYY-MM-DD)
publish_date date No - Target publication date (YYYY-MM-DD)
platforms list[string] No [blog] Publication platforms
priority enum No medium Priority level
pillar enum No - Content pillar category
word_count integer No 1500 Target word count for blogs
cta string No - Call-to-action text
repo string No - Related GitHub repository (owner/name)
news_integration boolean No false Include current news in content

Enumerated Values

Content Types

Value Description Typical Word Count
blog Long-form blog post 1000-3000
social Social media post 50-280
video Video content N/A
newsletter Email newsletter 500-1000

Status Values

Value Description Next Status
planned Scheduled, not started in-progress
in-progress Draft being written review
review Ready for review published
published Live on website -
skipped Intentionally not published -
rescheduled Moved to future date -

Priority Levels

Value Description Flexibility
critical Must publish on date None
high Target date preferred 1-2 days
medium Flexible within week 3-5 days
low Can be rescheduled Unlimited

Content Pillars

Value Description Target %
developer-tools git-adr, claude-spec, marketplace 25%
ai-development AI workflows, LLM tools, industry 42%
agriculture-tech NSIP, LambLedger, IoT 23%
community Retrospectives, announcements 10%

Platforms

Value Character Limit Notes
blog Unlimited Jekyll site
twitter 280 Threads supported
linkedin 3000 Article format available
bluesky 300 Growing platform
mastodon 500 Instance-dependent
youtube N/A Video content

News Sources Section

news_sources:
  ai_development:
    - name: "Anthropic Blog"
      url: "https://www.anthropic.com/news"
      rss: true
    - name: "OpenAI Blog"
      url: "https://openai.com/blog"
    - name: "HuggingFace Blog"
      url: "https://huggingface.co/blog"
    - name: "LangChain Blog"
      url: "https://blog.langchain.dev"

  agriculture_tech:
    - name: "AgFunder News"
      url: "https://agfundernews.com"
    - name: "Precision Ag"
      url: "https://www.precisionag.com"
    - name: "Future Farming"
      url: "https://www.futurefarming.com"

  developer_tools:
    - name: "GitHub Blog"
      url: "https://github.blog"
    - name: "Dev.to"
      url: "https://dev.to"
    - name: "Hacker News"
      url: "https://news.ycombinator.com"
Field Type Description
name string Display name of source
url string Source URL
rss boolean Whether RSS feed is available

Content Summary Comments

Each calendar should end with a summary comment block:

# Q1 Content Summary:
# - 18 blog posts (6 AI industry analysis, 12 project/technical)
# - 12 Friday Roundup news digests
# - Balanced mix: 45% AI development/industry, 25% dev tools, 20% agriculture, 10% community
#
# AI Industry Topics Covered:
# - State of AI coding assistants comparison
# - LLM context windows practical guide
# - AI agents evolution and patterns
# - MCP protocol ecosystem analysis
# - AI in production lessons
# - AI developer toolkit survey

Validation

Required Fields Checklist

For each post:

Date Validation Rules

  1. Due Date: Business day before or same as publish date
  2. Publish Date: Within the quarter’s calendar range
  3. Week Alignment: Week number should roughly match the date

Schema Validation

Use the optional calendar/schema.yml to validate:

# Example validation command (requires yq or similar)
yq eval 'select(. != null)' calendar/2026/q1.yml

Examples

Minimal Blog Post

- week: 1
  type: blog
  title: "2025 in Review"
  description: "What I built and learned this year"
  status: planned

Full Blog Post

- week: 3
  type: blog
  title: "AI-Powered ADR Drafting with git-adr and Claude"
  description: "How git-adr integrates with Claude Code for architecture decisions"
  topics:
    - git-adr
    - claude-code
    - ai-development
  status: planned
  due_date: 2026-01-16
  publish_date: 2026-01-20
  platforms: [blog, twitter, linkedin]
  priority: high
  pillar: ai-development
  word_count: 1800
  cta: "Enable AI drafting in your git-adr workflow"
  repo: zircote/git-adr
  news_integration: false

Friday Roundup (Social)

- week: 2
  type: social
  title: "Friday Roundup - Week 2"
  description: "Weekly curated news digest"
  status: planned
  publish_date: 2026-01-10
  platforms: [twitter, linkedin, bluesky]
  news_integration: true

Video Content

- week: 3
  type: video
  title: "Demo: Drafting an ADR with AI in 60 Seconds"
  description: "Quick walkthrough of git-adr's AI drafting feature"
  topics: [git-adr, demo]
  status: planned
  due_date: 2026-01-18
  platforms: [youtube, linkedin]
  priority: medium

Updating Calendars

Adding New Content

  1. Open the appropriate quarter file
  2. Find the correct month and week
  3. Add new post object with required fields
  4. Ensure week numbers are sequential
  5. Update summary comment if totals change

Rescheduling Content

# Before
- week: 2
  type: blog
  title: "Original Title"
  status: planned
  publish_date: 2026-01-13

# After
- week: 2
  type: blog
  title: "Original Title"
  status: rescheduled
  publish_date: 2026-01-20  # New date
  rescheduled_from: 2026-01-13  # Original date
  rescheduled_reason: "Needed more research time"

Marking Complete

# After publishing
- week: 2
  type: blog
  title: "Published Post"
  status: published
  publish_date: 2026-01-13
  published_url: "https://www.zircote.com/blog/2026/01/13/published-post"