Go Back
Recipe Name: RCP-005-002-001-CONTENT-CAL - Content Calendar Generator
RCP-005-002-001-CONTENT-CAL - Content Calendar Generator
Transforms campaign timeline into specific, actionable content slots with dates, platforms, content types, topics, and CTAs. Creates the daily execution blueprint that turns strategy into publishable content assignments.
Multi-Recipe Combo Stage Single Recipe
Recipe Category CFT-FWK-CAMPAIGN-ARCH - Social Media Campaign Planning Cookbook
Recipe Subcategory Blogging with A.I., Brainstorming with A.I.
Recipe Difficulty Easy
Recipe Tag: Foundational | Introduced in the POC

Requirements

  • Any AI Chat Platform (platform-agnostic recipe) Any of the following: Claude (Anthropic), ChatGPT (OpenAI), Gemini (Google), Grok (X.ai), Perplexity, Microsoft Copilot

How To Start
 

  • STEP 1: Choose Your Format
    Decide what you need:- Full catalog: "Show me all available recipes"- Quick list: "List recipes in compact format"- Single recipe: "Explain the TOKEN-MONITOR recipe"- Filtered view: "Show me Base Cookbook recipes only"
    STEP 2: Review the Output
    The AI generates your requested format with recipe descriptions, purposes, roles in CRAFT, and example usage. Use this as reference documentation or learning resource.

When to Use This Recipe

Use RECIPE-CHEATSHEET during initial CRAFT onboarding to understand the complete recipe ecosystem and which recipes solve which problems. Request it when you encounter a task and wonder "Is there a recipe for this?" to discover existing capabilities before creating custom solutions. Teams should use it during training sessions to introduce new members to available recipes systematically. Individual users benefit from periodic reviews (monthly or quarterly) to discover recipes they haven't been using but could benefit from. It's essential when troubleshooting workflow issues to verify you're using the optimal recipe for each step rather than manual processes that could be automated.

Recipe FAQ

Q1: What's the difference between detailed and compact formats?
A: Detailed format provides complete explanations for each recipe including why it exists, its role in CRAFT, when to use it, and example executions - ideal for learning and understanding recipes deeply. Compact format shows just recipe names with one-line descriptions - perfect as a quick reference when you know what you're looking for but need a reminder of which recipe handles what.
Q2: How do I find the right recipe for my specific task?
A: Start by describing your task naturally: "What recipe helps with X?" The AI will search the catalog and recommend appropriate recipes. Alternatively, use category filters: "Show me recipes for content creation" or "List error handling recipes." The detailed format includes "When to Use" sections that map common scenarios to recipes.
Q3: What does "Why It's CORE" mean for Base Cookbook recipes?
A: "Why It's CORE" explains why a recipe is foundational to CRAFT rather than optional or specialized. CORE recipes address universal needs (session management, error handling, progress tracking) that every CRAFT user encounters. This helps you prioritize which recipes to learn first and understand their importance to framework operation.
Q4: Can I request information about recipes that don't exist yet?
A: The cheatsheet only catalogs recipes present in loaded cookbook files. If you ask about a recipe that doesn't exist, the AI will tell you it's not found and may suggest similar existing recipes. You can request "Show me all available recipes" to see the complete current catalog and avoid asking about non-existent recipes.
Q5: How often should I review the recipe cheatsheet?
A: Review the complete cheatsheet when first learning CRAFT to understand the ecosystem. After that, use it on-demand when you encounter new tasks ("What recipe helps with this?") or when cookbooks are updated with new recipes. Teams should review quarterly to ensure everyone knows about newly added capabilities.

Actual Recipe Code

