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:
weekis 1-5typeis valid enumtitleis non-emptydescriptionis non-emptydue_datebeforepublish_date(if both present)publish_dateis within the quarter’s date range
Date Validation Rules
- Due Date: Business day before or same as publish date
- Publish Date: Within the quarter’s calendar range
- 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
- Open the appropriate quarter file
- Find the correct month and week
- Add new post object with required fields
- Ensure
weeknumbers are sequential - 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"