/social-campaign — Social Content Campaign Pipeline
Orchestrator that chains 5 phases into a complete social content campaign:
STRATEGY → WRITE → REVIEW → DESIGN → SCHEDULE
(plan) (draft) (audit) (visuals) (postiz/typefully)
Each phase is an independent block. This orchestrator is one recipe that combines them. Produces N scheduled posts with selective visuals from a single marketing goal.
When to Use
- Pre-launch content build-up (1-2 week runway)
- Ongoing content calendar creation
- Campaign bursts around announcements
- Any time you need multiple scheduled posts with visuals
Architecture
Phase 1: STRATEGY — Plan content calendar with themes, timing, platform mix
Phase 2: WRITE — Draft posts calibrated to real voice (not brand doc voice)
Phase 3: REVIEW — AI slop audit + voice calibration against published posts
Phase 4: DESIGN — Selective visual creation in Paper MCP (not every post)
Phase 5: SCHEDULE — Route each post to postiz first, with Typefully as the X/thread specialist and fallback
Workflow
Phase 0: Load Context
- Run
mktg status --jsonto check brand health - Read brand files in parallel:
brand/voice-profile.md(tone, vocabulary, do's/don'ts)brand/positioning.md(angles, headlines)
- Read
brand/landscape.mdif it exists — check the Claims Blacklist before making ecosystem or competitive claims. If stale (>14 days) or missing, warn that market claims may be outdated. - Check social distribution readiness:
mktg doctor --json --fields checks.postiz.configured,checks.typefully.configured - If Typefully is configured, load Typefully config: check default social set, list available accounts
- If Typefully is configured, check queue schedule:
typefully.js queue:get --start-date <today> --end-date <+N days>typefully.js queue:schedule:get(what days/times are slots)
- Read recent published posts:
- Prefer Typefully history when available:
typefully.js drafts:list --status published --sort -created_at - Otherwise use the project's recent post corpus or approved drafts for voice calibration
- Prefer Typefully history when available:
If brand files are missing: The skill still works. Ask the user for: (1) brand voice in 2-3 adjectives, (2) target platforms, (3) content themes. Proceed with these as lightweight context. Brand files enhance, never gate.
If Typefully queue is empty (no available slots): Offer the user two options: (1) create drafts without scheduling (user schedules manually in Typefully UI), or (2) use specific datetime scheduling with --schedule "ISO_datetime". This only applies to posts routed to Typefully.
Present context summary:
Brand: loaded (voice, positioning) | OR: missing — using lightweight context
Postiz: configured for multi-provider social distribution | OR: missing — Typefully/file/browser fallbacks only
Typefully: connected for X/threads specialist routing and fallback | OR: missing
Queue: {N} empty Typefully slots over next {days} days ({schedule})
Last post: "{preview}" ({date})
Phase 1: STRATEGY
Plan the content calendar. This is strategic thinking, not template filling.
Inputs needed (use AskUserQuestion if not provided):
- What's the marketing goal? (launch, awareness, engagement, authority)
- What's the timeline? (1 week, 2 weeks, ongoing)
- Any specific themes or angles to hit?
Planning process:
- Analyze the goal, timeline, and available queue slots
- Plan N posts distributed across the timeline
- For each post, decide:
- Day and time slot (from queue schedule)
- Platform mix (X only, LinkedIn only, or both)
- Theme (problem awareness, value education, social proof, product tease, announcement)
- Content type (observation, hot take, how-to, builder update, announcement)
- Consider pacing: build gradually, don't front-load announcements
- Consider variety: alternate themes, don't repeat the same structure
Present the calendar for approval:
| # | Date | Platform | Theme | Hook Direction |
|---|------|----------|-------|----------------|
Gate: User must approve calendar before Phase 2.
Phase 2: WRITE
Draft all posts, calibrated to the user's ACTUAL voice (not just the brand doc).
Critical: Voice Calibration
Before writing, read 5-8 recent published posts from Typefully:
typefully.js drafts:list --status published --sort -created_at
typefully.js drafts:get <id> # for full text of top posts
Analyze the real voice patterns:
- Sentence length and structure
- Use of fragments vs complete sentences
- Technical specificity level
- How they open posts (fact-first? question? observation?)
- How they close (link? command? statement?)
- Personality markers (dry humor? directness? code inline?)
Write each post matching these patterns, NOT generic brand voice.
For each post:
- Write the full text
- Determine platform (X, LinkedIn, or both)
- If cross-platform with same content, use one draft with
--platform x,linkedin - If cross-platform with different content, plan as single draft with platform-specific text
Present all posts for approval as a numbered list with the full text.
Gate: User must approve posts before Phase 3.
Phase 3: REVIEW
Two-part quality audit. This is the most important phase for authenticity.
3a: AI Slop Audit
Audit every post for these AI tells. Read each post manually, in sequence, looking at the batch as a whole (not just individual posts). This cannot be done with regex.
Structural patterns to catch:
- Sentences that all follow the same rhythm (subject-verb-explanation, repeat)
- Every post opening with a question or every post opening with a bold claim — variety is key
- Numbered lists where every item has the same sentence structure
- "Sandwich" pattern: statement, elaboration, restatement in every post
Transition filler to remove:
- "Here's the thing:", "Let me be clear:", "The reality is:", "At the end of the day"
- "In today's [landscape/world/environment]", "When it comes to"
- "It's worth noting that", "Interestingly enough", "Not gonna lie"
Vocabulary tells to flag:
- "Leverage", "unlock", "game-changer", "deep dive", "robust", "streamline"
- "Landscape", "navigate", "elevate", "empower", "cutting-edge"
- Overuse of "incredibly", "absolutely", "fundamentally"
Batch-level monotony checks:
- Do 3+ posts start the same way? Fix it.
- Do all posts use the same CTA? Vary them.
- Is the emotional range flat? Mix insight, humor, urgency, curiosity.
- Could you shuffle the posts and not notice? Each needs a distinct angle.
If /cmo is installed, also reference ~/.claude/skills/cmo/references/ai-slop-patterns.md for the full pattern library.
3b: Voice Calibration Check
Compare each post against the published posts from Phase 2's calibration:
- Does this sound like the same person wrote it?
- Would this blend in with their real timeline?
- Is the technical specificity level right?
- Are the sentence rhythms natural?
Fix anything that fails either audit. Present the final versions.
Gate: User approves final post text.
Phase 4: DESIGN
Selective visual creation. NOT every post gets an image — text-only posts feel more authentic for personal observations and hot takes.
For the full decision framework (which posts get images), image types, Paper MCP steps, and design system specs, see references/paper-mcp-workflow.md.
Quick decision rule: Comparisons, processes, data, and announcements get images. Personal takes, vents, and builder updates stay text-only.
Present image plan for approval:
| Post # | Image? | What It Shows |
|--------|--------|---------------|
Gate: User approves image plan. User exports PNGs from Paper after design.
Phase 5: SCHEDULE
<!-- BEGIN POSTIZ EXTENSION (mktg v0.2+) -->Step 0 — Pick the scheduling backend per post.
Before scheduling anything, detect which backends