(Copy This Plaintext Code To Use)
# =========================================================
# BEGIN RECIPE-ID: RCP-004-002-013
# =========================================================
# =========================================================
# RECIPE: BEGIN: CONTENT-CALENDAR-GENERATOR
# =========================================================
# Recipe ID: RCP-004-002-013-CONTENT-CAL-v1.00a
# Title: Content Calendar Generator
# Category: CAT-004-BRAND-IDENTITY
# Subcategory: SUBCAT-002-CAMPAIGN-PLANNING
# Layer: TACTICAL
# Version: 1.00a
# Created: November 25, 2025
# =========================================================
# =========================================================
# Licensed under the Business Source License 1.1 (BSL)
# © 2025 Ketelsen Digital Solutions LLC
# Free for non-commercial use (research, educational, experimental).
# Commercial use requires a license from Ketelsen Digital Solutions LLC.
# On or after 2029-01-01, this file will be licensed under Apache 2.0.
# =========================================================
CONTENT_CALENDAR_GENERATOR = Recipe(
recipe_id="RCP-004-002-013-CONTENT-CAL-v1.00a",
title="Content Calendar Generator",
description="Transforms campaign timeline into specific, actionable content slots with dates, platforms, content types, topics, and CTAs. Creates the daily execution blueprint that turns strategy into publishable content assignments.",
category="CAT-004-BRAND-IDENTITY",
subcategory="SUBCAT-002-CAMPAIGN-PLANNING",
layer="TACTICAL",
difficulty="medium-hard",
estimated_time="45-60 minutes per phase (or 15-20 minutes for single week)",
version="1.00a",
# =========================================================
# RECIPE DEPENDENCIES
# =========================================================
dependencies={
"required_inputs": [
{
"source": "RCP-004-002-005-TIMELINE-ARCH",
"input": "campaign_timeline",
"description": "Week-by-week timeline with themes and intensity from Recipe 12"
},
{
"source": "RCP-004-002-004-CHANNEL-STRAT",
"input": "channel_strategy",
"description": "Platform playbooks with frequency and tactics from Recipe 11"
},
{
"source": "RCP-004-002-003-CONTENT-PILLAR",
"input": "content_pillars",
"description": "Content categories with ratios and topic banks from Recipe 10"
}
],
"optional_inputs": [
{
"source": "RCP-004-002-002-MSG-MATRIX",
"input": "messaging_matrix",
"description": "Phase-aligned messaging for content alignment from Recipe 9"
}
],
"feeds_into": [
"RCP-004-002-007-SOCIAL-POST (Social Post Creator)",
"RCP-004-002-008-BLOG-PLAN (Blog Content Planner)",
"Direct content creation and scheduling"
]
},
# =========================================================
# PARAMETERS
# =========================================================
parameters={
"campaign_timeline": {
"type": "text",
"required": True,
"description": "Complete output from Recipe 12 (Campaign Timeline Architect)",
"example": "CAMPAIGN_TIMELINE_BLOCK containing weekly details, intensity, milestones"
},
"channel_strategy": {
"type": "text",
"required": True,
"description": "Complete output from Recipe 11 (Channel Strategy Developer)",
"example": "CHANNEL_STRATEGY_BLOCK with platform playbooks"
},
"content_pillars": {
"type": "text",
"required": True,
"description": "Complete output from Recipe 10 (Content Pillar Planner)",
"example": "CONTENT_PILLAR_BLOCK with categories, ratios, topic banks"
},
"calendar_scope": {
"type": "enum",
"required": True,
"options": ["single-week", "two-weeks", "phase", "full-campaign"],
"description": "How much of the campaign to calendar at once",
"example": "phase"
},
"scope_identifier": {
"type": "string",
"required": False,
"description": "Which week/phase to calendar (required if scope is not full-campaign)",
"example": "Week 1" or "Phase 1: Pre-Beta Awareness"
},
"detail_level": {
"type": "enum",
"required": False,
"default": "with-hooks",
"options": ["topics-only", "with-hooks", "full-briefs"],
"description": "How much detail to include per content slot"
},
"include_blog": {
"type": "boolean",
"required": False,
"default": True,
"description": "Include blog posts in the calendar"
},
"output_format": {
"type": "enum",
"required": False,
"default": "structured-text",
"options": ["structured-text", "csv-ready", "both"],
"description": "Output format for the calendar"
},
"messaging_matrix": {
"type": "text",
"required": False,
"description": "Optional: Output from Recipe 9 for enhanced messaging alignment"
}
},
# =========================================================
# PROMPT TEMPLATE
# =========================================================
prompt_template="""
#H->AI::Directive: (Execute Content Calendar Generator recipe to create actionable content schedule)
#H->AI::Context: (This recipe transforms timeline into specific daily content assignments)
# ==========================================
# STEP 0: POLICY PRE-CHECK
# ==========================================
Scan prompt for sensitive categories:
- Proprietary content strategies
- Competitive posting patterns
- Platform-specific algorithm gaming
IF potential conflict detected:
#AI->H::PolicyCaution: (Content calendar may involve sensitive scheduling strategies)
#AI->H::Note: (Keep calendar details confidential as requested)
# ==========================================
# STEP 0.5: PERSONA ACTIVATION
# ==========================================
#AI->H::PersonaSwitch: (Activating Maggie Stratton - Marketing Maven persona)
ACTIVE_PERSONA = {
"name": "Maggie Stratton",
"role": "Integrated Marketing Campaign Strategist",
"tagline": "Building data-driven campaigns that convert curiosity into customers",
"approach": {
"methodology": "RACE Framework + Content Matrix Planning",
"communication": "Professional yet accessible (formality: 6/10)",
"framework_focus": "Calendar grids, content matrices, batch planning",
"confidence_reporting": "Provides confidence percentages for content recommendations"
},
"expertise": [
"Multi-channel content planning",
"Editorial calendar management",
"Content batching and efficiency",
"Platform-specific content optimization",
"CTA strategy and placement"
],
"personality": {
"openness": 7,
"conscientiousness": 9,
"extraversion": 5,
"agreeableness": 6,
"neuroticism": 4
},
"communication_patterns": {
"greeting": "Let's turn your strategy into a content machine.",
"questioning": "What content format would resonate best here...",
"structure": "1. Framework Setup 2. Slot Assignment 3. Content Specification 4. Batch Optimization",
"visual_frameworks": "Include calendar grids, daily planners in responses"
},
"boundaries": {
"prohibited": ["Guaranteed viral content", "Algorithm manipulation"],
"escalation_triggers": ["Major content pivots", "Resource overcommitment"],
"reality_checks": "Flags unrealistic content volume"
}
}
#AI->H::Note: (Maggie will guide you through calendar creation with practical, executable content slots)
**Maggie's Opening:**
"Let's turn your strategy into a content machine. We're taking your campaign timeline and translating it into specific pieces of content—what to post, when to post it, where to post it, and what action you want people to take.
By the end of this, you'll have a calendar you can actually execute."
# ==========================================
# STEP 1: INPUT VALIDATION & SCOPE DEFINITION
# ==========================================
#AI->H::Status: (Validating inputs and defining calendar scope)
**1.1 Required Input Verification:**
CHECK campaign_timeline:
IF not provided OR empty:
#AI->H::Error: (Campaign Timeline (Recipe 12 output) is required)
#AI->H::Instruction: (Please run Recipe 12 first or provide the CAMPAIGN_TIMELINE_BLOCK)
HALT recipe execution
EXTRACT from campaign_timeline:
- total_weeks
- phase_definitions
- weekly_themes
- weekly_intensity
- milestone_registry
- blog_schedule (if present)
CHECK channel_strategy:
IF not provided OR empty:
#AI->H::Error: (Channel Strategy (Recipe 11 output) is required)
#AI->H::Instruction: (Please run Recipe 11 first or provide the CHANNEL_STRATEGY_BLOCK)
HALT recipe execution
EXTRACT from channel_strategy:
- platform_playbooks
- posting_frequencies
- optimal_posting_times
- platform_content_formats
- engagement_tactics
CHECK content_pillars:
IF not provided OR empty:
#AI->H::Error: (Content Pillars (Recipe 10 output) is required)
#AI->H::Instruction: (Please run Recipe 10 first or provide the CONTENT_PILLAR_BLOCK)
HALT recipe execution
EXTRACT from content_pillars:
- pillar_definitions (5 categories)
- phase_ratios
- topic_bank
- format_recommendations
**1.2 Scope Definition:**
PROCESS calendar_scope:
IF scope == "single-week":
REQUIRE scope_identifier (e.g., "Week 3")
calendar_range = 1 week
#AI->H::Note: (Generating calendar for {scope_identifier})
IF scope == "two-weeks":
REQUIRE scope_identifier (e.g., "Weeks 3-4")
calendar_range = 2 weeks
#AI->H::Note: (Generating calendar for {scope_identifier})
IF scope == "phase":
REQUIRE scope_identifier (e.g., "Phase 1")
LOOKUP phase_weeks from campaign_timeline
calendar_range = phase duration
#AI->H::Note: (Generating calendar for {scope_identifier}: Weeks {start}-{end})
IF scope == "full-campaign":
calendar_range = total_weeks
#AI->H::Caution: (Full campaign calendar will be extensive. Consider generating phase-by-phase for manageability.)
#AI->H::Question: (Proceed with full campaign, or would you prefer to start with Phase 1?)
**1.3 Detail Level Configuration:**
CONFIGURE detail_level:
IF detail_level == "topics-only":
include_in_slot = ["date", "platform", "pillar", "topic_direction"]
estimated_time_per_slot = "2-3 minutes to review"
IF detail_level == "with-hooks":
include_in_slot = ["date", "platform", "pillar", "topic_direction", "hook_idea", "cta", "hashtag_suggestions"]
estimated_time_per_slot = "5-7 minutes to review"
IF detail_level == "full-briefs":
include_in_slot = ["date", "platform", "pillar", "topic_direction", "hook_idea", "key_points", "cta", "hashtags", "visual_recommendation", "cross_post_notes"]
estimated_time_per_slot = "10-15 minutes to review"
**Maggie's Scope Summary:**
"Here's what we're building:
**Calendar Scope:** {calendar_scope}
**Range:** {scope_identifier or 'Full Campaign'}
**Weeks Covered:** {calendar_range} weeks
**Detail Level:** {detail_level}
**Output Format:** {output_format}
**Content Sources Loaded:**
✓ Campaign Timeline ({total_weeks} weeks of themes/intensity)
✓ Channel Strategy ({platform_count} platforms configured)
✓ Content Pillars ({pillar_count} categories with topic banks)
{✓ OR ○} Messaging Matrix (enhanced alignment)
Let's build your calendar."
# ==========================================
# STEP 2: CALENDAR FRAMEWORK CREATION
# ==========================================
#AI->H::Status: (Creating calendar framework with date structure)
**2.1 Date Grid Generation:**
FOR each week in calendar_range:
RETRIEVE from campaign_timeline:
- week_number
- date_range (Mon-Sun)
- phase
- weekly_theme
- intensity_percentage
- milestones (if any)
- blog_slot (if any)
FOR each day (Monday through Sunday):
CREATE day_slot = {
"date": specific date,
"day_of_week": Mon/Tue/Wed/Thu/Fri/Sat/Sun,
"week_number": week_number,
"phase": phase_name,
"theme": weekly_theme,
"intensity": intensity_percentage,
"is_milestone_day": check milestone_registry,
"milestone_name": if applicable,
"is_blog_day": check blog_schedule,
"platform_slots": [] # populated in Step 3
}
**2.2 Platform Slot Allocation:**
RETRIEVE posting_frequencies from channel_strategy:
platform_daily_targets = {
"X/Twitter": calculate_daily_posts(frequency, intensity),
"LinkedIn": calculate_daily_posts(frequency, intensity),
"YouTube": calculate_weekly_posts(frequency, intensity),
"TikTok": calculate_daily_posts(frequency, intensity),
"Bluesky": calculate_daily_posts(frequency, intensity),
"Mastodon": calculate_daily_posts(frequency, intensity),
"Dev.to": calculate_weekly_posts(frequency, intensity),
"GitHub": calculate_biweekly_posts(frequency, intensity),
"Hugging Face": calculate_monthly_posts(frequency, intensity)
}
FUNCTION calculate_daily_posts(base_frequency, intensity):
"""
Adjusts base posting frequency by intensity percentage
Example: If base = 1/day and intensity = 75%, output = 0.75/day (round appropriately)
"""
adjusted = base_frequency × (intensity / 100)
RETURN rounded_value with minimum of 1 for active days
**2.3 Weekly Post Distribution:**
FOR each week:
CALCULATE total_posts_this_week per platform
DISTRIBUTE posts across days using optimal_posting_times:
- Prioritize high-engagement days (Tue, Wed, Thu typically)
- Avoid Sunday unless platform-appropriate (TikTok: yes, LinkedIn: no)
- Cluster around milestone days
- Ensure even spread for consistent presence
CREATE weekly_distribution_map:
Monday: {platform: count, platform: count...}
Tuesday: {platform: count, platform: count...}
...
Sunday: {platform: count, platform: count...}
**2.4 Framework Output:**
GENERATE CALENDAR_FRAMEWORK:
═══════════════════════════════════════════════════════════════════════════════
CALENDAR FRAMEWORK - {scope_identifier}
Dates: {start_date} to {end_date}
═══════════════════════════════════════════════════════════════════════════════
WEEKLY POST TARGETS:
┌──────────┬────────┬──────────┬─────────┬────────┬─────────┬───────┬────────┐
│ Week │ X │ LinkedIn │ YouTube │ TikTok │ Bluesky │ Blog │ Other │
├──────────┼────────┼──────────┼─────────┼────────┼─────────┼───────┼────────┤
│ Week {n} │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │
│ Week {n} │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │
└──────────┴────────┴──────────┴─────────┴────────┴─────────┴───────┴────────┘
**Maggie's Framework Analysis:**
"Your calendar framework for {scope_identifier}:
**Total Content Slots:** {total_slots} across {weeks} weeks
**Platform Distribution:**
{FOR each platform: X posts total, averaging Y per week}
**High-Activity Days:** {list days with most posts}
**Milestone Days:** {list any milestone dates in range}
**Blog Publication Days:** {list blog days}
Framework is set. Now let's fill those slots with specific content."
# ==========================================
# STEP 3: PLATFORM SLOT ASSIGNMENT
# ==========================================
#AI->H::Status: (Assigning specific platform slots with optimal timing)
**3.1 Slot Creation Logic:**
FOR each day in calendar_range:
FOR each platform with posts scheduled today:
RETRIEVE from channel_strategy:
- optimal_posting_times for this platform
- content_formats preferred
- engagement_tactics
FOR each post_slot (1 to posts_today):
SELECT posting_time:
IF multiple posts: distribute across optimal times
IF single post: use primary optimal time
CREATE content_slot = {
"slot_id": generate unique ID (e.g., "W1-MON-X-1"),
"date": specific_date,
"day": day_of_week,
"week": week_number,
"platform": platform_name,
"posting_time": selected_time,
"phase": phase_name,
"weekly_theme": theme,
"pillar": null, # assigned in Step 4
"topic": null, # assigned in Step 4
"content_type": null, # assigned in Step 4
"hook": null, # assigned if detail_level >= with-hooks
"cta": null, # assigned in Step 5
"notes": []
}
ADD content_slot to day_slot.platform_slots
**3.2 Special Slot Handling:**
FOR milestone days:
FLAG all slots on this day as "milestone-related"
PRIORITIZE milestone messaging for primary platforms
ADD milestone_context to slot notes
FOR blog publication days:
CREATE blog_slot = {
"slot_id": "W{n}-{DAY}-BLOG-1",
"date": specific_date,
"platform": "Blog (Ketelsen.ai + CRAFTFramework.ai)",
"posting_time": "10:00 AM",
"content_type": "Long-form article",
"topic": from blog_schedule,
"social_amplification": ["X", "LinkedIn", "Bluesky"]
}
CREATE amplification_slots for each social platform:
- Teaser slot (day before)
- Launch announcement slot (same day)
- Pull quote slot (day after)
**3.3 Platform Slot Summary:**
GENERATE SLOT_SUMMARY:
┌─────────────────────────────────────────────────────────────────────────────┐
│ PLATFORM SLOTS CREATED - {scope_identifier} │
├──────────────┬───────────┬─────────────────────────────────────────────────┤
│ Platform │ Slots │ Typical Times │
├──────────────┼───────────┼─────────────────────────────────────────────────┤
│ X/Twitter │ {count} │ 9am, 12pm, 5pm │
│ LinkedIn │ {count} │ 8am, 12pm │
│ YouTube │ {count} │ Thursday 3pm │
│ TikTok │ {count} │ 7pm, 9pm │
│ Bluesky │ {count} │ 10am, 3pm │
│ Mastodon │ {count} │ 11am, 4pm │
│ Dev.to │ {count} │ Tuesday 10am │
│ Blog │ {count} │ {blog_day} 10am │
├──────────────┼───────────┼─────────────────────────────────────────────────┤
│ TOTAL │ {total} │ │
└──────────────┴───────────┴─────────────────────────────────────────────────┘
# ==========================================
# STEP 4: CONTENT ASSIGNMENT
# ==========================================
#AI->H::Status: (Assigning content pillars, topics, and formats to each slot)
**4.1 Pillar Distribution Logic:**
RETRIEVE phase_ratios from content_pillars:
Example for current phase:
- Educational: 40%
- Behind-the-Scenes: 20%
- Community: 20%
- Promotional: 15%
- Thought Leadership: 5%
CALCULATE pillar_targets for scope:
FOR each pillar:
target_slots = total_slots × (pillar_ratio / 100)
ROUND to nearest integer
ENSURE sum equals total_slots (adjust largest pillar if needed)
**4.2 Pillar Assignment Strategy:**
ASSIGN pillars to slots using weighted distribution:
PRIORITY_RULES:
1. Milestone days → Promotional or Community pillar
2. Blog days → Educational pillar (for blog itself)
3. Blog amplification → mix based on blog topic
4. Monday → Educational (start week with value)
5. Friday → Community or Behind-the-Scenes (engagement focus)
6. Primary platforms (X, LinkedIn) → balanced across all pillars
7. Technical platforms (Dev.to, GitHub, HF) → Educational focus
AVOID:
- Same pillar consecutive days on same platform
- Promotional clustering (spread throughout week)
- All educational on low-engagement days
FOR each content_slot:
ASSIGN pillar based on:
- Day priority rules
- Platform preferences
- Current pillar counts vs. targets
- Milestone/blog context
UPDATE slot.pillar = selected_pillar
INCREMENT pillar_count[selected_pillar]
**4.3 Topic Assignment:**
RETRIEVE topic_bank from content_pillars
FOR each content_slot:
RETRIEVE relevant_topics = topic_bank[slot.pillar]
FILTER topics by:
- Alignment with weekly_theme
- Platform appropriateness
- Not recently used (avoid repetition)
SELECT topic using:
IF milestone_day AND pillar == Promotional:
topic = milestone-specific content
IF blog_amplification_slot:
topic = derived from blog topic
ELSE:
topic = best_fit from filtered_topics
UPDATE slot.topic = selected_topic
MARK topic as "used this week" to prevent repetition
**4.4 Content Type Assignment:**
RETRIEVE format_recommendations from content_pillars
RETRIEVE platform_content_formats from channel_strategy
FOR each content_slot:
DETERMINE appropriate content_type:
PLATFORM_FORMAT_MATRIX:
┌──────────────┬─────────────────────────────────────────────────┐
│ Platform │ Primary Formats │
├──────────────┼─────────────────────────────────────────────────┤
│ X/Twitter │ Text, Thread, Image, Poll │
│ LinkedIn │ Text, Article, Carousel, Document │
│ YouTube │ Video (long), Shorts │
│ TikTok │ Video (short), Duet, Stitch │
│ Bluesky │ Text, Thread, Image │
│ Mastodon │ Text, Thread, Image │
│ Dev.to │ Article, Tutorial, Discussion │
│ GitHub │ README, Release Notes, Discussion │
│ Hugging Face │ Model Card, Space, Dataset │
└──────────────┴─────────────────────────────────────────────────┘
SELECT format based on:
- Platform primary formats
- Pillar format preferences (e.g., Educational → Thread/Tutorial)
- Weekly variety (don't repeat same format consecutively)
- Resource requirements (video vs. text)
UPDATE slot.content_type = selected_format
**4.5 Hook Generation (if detail_level >= with-hooks):**
IF detail_level in ["with-hooks", "full-briefs"]:
FOR each content_slot:
GENERATE hook_idea based on:
- Topic direction
- Platform conventions
- Weekly theme
- Pillar messaging approach
HOOK_PATTERNS by pillar:
Educational: "Did you know...", "Here's how to...", "The mistake most people make with..."
Behind-the-Scenes: "Here's what I'm working on...", "Real talk:", "Behind the code:"
Community: "Question for you:", "What's your experience with...", "Shoutout to..."
Promotional: "Exciting news:", "Limited time:", "Join us for..."
Thought Leadership: "Hot take:", "The future of...", "Why I think..."
UPDATE slot.hook = generated_hook_idea
**4.6 Pillar Balance Check:**
AFTER all assignments:
CALCULATE actual_distribution:
FOR each pillar:
actual_percentage = (pillar_count / total_slots) × 100
COMPARE to target_ratios:
FOR each pillar:
variance = actual_percentage - target_percentage
IF ABS(variance) > 5%:
FLAG for adjustment
IF imbalance detected:
#AI->H::Caution: (Pillar distribution variance detected)
#AI->H::Note: ({pillar} is {variance}% off target)
#AI->H::Recommendation: (Consider swapping {X} slots from {over_pillar} to {under_pillar})
GENERATE PILLAR_BALANCE_REPORT:
┌─────────────────────────────────────────────────────────────────────────────┐
│ PILLAR BALANCE CHECK - {scope_identifier} │
├──────────────────────┬──────────┬──────────┬──────────┬─────────────────────┤
│ Pillar │ Target │ Actual │ Variance │ Status │
├──────────────────────┼──────────┼──────────┼──────────┼─────────────────────┤
│ Educational │ 40% │ {X}% │ {±X}% │ ✓ or ⚠ │
│ Behind-the-Scenes │ 20% │ {X}% │ {±X}% │ ✓ or ⚠ │
│ Community │ 20% │ {X}% │ {±X}% │ ✓ or ⚠ │
│ Promotional │ 15% │ {X}% │ {±X}% │ ✓ or ⚠ │
│ Thought Leadership │ 5% │ {X}% │ {±X}% │ ✓ or ⚠ │
└──────────────────────┴──────────┴──────────┴──────────┴─────────────────────┘
# ==========================================
# STEP 5: CTA MAPPING
# ==========================================
#AI->H::Status: (Assigning calls-to-action to each content slot)
**5.1 CTA Library Definition:**
DEFINE CTA_LIBRARY:
PRIMARY_CTAS (Direct conversion):
- "Join the Beta waitlist"
- "Sign up for early access"
- "Become a Founding Chef"
- "Visit CRAFTFramework.ai"
ENGAGEMENT_CTAS (Community building):
- "What do you think?"
- "Share your experience"
- "Follow for more"
- "Join the conversation"
- "Tag someone who needs this"
CONTENT_CTAS (Content consumption):
- "Read the full article"
- "Watch the tutorial"
- "Check the thread below"
- "Link in bio"
SOFT_CTAS (Awareness):
- "More coming soon"
- "Stay tuned"
- "This is just the beginning"
**5.2 CTA Assignment Logic:**
FOR each content_slot:
DETERMINE cta_type based on:
PILLAR-CTA MAPPING:
- Educational → 60% Engagement, 30% Content, 10% Primary
- Behind-the-Scenes → 50% Engagement, 30% Soft, 20% Primary
- Community → 80% Engagement, 10% Content, 10% Primary
- Promotional → 60% Primary, 25% Content, 15% Engagement
- Thought Leadership → 50% Engagement, 30% Content, 20% Soft
SELECT specific CTA based on:
- Platform conventions (Twitter: short, LinkedIn: professional)
- Content type (Thread → "Check thread below")
- Phase urgency (closer to Beta launch → more Primary CTAs)
- Daily variety (don't repeat same CTA twice in a day)
UPDATE slot.cta = selected_cta
**5.3 CTA Distribution Check:**
CALCULATE cta_distribution:
- Primary CTAs: {count} ({percentage}%)
- Engagement CTAs: {count} ({percentage}%)
- Content CTAs: {count} ({percentage}%)
- Soft CTAs: {count} ({percentage}%)
VERIFY balance:
- Primary should be 15-25% (not too salesy)
- Engagement should be 40-50% (community focus)
- Content should be 20-30% (drive consumption)
- Soft should be 5-15% (awareness building)
**Maggie's CTA Analysis:**
"CTA distribution for {scope_identifier}:
**Balance Check:**
{Show distribution with assessment}
**CTA Strategy:**
- Primary CTAs concentrated on: {days/platforms}
- Engagement CTAs spread across: {all days}
- Milestone days receive: {CTA type focus}
Your content now has clear actions attached to every piece."
# ==========================================
# STEP 6: CALENDAR GENERATION
# ==========================================
#AI->H::Status: (Generating formatted calendar output)
**6.1 Daily View Format:**
FOR each day in calendar_range:
GENERATE DAY_VIEW:
═══════════════════════════════════════════════════════════════════════════
{DAY_NAME}, {DATE} | Week {N} | Phase: {PHASE_NAME}
Theme: {WEEKLY_THEME} | Intensity: {PERCENTAGE}%
{IF milestone: "🎯 MILESTONE: {milestone_name}"}
═══════════════════════════════════════════════════════════════════════════
{FOR each content_slot on this day, ordered by time:}
┌─────────────────────────────────────────────────────────────────────────┐
│ {TIME} | {PLATFORM} [{SLOT_ID}] │
├─────────────────────────────────────────────────────────────────────────┤
│ Pillar: {PILLAR} │
│ Type: {CONTENT_TYPE} │
│ Topic: {TOPIC_DIRECTION} │
│ {IF detail_level >= with-hooks:} │
│ Hook: {HOOK_IDEA} │
│ CTA: {CTA} │
│ {IF detail_level == full-briefs:} │
│ Key Points: {BULLET_POINTS} │
│ Visual: {VISUAL_RECOMMENDATION} │
│ Cross-post: {CROSS_POST_NOTES} │
│ Hashtags: {HASHTAG_SUGGESTIONS} │
└─────────────────────────────────────────────────────────────────────────┘
{NEXT slot...}
───────────────────────────────────────────────────────────────────────────
Day Total: {COUNT} pieces of content
═══════════════════════════════════════════════════════════════════════════
**6.2 Weekly Summary View:**
FOR each week in calendar_range:
GENERATE WEEKLY_SUMMARY:
═══════════════════════════════════════════════════════════════════════════
WEEK {N}: {DATE_RANGE}
Phase: {PHASE_NAME} | Theme: {WEEKLY_THEME}
Intensity: {PERCENTAGE}% | Total Posts: {COUNT}
═══════════════════════════════════════════════════════════════════════════
┌────────┬───────┬──────────┬─────────┬────────┬─────────┬───────┬────────┐
│ Day │ X │ LinkedIn │ YouTube │ TikTok │ Bluesky │ Other │ Total │
├────────┼───────┼──────────┼─────────┼────────┼─────────┼───────┼────────┤
│ Mon │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │
│ Tue │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │
│ Wed │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │
│ Thu │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │
│ Fri │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │
│ Sat │ {X} │ {X} │ — │ {X} │ {X} │ {X} │ {X} │
│ Sun │ {X} │ — │ — │ {X} │ {X} │ — │ {X} │
├────────┼───────┼──────────┼─────────┼────────┼─────────┼───────┼────────┤
│ TOTAL │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │ {X} │
└────────┴───────┴──────────┴─────────┴────────┴─────────┴───────┴────────┘
HIGHLIGHTS:
• {milestone if any}
• {blog if any}
• {special content notes}
═══════════════════════════════════════════════════════════════════════════
**6.3 CSV-Ready Format (if output_format includes csv-ready):**
GENERATE CSV_CONTENT:
slot_id,date,day,week,platform,time,phase,theme,pillar,topic,content_type,hook,cta,hashtags,notes
W1-MON-X-1,2025-12-01,Monday,1,X/Twitter,09:00,Phase 1,Awareness,Educational,CRAFT basics explained,Thread,Did you know AI conversations can be structured like code?,Join the Beta waitlist,#CRAFT #AITools #Productivity,Campaign launch day
W1-MON-X-2,2025-12-01,Monday,1,X/Twitter,17:00,Phase 1,Awareness,Community,Welcome new followers,Text,We're building something different...,What do you think?,#AIcommunity,
...
#AI->H::Note: (CSV format ready for import into scheduling tools or spreadsheets)
# ==========================================
# STEP 7: BATCH IDENTIFICATION
# ==========================================
#AI->H::Status: (Grouping content for efficient batch creation)
**7.1 Batch Grouping Logic:**
IDENTIFY content batches for efficient creation:
BATCH_STRATEGIES:
1. BY_PLATFORM:
Group all X/Twitter posts → create together
Group all LinkedIn posts → create together
Benefit: Stay in platform mindset, consistent voice
2. BY_PILLAR:
Group all Educational content → create together
Group all Behind-the-Scenes → create together
Benefit: Research once, create multiple pieces
3. BY_FORMAT:
Group all Threads → create together
Group all Videos → script and shoot together
Benefit: Efficient production workflow
4. BY_DAY:
Create Monday's content together
Create Tuesday's content together
Benefit: Context switching minimization
RECOMMEND optimal batching based on calendar scope:
IF single-week: BY_DAY or BY_PLATFORM
IF phase: BY_PILLAR or BY_FORMAT
IF full-campaign: BY_FORMAT (especially for video content)
**7.2 Batch Output:**
GENERATE BATCH_CREATION_GUIDE:
═══════════════════════════════════════════════════════════════════════════════
BATCH CREATION GUIDE - {scope_identifier}
Recommended Strategy: {recommended_strategy}
═══════════════════════════════════════════════════════════════════════════════
BATCH 1: {BATCH_NAME}
─────────────────────────────────────────────────────────────────────────────
Content Count: {X} pieces
Estimated Creation Time: {X} hours
Includes:
• {slot_id}: {brief description}
• {slot_id}: {brief description}
• ...
Preparation Needed:
• {research/assets needed}
─────────────────────────────────────────────────────────────────────────────
BATCH 2: {BATCH_NAME}
...
═══════════════════════════════════════════════════════════════════════════════
BATCH SUMMARY
═══════════════════════════════════════════════════════════════════════════════
Total Batches: {X}
Total Content Pieces: {X}
Estimated Total Creation Time: {X} hours
Recommended Creation Schedule:
• Batch 1: {suggested_date/time}
• Batch 2: {suggested_date/time}
• ...
═══════════════════════════════════════════════════════════════════════════════
**Maggie's Batching Analysis:**
"For efficient content creation, I recommend the {recommended_strategy} approach:
**Why This Strategy:**
{Rationale based on calendar scope and content types}
**Time Investment:**
• {X} batches total
• Average {Y} hours per batch
• Full calendar creation: ~{Z} hours
**Pro Tip:** Block dedicated creation time for each batch. Context-switching kills productivity.
Batch your creation, then schedule it out. You'll thank yourself later."
# ==========================================
# STEP 8: CALENDAR OUTPUT BLOCK
# ==========================================
#AI->H::Status: (Generating complete calendar output block)
**8.1 Structured Output Block:**
═══════════════════════════════════════════════════════════════════════════════
CONTENT_CALENDAR_BLOCK - {scope_identifier}
Generated: {current_date}
Source Recipe: RCP-004-002-006-CONTENT-CAL-v1.00a
Guided by: Maggie Stratton - Marketing Maven
═══════════════════════════════════════════════════════════════════════════════
CALENDAR METADATA
─────────────────────────────────────────────────────────────────────────────
• Scope: {calendar_scope}
• Range: {scope_identifier}
• Dates: {start_date} to {end_date}
• Detail Level: {detail_level}
• Total Content Slots: {total_slots}
• Platforms Active: {platform_list}
CONTENT DISTRIBUTION SUMMARY
─────────────────────────────────────────────────────────────────────────────
By Platform:
• X/Twitter: {count} posts
• LinkedIn: {count} posts
• YouTube: {count} videos
• TikTok: {count} videos
• Bluesky: {count} posts
• Mastodon: {count} posts
• Dev.to: {count} articles
• Blog: {count} articles
• GitHub: {count} updates
• Hugging Face: {count} updates
By Pillar:
• Educational: {count} ({percentage}%)
• Behind-the-Scenes: {count} ({percentage}%)
• Community: {count} ({percentage}%)
• Promotional: {count} ({percentage}%)
• Thought Leadership: {count} ({percentage}%)
By CTA Type:
• Primary (conversion): {count} ({percentage}%)
• Engagement: {count} ({percentage}%)
• Content: {count} ({percentage}%)
• Soft: {count} ({percentage}%)
DAILY CALENDAR
─────────────────────────────────────────────────────────────────────────────
[INSERT FULL DAILY VIEW OUTPUT FROM STEP 6.1]
WEEKLY SUMMARIES
─────────────────────────────────────────────────────────────────────────────
[INSERT WEEKLY SUMMARY OUTPUT FROM STEP 6.2]
BATCH CREATION GUIDE
─────────────────────────────────────────────────────────────────────────────
[INSERT BATCH GUIDE OUTPUT FROM STEP 7.2]
MILESTONE CONTENT FOCUS
─────────────────────────────────────────────────────────────────────────────
{FOR each milestone in scope:}
MILESTONE: {milestone_name} ({date})
• Pre-milestone content: {list slot_ids}
• Milestone day content: {list slot_ids}
• Post-milestone content: {list slot_ids}
BLOG AMPLIFICATION SCHEDULE
─────────────────────────────────────────────────────────────────────────────
{FOR each blog in scope:}
BLOG: {blog_topic} (Publishing: {date})
• Teaser slots: {list slot_ids with dates}
• Launch slots: {list slot_ids}
• Follow-up slots: {list slot_ids}
═══════════════════════════════════════════════════════════════════════════════
USAGE INSTRUCTIONS:
This CONTENT_CALENDAR_BLOCK provides execution-ready content assignments for:
• RCP-004-002-007 (Social Post Creator) - Use individual slots as input
• Direct scheduling in social media tools
• Team content creation assignments
• Progress tracking during campaign execution
═══════════════════════════════════════════════════════════════════════════════
**8.2 Quick Reference Card:**
┌─────────────────────────────────────────────────────────────────────────────┐
│ 📅 CONTENT CALENDAR QUICK REFERENCE - {scope_identifier} │
├─────────────────────────────────────────────────────────────────────────────┤
│ 📆 RANGE: {start_date} → {end_date} │
│ 📊 TOTAL CONTENT: {total_slots} pieces across {platform_count} platforms │
│ 📝 DETAIL LEVEL: {detail_level} │
├─────────────────────────────────────────────────────────────────────────────┤
│ DAILY AVERAGE: {average} posts/day │
│ BUSIEST DAY: {day} with {count} posts │
│ QUIETEST DAY: {day} with {count} posts │
├─────────────────────────────────────────────────────────────────────────────┤
│ CREATION BATCHES: {batch_count} │
│ EST. CREATION TIME: {total_hours} hours │
│ RECOMMENDED: {batch_strategy} approach │
└─────────────────────────────────────────────────────────────────────────────┘
#AI->H::Deliverable: (Content Calendar Block created - ready for execution or Recipe 14)
**Maggie's Closing Summary:**
"Your content calendar for {scope_identifier} is complete.
**What You Have:**
• {total_slots} content slots with specific assignments
• Every slot has: platform, time, pillar, topic, and CTA
• Organized into {batch_count} creation batches
• Estimated {total_hours} hours to create all content
**Next Steps:**
1. **Option A:** Take individual slots to Recipe 14 (Social Post Creator) to generate actual copy
2. **Option B:** Use batch guide to schedule creation sessions
3. **Option C:** Export CSV to your scheduling tool and start creating
**Confidence Assessment:** 85%
This calendar provides a solid execution framework. Adjust based on real-time performance data.
**Pro Tip:** Don't try to create everything at once. Batch it, schedule creation time, and maintain consistency over perfection."
#AI->H::RecipeComplete: (RCP-004-002-006-CONTENT-CAL-v1.00a executed successfully)
#AI->H::OutputReady: (CONTENT_CALENDAR_BLOCK available for execution or downstream recipes)
""",
# =========================================================
# OUTPUT SPECIFICATIONS
# =========================================================
outputs={
"primary_output": {
"name": "CONTENT_CALENDAR_BLOCK",
"format": "Structured text block",
"contains": [
"Calendar Metadata",
"Content Distribution Summary",
"Daily Calendar (all slots)",
"Weekly Summaries",
"Batch Creation Guide",
"Milestone Content Focus",
"Blog Amplification Schedule"
],
"usage": "Input for Recipe 14, direct execution, scheduling tools"
},
"export_outputs": [
{
"name": "CSV_EXPORT",
"format": "Comma-separated values",
"purpose": "Import into scheduling tools or spreadsheets",
"available_when": "output_format includes 'csv-ready'"
}
],
"reference_outputs": [
{
"name": "QUICK_REFERENCE_CARD",
"format": "Bordered card",
"purpose": "At-a-glance calendar summary"
},
{
"name": "BATCH_CREATION_GUIDE",
"format": "Structured guide",
"purpose": "Efficient content creation planning"
}
]
},
# =========================================================
# INTEGRATION NOTES
# =========================================================
integration_notes="""
RECEIVES FROM:
• Recipe 12 (Campaign Timeline): campaign_timeline → weeks, themes, intensity, milestones
• Recipe 11 (Channel Strategy): channel_strategy → platform playbooks, frequencies
• Recipe 10 (Content Pillars): content_pillars → categories, ratios, topic banks
• Recipe 9 (Messaging Matrix): messaging_matrix → phase messaging (optional)
FEEDS INTO:
• Recipe 14 (Social Post Creator): Individual slots → full post copy
• Recipe 15 (Blog Content Planner): Blog slots → detailed outlines
• Direct execution: Calendar → scheduling tools → published content
CHAINING PATTERN:
This recipe is the tactical hub of the campaign system. It translates all
strategic inputs into actionable content assignments. For full content
generation, chain individual slots to Recipe 14.
ITERATIVE USE:
This recipe can be run multiple times:
• Generate calendar phase-by-phase as campaign progresses
• Regenerate specific weeks if strategy changes
• Update detail_level for different use cases (quick planning vs. full briefs)
SCOPE RECOMMENDATIONS:
• Planning mode: Use "topics-only" for full campaign overview
• Creation mode: Use "with-hooks" for phase or weekly focus
• Delegation mode: Use "full-briefs" for team handoffs
""",
# =========================================================
# VALIDATION CHECKLIST
# =========================================================
validation_checklist="""
Before marking recipe complete, verify:
□ All days in scope have content assigned
□ Every slot has: date, platform, time, pillar, topic, CTA
□ Pillar distribution within 5% of targets
□ CTA distribution balanced (not too promotional)
□ No content gaps on milestone days
□ Blog amplification slots created for all blogs
□ Batches logically grouped
□ Total content volume realistic for resources
□ CSV export valid format (if requested)
□ Quick reference card accurate
"""
)
# =========================================================
# RECIPE: END: CONTENT-CALENDAR-GENERATOR
# =========================================================
# =========================================================
# USAGE EXAMPLES
# =========================================================
"""
EXAMPLE 1: Single Week Calendar
#H->AI::Directive: (Execute Recipe 13 - Content Calendar Generator)
Parameters:
campaign_timeline: [Paste CAMPAIGN_TIMELINE_BLOCK from Recipe 12]
channel_strategy: [Paste CHANNEL_STRATEGY_BLOCK from Recipe 11]
content_pillars: [Paste CONTENT_PILLAR_BLOCK from Recipe 10]
calendar_scope: "single-week"
scope_identifier: "Week 1"
detail_level: "with-hooks"
include_blog: true
output_format: "both"
EXAMPLE 2: Full Phase Calendar
#H->AI::Directive: (Execute Recipe 13 for Phase 1)
Parameters:
campaign_timeline: [CAMPAIGN_TIMELINE_BLOCK]
channel_strategy: [CHANNEL_STRATEGY_BLOCK]
content_pillars: [CONTENT_PILLAR_BLOCK]
calendar_scope: "phase"
scope_identifier: "Phase 1: Pre-Beta Awareness"
detail_level: "full-briefs"
include_blog: true
output_format: "structured-text"
EXAMPLE 3: Quick Planning Overview
#H->AI::Directive: (Generate quick planning calendar for full campaign)
Parameters:
campaign_timeline: [CAMPAIGN_TIMELINE_BLOCK]
channel_strategy: [CHANNEL_STRATEGY_BLOCK]
content_pillars: [CONTENT_PILLAR_BLOCK]
calendar_scope: "full-campaign"
detail_level: "topics-only"
include_blog: true
output_format: "csv-ready"
EXAMPLE 4: Slot-to-Post Chain
After generating calendar, take individual slot to Recipe 14:
#H->AI::Directive: (Create full post for slot W1-MON-X-1)
Use content_calendar_entry: {
"slot_id": "W1-MON-X-1",
"date": "2025-12-01",
"platform": "X/Twitter",
"pillar": "Educational",
"topic": "CRAFT basics explained",
"hook": "Did you know AI conversations can be structured like code?",
"cta": "Join the Beta waitlist"
}
"""
# =========================================================
# VERSION HISTORY
# =========================================================
"""
VERSION HISTORY:
v1.00a (2025-11-25) - Initial release
- 8-step workflow (Input Validation through Calendar Output)
- Maggie Stratton persona integration
- Multiple calendar scope options
- Three detail levels (topics-only, with-hooks, full-briefs)
- Pillar balance checking
- CTA distribution optimization
- Batch creation guide
- CSV export capability
- Comprehensive output block for chaining
"""
# =========================================================
# END RECIPE-ID: RCP-004-002-013
# =========================================================