Marketing Foundation
Clarify positioning, then turn it into a lead-generation asset.
The tunnel uses the same cards as the catalogue. Browse only as deep as needed — or load a broad bundle immediately.
SEO, Sales, Agents or another broad area → one bundle call → work.
Read-only access to published skills. Default 8, maximum 10 skills / 120,000 characters.
Clarify positioning, then turn it into a lead-generation asset.
Build an evidence-led marketing plan from ICP and competition through positioning, campaigns, growth and measurement.
Diagnose architecture and context, then plan agent-team responsibilities. Memory and cost-runtime reviews are outside this pack.
Review the journey from landing page and lead capture through registration, first value and transparent upgrades.
Plan a campaign, draft its channel content and review the work against actual brand guidance.
Prioritize an editorial roadmap and plan how to launch and distribute it across suitable channels.
Understand customer needs, compare competitors and plan a community around real member value.
Choose a relevant lead magnet, then draft a permission-based nurture journey with entry, suppression and exit rules.
Define the API contract, then plan how to observe its latency, failures and retries. Guidance and checklist; no production changes.
Prioritize content pillars, audience questions and distribution plans using evidence and available resources.
---
name: content-strategy
description: When the user wants to plan a content strategy, decide what content to create, or figure out what topics to cover. Also use when the user mentions "content strategy," "what should I write about," "content ideas," "blog strategy," "topic clusters," "content planning," "editorial calendar," "content marketing," "content roadmap," "what content should I create," "blog topics," "content pillars," or "I don't know what to write." Use this whenever someone needs help deciding what content to produce, not just writing it. For writing individual pieces, see copywriting. For SEO-specific audits, see seo-audit. For social media content specifically, see social.
metadata:
version: 2.1.1
---
# Content Strategy
You are a content strategist. Your goal is to help plan content that drives traffic, builds authority, and generates leads by being either searchable, shareable, or both.
## Before Planning
**Check for product marketing context first:**
If `.agents/product-marketing.md` exists (or `.claude/product-marketing.md`, or the legacy `product-marketing-context.md` filename, in older setups), read it before asking questions. Use that context and only ask for information not already covered or specific to this task.
Gather this context (ask if not provided):
### 1. Business Context
- What does the company do?
- Who is the ideal customer?
- What's the primary goal for content? (traffic, leads, brand awareness, thought leadership)
- What problems does your product solve?
### 2. Customer Research
- What questions do customers ask before buying?
- What objections come up in sales calls?
- What topics appear repeatedly in support tickets?
- What language do customers use to describe their problems?
### 3. Current State
- Do you have existing content? What's working?
- What resources do you have? (writers, budget, time)
- What content formats can you produce? (written, video, audio)
### 4. Competitive Landscape
- Who are your main competitors?
- What content gaps exist in your market?
---
## Treat Content Like a Product
Every piece is its own launch. Content isn't overhead—it's **brand surface area**: each published piece is a new entry point where a stranger can discover you, and hundreds of pieces compound into hundreds of doorways working 24/7. Plan, ship, and promote each piece with the same intent you'd bring to a product release. A post that's written and forgotten has almost no surface area; a post that's distributed (see **Create Once, Distribute Twice** below) multiplies it.
This section covers the searchable/shareable lens, then the execution and prioritization layer: which pieces to make (scoring), how the calendar splits, and per-format discipline.
## Searchable vs Shareable
Every piece of content must be searchable, shareable, or both. Prioritize in that order—search traffic is the foundation.
**Searchable content** captures existing demand. Optimized for people actively looking for answers.
**Shareable content** creates demand. Spreads ideas and gets people talking.
### When Writing Searchable Content
- Target a specific keyword or question
- Match search intent exactly—answer what the searcher wants
- Use clear titles that match search queries
- Structure with headings that mirror search patterns
- Place keywords in title, headings, first paragraph, URL
- Provide comprehensive coverage (don't leave questions unanswered)
- Include data, examples, and links to authoritative sources
- Optimize for AI/LLM discovery: clear positioning, structured content, brand consistency across the web
### When Writing Shareable Content
- Lead with a novel insight, original data, or counterintuitive take
- Challenge conventional wisdom with well-reasoned arguments
- Tell stories that make people feel something
- Create content people want to share to look smart or help others
- Connect to current trends or emerging problems
- Share vulnerable, honest experiences others can learn from
---
## Content Types
### Searchable Content Types
**Use-Case Content**
Formula: [persona] + [use-case]. Targets long-tail keywords.
- "Project management for designers"
- "Task tracking for developers"
- "Client collaboration for freelancers"
**Hub and Spoke**
Hub = comprehensive overview. Spokes = related subtopics.
```
/topic (hub)
├── /topic/subtopic-1 (spoke)
├── /topic/subtopic-2 (spoke)
└── /topic/subtopic-3 (spoke)
```
Create hub first, then build spokes. Interlink strategically.
**Note:** Most content works fine under `/blog`. Only use dedicated hub/spoke URL structures for major topics with layered depth (e.g., Atlassian's `/agile` guide). For typical blog posts, `/blog/post-title` is sufficient.
**Template Libraries**
High-intent keywords + product adoption.
- Target searches like "marketing plan template"
- Provide immediate standalone value
- Show how product enhances the template
### Shareable Content Types
**Thought Leadership**
- Articulate concepts everyone feels but hasn't named
- Challenge conventional wisdom with evidence
- Share vulnerable, honest experiences
**Data-Driven Content**
- Product data analysis (anonymized insights)
- Public data analysis (uncover patterns)
- Original research (run experiments, share results)
**Expert Roundups**
15-30 experts answering one specific question. Built-in distribution.
**Case Studies**
Structure: Challenge → Solution → Results → Key learnings
**Meta Content**
Behind-the-scenes transparency. "How We Got Our First $5k MRR," "Why We Chose Debt Over VC."
### Link-Earning Formats
When the goal of a piece is backlinks specifically, format choice matters more than production effort. Foundation Inc.'s B2B Backlink Intelligence Report (March 2026 — a single vendor study of B2B SaaS sites, so treat as directional) measured each format's share of backlinks relative to its share of pages:
| Format | Backlinks vs. page share |
|---|---|
| Statistics / data roundups | **4.25x** |
| Glossary / definition pages | 1.47x |
| Interactive tools / calculators (see **free-tools**) | 1.38x |
| How-to / tutorials | 1.36x |
| Original research / reports | 0.80x |
| Ultimate guides | 0.77x |
| Thought leadership | 0.74x |
| Templates / frameworks | 0.68x |
The counterintuitive read: **curating statistics earns ~5x the links of producing original research.** Writers link to whatever makes citation easiest — a maintained stat-roundup page is citation infrastructure, while original research often gets cited *via* the roundups that aggregate it. Implications: (1) publish a stats page for your category and keep it fresh — it's cheap and compounds, and citable one-line stats are also what LLMs lift, making it an AI-visibility play (see **ai-seo**); (2) when you do run original research, pair it with your own stat-roundup page that presents the findings as citable one-liners, so you capture the links your data generates. The formats at the bottom aren't dead — guides, templates, and thought leadership earn their keep on rankings, conversions, and brand. Judge each piece by the job it's for, and don't expect links from formats that don't earn them.
For programmatic content at scale, see **programmatic-seo** skill.
---
## Content Pillars and Topic Clusters
Content pillars are the 3-5 core topics your brand will own. Each pillar spawns a cluster of related content.
Most of the time, all content can live under `/blog` with good internal linking between related posts. Dedicated pillar pages with custom URL structures (like `/guides/topic`) are only needed when you're building comprehensive resources with multiple layers of depth.
### How to Identify Pillars
1. **Product-led**: What problems does your product solve?
2. **Audience-led**: What does your ICP need to learn?
3. **Search-led**: What topics have volume in your space?
4. **Competitor-led**: What are competitors ranking for?
### Pillar Structure
```
Pillar Topic (Hub)
├── Subtopic Cluster 1
│ ├── Article A
│ ├── Article B
│ └── Article C
├── Subtopic Cluster 2
│ ├── Article D
│ ├── Article E
│ └── Article F
└── Subtopic Cluster 3
├── Article G
├── Article H
└── Article I
```
### Pillar Criteria
Good pillars should:
- Align with your product/service
- Match what your audience cares about
- Have search volume and/or social interest
- Be broad enough for many subtopics
---
## Keyword Research by Buyer Stage
Map topics to the buyer's journey using proven keyword modifiers:
### Awareness Stage
Modifiers: "what is," "how to," "guide to," "introduction to"
Example: If customers ask about project management basics:
- "What is Agile Project Management"
- "Guide to Sprint Planning"
- "How to Run a Standup Meeting"
### Consideration Stage
Modifiers: "best," "top," "vs," "alternatives," "comparison"
Example: If customers evaluate multiple tools:
- "Best Project Management Tools for Remote Teams"
- "Asana vs Trello vs Monday"
- "Basecamp Alternatives"
### Decision Stage
Modifiers: "pricing," "reviews," "demo," "trial," "buy"
Example: If pricing comes up in sales calls:
- "Project Management Tool Pricing Comparison"
- "How to Choose the Right Plan"
- "[Product] Reviews"
### Implementation Stage
Modifiers: "templates," "examples," "tutorial," "how to use," "setup"
Example: If support tickets show implementation struggles:
- "Project Template Library"
- "Step-by-Step Setup Tutorial"
- "How to Use [Feature]"
---
## Content Ideation Sources
### 1. Keyword Data
If user provides keyword exports (Ahrefs, SEMrush, GSC), analyze for:
- Topic clusters (group related keywords)
- Buyer stage (awareness/consideration/decision/implementation)
- Search intent (informational, commercial, transactional)
- Quick wins (low competition + decent volume + high relevance)
- Content gaps (keywords competitors rank for that you don't)
Output as prioritized table:
| Keyword | Volume | Difficulty | Buyer Stage | Content Type | Priority |
### 2. Call Transcripts
If user provides sales or customer call transcripts, extract:
- Questions asked → FAQ content or blog posts
- Pain points → problems in their own words
- Objections → content to address proactively
- Language patterns → exact phrases to use (voice of customer)
- Competitor mentions → what they compared you to
Output content ideas with supporting quotes.
### 3. Survey Responses
If user provides survey data, mine for:
- Open-ended responses (topics and language)
- Common themes (30%+ mention = high priority)
- Resource requests (what they wish existed)
- Content preferences (formats they want)
### 4. Forum Research
Use web search to find content ideas:
**Reddit:** `site:reddit.com [topic]`
- Top posts in relevant subreddits
- Questions and frustrations in comments
- Upvoted answers (validates what resonates)
**Quora:** `site:quora.com [topic]`
- Most-followed questions
- Highly upvoted answers
**Other:** Indie Hackers, Hacker News, Product Hunt, industry Slack/Discord
Extract: FAQs, misconceptions, debates, problems being solved, terminology used.
### 5. Competitor Analysis
Use web search to analyze competitor content:
**Find their content:** `site:competitor.com/blog`
**Analyze:**
- Top-performing posts (comments, shares)
- Topics covered repeatedly
- Gaps they haven't covered
- Case studies (customer problems, use cases, results)
- Content structure (pillars, categories, formats)
**Identify opportunities:**
- Topics you can cover better
- Angles they're missing
- Outdated content to improve on
### 6. Sales and Support Input
Extract from customer-facing teams:
- Common objections
- Repeated questions
- Support ticket patterns
- Success stories
- Feature requests and underlying problems
---
## Prioritizing Content Ideas
Score each idea on four factors:
### 1. Customer Impact (40%)
- How frequently did this topic come up in research?
- What percentage of customers face this challenge?
- How emotionally charged was this pain point?
- What's the potential LTV of customers with this need?
### 2. Content-Market Fit (30%)
- Does this align with problems your product solves?
- Can you offer unique insights from customer research?
- Do you have customer stories to support this?
- Will this naturally lead to product interest?
### 3. Search Potential (20%)
- What's the monthly search volume?
- How competitive is this topic?
- Are there related long-tail opportunities?
- Is search interest growing or declining?
### 4. Resource Requirements (10%)
- Do you have expertise to create authoritative content?
- What additional research is needed?
- What assets (graphics, data, examples) will you need?
### Scoring Template
| Idea | Customer Impact (40%) | Content-Market Fit (30%) | Search Potential (20%) | Resources (10%) | Total |
|------|----------------------|-------------------------|----------------------|-----------------|-------|
| Topic A | 8 | 9 | 7 | 6 | 8.0 |
| Topic B | 6 | 7 | 9 | 8 | 7.1 |
Score 1-10 per factor, multiply by the weight, sum for the total. Rank the list; make the top-scoring pieces first.
---
## Calendar Split: 60/30/10
Balance the editorial calendar so search compounds while shareable pieces keep you visible:
- **60% searchable** — the foundation. Demand you can capture predictably (use-case content, hub/spoke, how-tos).
- **30% shareable** — thought leadership, original data, opinion. Creates demand and earns links/mentions.
- **10% experimental** — new formats, channels, or bets. Cheap insurance against a stale mix.
This is a starting ratio, not a rule. A brand-new blog may over-index on searchable to build a base; an established brand chasing category leadership may push shareable higher.
---
## Per-Format Execution Discipline
Treating content like a product means each format has a production standard, not just a topic:
- **Blog post** — write **10 title options** before drafting (the title does most of the work; pick the strongest). Plan **~5 editing passes** (structure, clarity, evidence, line edit, headline/SEO). For the writing itself, see **copywriting**.
- **Long-form guide** — the flagship of a pillar. Comprehensive enough to be *the* resource; structured with a table of contents and internal links to spokes. Build the hub before the spokes.
- **Video** — script the hook first; front-load the payoff. Repurpose into short-form clips at creation time (see **social**).
- **Podcast** — one interview yields a transcript, quote graphics, short clips, and a written recap. Design the episode knowing it will be atomized.
- **Email** — one idea per send; the subject line is the title—write several and pick. For sequences and lifecycle, see **emails**.
---
## Create Once, Distribute Twice
Creating content is half the job—distribution is the other half, and most teams skip it. The philosophy: **one exceptional piece, reformatted and repurposed across every channel, not a fresh piece per platform.** Pouring effort into a single flagship and then distributing it everywhere beats spreading thin effort across many mediocre platform-native posts.
Build **distribution hooks into the piece at creation time**, not after: write subheads that stand alone as social posts, structure sections to be lifted out modularly, and pull quotes/stats you already know you'll graphic-ify. A well-designed guide is a distribution kit in disguise.
**The ORB Framework as a funnel** — route attention from borrowed → rented → owned, which maps to discovery → engagement → conversion:
- **Borrowed** (other people's audiences: podcasts, guest posts, partnerships) — discovery / breakthrough reach.
- **Rented** (social platforms, ad networks) — engagement, but you don't own the audience or the algorithm.
- **Owned** (email list, blog, community) — conversion and the only durable asset. Everything upstream should funnel here.
ORB mechanics live in the **launch** skill (channel-type playbook) and content atomization/repurposing lives in **social**; the value here is consolidating the *distribute* half of content strategy so it has a home.
**Failure modes to avoid:**
- **Spray-and-pray** — posting everywhere with no flagship and no repurposing plan. Effort scatters, nothing compounds.
- **Platform dependency** — building on rented land. Facebook organic reach fell from ~20% to under 2%; any rented channel can throttle you overnight.
- **The ownership paradox** — teams spend ~90% of effort on channels they don't control (rented/borrowed) and neglect the owned assets that actually convert and can't be taken away.
For the full distribution spine—the Content Distribution Flywheel, platform half-lives, and the atomization checklist—see the reference below.
---
## Output Format
When creating a content strategy, provide:
### 1. Content Pillars
- 3-5 pillars with rationale
- Subtopic clusters for each pillar
- How pillars connect to product
### 2. Priority Topics
For each recommended piece:
- Topic/title
- Searchable, shareable, or both
- Content type (use-case, hub/spoke, thought leadership, etc.)
- Target keyword and buyer stage
- Why this topic (customer research backing)
### 3. Topic Cluster Map
Visual or structured representation of how content interconnects.
---
## Task-Specific Questions
1. What patterns emerge from your last 10 customer conversations?
2. What questions keep coming up in sales calls?
3. Where are competitors' content efforts falling short?
4. What unique insights from customer research aren't being shared elsewhere?
5. Which existing content drives the most conversions, and why?
---
## References
- **[Content Distribution Spine](references/content-distribution.md)**: Create Once Distribute Twice, ORB as a funnel, the ownership paradox, platform half-lives, the Content Distribution Flywheel, and the per-flagship atomization checklist
- **[Headless CMS Guide](references/headless-cms.md)**: CMS selection, content modeling for marketing, editorial workflows, platform comparison (Sanity, Contentful, Strapi)
---
## Related Skills
- **copywriting**: For writing individual content pieces
- **seo-audit**: For technical SEO and on-page optimization
- **ai-seo**: For optimizing content for AI search engines and getting cited by LLMs
- **programmatic-seo**: For scaled content generation
- **site-architecture**: For page hierarchy, navigation design, and URL structure
- **emails**: For email-based content
- **social**: For social media content, content atomization, and repurposing execution
- **launch**: For the ORB channel-type playbook and launch-day distribution
Prioritize content pillars, audience questions and distribution plans using evidence and available resources.
Content pillars, prioritized topics, topic clusters and an editorial/distribution roadmap.
Separate audience evidence from assumptions, score opportunities consistently and choose a measurable distribution plan.
Audience/objectives, customer evidence, existing content, production resources and channel access.
Audience and business objectives, customer evidence, existing content, production resources and channel access. Planning guidance only. Optional product-marketing context files can be replaced by user-provided context. Original named related skills are optional and may use different M11 slugs. No installation, outreach, posting, payment, CRM/CMS mutation or deployment is authorized by loading this text. Integration examples are retained documentation, not execution-tested or proof that a connector exists in the consuming client. Discover actual tools, API versions, schema and least-privilege permissions before any separately requested implementation; protect credentials and drafts. Do not run delete, import, publish or createOrReplace examples as routine setup.
Included complete references: skills/content-strategy/references/content-distribution.md, skills/content-strategy/references/headless-cms.md, tools/integrations/sanity.md, tools/integrations/contentful.md, tools/integrations/strapi.md.
The example Topic A weighted total is 7.9, not 8.0; Topic B is 7.1. Score resource feasibility higher when easier to deliver so the weighting does not accidentally reward cost. Search-first, 60/30/10 allocation, 30% survey frequency and distribution half-lives are starting hypotheses, not universal rules. The backlink multipliers and reach/effort percentages are unverified source claims, not guaranteed results or causal effects; cite primary evidence before reuse. Owned channels still depend on hosting, email providers and platform policies: YouTube, Slack and Discord are not infrastructure you own, and no channel is immune to removal. Preserve participant privacy and quote only authentic authorized evidence. CMS title/description lengths and social-image dimensions are heuristics, not fixed search-engine limits. Sanity and Contentful have official MCP offerings, contrary to the retained integration tables. Strapi paid CMS plans can charge for seats; self-hosted open-source licensing does not imply all features or hosting are free. Strapi populate=* covers one level, not every nested relation. CMS pricing, feature comparisons, API limits, CLI examples and preview mechanisms require current vendor validation. Contentful has Delivery, Preview, Management and other APIs; its update example is not a safe partial-field merge: preserve existing fields/locales and use the current version. Never expose preview/write tokens in client code or send production credentials to arbitrary localhost endpoints.
Primary checks: https://www.producthunt.com/launch/sharing-your-launch, https://www.sanity.io/docs/ai/mcp-server, https://github.com/contentful/contentful-mcp-server, https://support.strapi.io/articles/6369876154-how-seats-work-when-upgrading-to-a-paid-strapi-plan, https://strapi.io/blog/demystifying-strapi-s-populate-and-filtering
Help me with content strategy and editorial roadmap for [BUSINESS]. First establish Audience and business objectives, customer evidence, existing content, production resources and channel access. Separate audience evidence from assumptions, score opportunities consistently and choose a measurable distribution plan. Treat numerical examples and vendor details as needing validation; produce a plan without external changes.
Automatic publishing, paid campaigns, CRM/CMS mutations, software installation, guaranteed growth or certification of current vendor integrations.
Complete reference packaging, task boundaries, evidence qualifications and specific corrections. The example Topic A weighted total is 7.9, not 8.0; Topic B is 7.1. Score resource feasibility higher when easier to deliver so the weighting does not accidentally reward cost. Search-first, 60/30/10 allocation, 30% survey frequency and distribution half-lives are starting hypotheses, not universal rules. The backlink multipliers and reach/effort percentages are unverified source claims, not guaranteed results or causal effects; cite primary evidence before reuse. Owned channels still depend on hosting, email providers and platform policies: YouTube, Slack and Discord are not infrastructure you own, and no channel is immune to removal. Preserve participant privacy and quote only authentic authorized evidence. CMS title/description lengths and social-image dimensions are heuristics, not fixed search-engine limits. Sanity and Contentful have official MCP offerings, contrary to the retained integration tables. Strapi paid CMS plans can charge for seats; self-hosted open-source licensing does not imply all features or hosting are free. Strapi populate=* covers one level, not every nested relation. CMS pricing, feature comparisons, API limits, CLI examples and preview mechanisms require current vendor validation. Contentful has Delivery, Preview, Management and other APIs; its update example is not a safe partial-field merge: preserve existing fields/locales and use the current version. Never expose preview/write tokens in client code or send production credentials to arbitrary localhost endpoints.
Corey Haines · MIT · SHA-256 1861a1aab0627ab29c279000879a9889242da1ba85e677acdc759c66a6241778
# Content Distribution Spine The "distribute" half of content strategy. Creating a great piece is table stakes; the leverage is in getting it seen. This reference expands the **Create Once, Distribute Twice** section of the skill. Cross-links: ORB channel-type playbook lives in **launch**; atomization/repurposing workflows (podcast → clips, blog → thread) live in **social**. This file consolidates the strategy that ties them together—don't re-derive ORB from scratch here. ## Create Once, Distribute Twice One exceptional piece, reformatted across channels—not a fresh piece per platform. The math is simple: a flagship piece plus ten repurposed cuts reaches far more people than eleven mediocre native posts, at a fraction of the effort. The discipline is **designing the piece to be distributed**: - Write subheads that read as standalone social posts. - Structure sections modularly so they can be lifted out and stand alone. - Pre-identify the pull quotes, stats, and frames you'll turn into graphics or short clips. - Know the atomized outputs before you write, so the source piece contains them. Treat the flagship as the master; every channel gets a cut derived from it. ## The ORB Framework as a Funnel Own, Rent, Borrow—read as a discovery → engagement → conversion funnel: | Layer | Channels | Funnel role | You control | |---|---|---|---| | **Borrowed** | Podcasts, guest posts, partnerships, PR, other people's audiences | Discovery / breakthrough | Nothing—it's a loan | | **Rented** | Social platforms, ad networks, marketplaces | Engagement / reach | The content, not the audience or algorithm | | **Owned** | Email list, blog, community, app | Conversion / retention | Everything—the durable asset | The strategic move: use borrowed and rented reach to funnel strangers into owned channels where you can convert and retain them. Borrowed and rented are rented land; owned is the only asset you keep. ## The Ownership Paradox Most teams invert the priority: they spend ~90% of effort on borrowed and rented channels they don't control, and neglect the owned assets that actually convert. The paradox is that the channels getting the least attention (email, blog, community) are the ones that compound and can't be revoked. Rebalance toward owned as the destination for all upstream effort. ## Failure Modes - **Spray-and-pray** — publishing across every platform with no flagship and no repurposing system. Effort scatters; nothing compounds; each post starts from zero. - **Platform dependency** — building your audience on rented land. Facebook organic reach collapsed from ~20% to under 2% as the platform monetized. Any rented channel can throttle, deprioritize, or de-platform you with no recourse. The lesson isn't "avoid rented"—it's "never let rented be the endpoint." ## Platform Half-Lives Content decays at wildly different rates by channel. Match the piece to the channel's shelf life: | Channel | Rough half-life | Implication | |---|---|---| | Twitter/X post | Minutes–hours | Post often; repost; thread for reach | | Instagram / Facebook | ~a day | Frequent cadence; stories are ephemeral by design | | LinkedIn post | ~a day, longer for strong performers | Fewer, higher-effort posts | | TikTok / Reels / Shorts | Days–weeks (algorithmic resurfacing) | Evergreen hooks can re-surface long after posting | | YouTube video | Months–years | Search-driven; compounds like a blog post | | Blog post / SEO | Years | The long tail; the compounding asset | | Email | Sent once, but archived / repurposable | One-shot attention; harvest into other formats | Short half-life channels reward frequency and repetition; long half-life channels reward depth and evergreen framing. Owned, long-half-life formats (blog, YouTube, email archive) are where distribution effort compounds. ## The Content Distribution Flywheel Distribution isn't a linear checklist—it's a loop that feeds itself: 1. **Create** one exceptional flagship piece (guide, video, podcast, original research), with distribution hooks built in. 2. **Atomize** it into channel-native cuts—clips, threads, carousels, quote graphics, email, subhead-posts. 3. **Distribute** across owned → rented → borrowed, routing everything back to owned. 4. **Engage** with the responses; capture the questions, objections, and reactions. 5. **Feed back** — the engagement surfaces the next flagship topic (what resonated, what got asked), and top-performing atoms signal what to make more of. Each turn of the loop lowers the cost of the next piece (you learn what lands) and grows the owned audience that amplifies it. The flywheel is why consistent distributors pull away from one-off publishers over time. ## Atomization Checklist (per flagship) For each major piece, produce (see **social** for the platform-native execution): - [ ] 3–5 standalone social posts from the subheads/key points - [ ] 1 thread (Twitter/X) or carousel (LinkedIn/Instagram) of the core argument - [ ] 2–4 short-form video clips (if source is video/podcast) - [ ] 1–2 quote or stat graphics - [ ] 1 email to the owned list linking the flagship - [ ] Repost/reshare schedule across the piece's half-life (don't post once and move on) ## Related - **launch** — ORB channel-type playbook and launch-day distribution - **social** — atomization/repurposing workflows and platform-native execution - **emails** — the owned channel that converts distributed attention - **ai-seo** — making owned content citable by LLMs (another distribution surface)
MIT License Copyright (c) 2025 Corey Haines Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Corey Haines · MIT · SHA-256 c0a7b87f47c8f7af907ce73facf1ed4721ade811e53f86ddf22f4bc0d7ca324e
# Headless CMS Guide Reference for choosing, modeling, and implementing a headless CMS for marketing content. ## When to Use This Reference Use this when selecting a CMS for a new project, designing content models for marketing sites, setting up editorial workflows, or connecting CMS content to programmatic pages. --- ## Headless vs Traditional CMS A headless CMS separates content management from presentation. Content is stored in a structured backend and delivered via API to any frontend. ### When Headless Makes Sense - Multiple frontends consume the same content (web, mobile, email) - Developers want full control over the frontend stack - Content needs to be reused across channels - You're building with a modern framework (Next.js, Remix, Astro) - Marketing needs structured, reusable content blocks ### When Traditional Works Better - Small team with no dedicated developers - Simple blog or brochure site - WYSIWYG editing is a hard requirement - Budget is tight and WordPress/Webflow does the job ### Decision Checklist | Factor | Headless | Traditional | |--------|----------|-------------| | Multi-channel delivery | Yes | Limited | | Developer control | Full | Constrained | | Non-technical editing | Requires setup | Built-in | | Time to launch | Longer | Faster | | Content reuse | Native | Manual | | Hosting flexibility | Any frontend | Platform-dependent | --- ## Content Modeling for Marketing ### Core Principles 1. **Think in types, not pages.** A "Landing Page" is a content type with fields — not an HTML file. This lets you reuse components across pages. 2. **Separate content from presentation.** Store the headline text, not the styled headline. Presentation belongs in the frontend. 3. **Design for reuse.** If testimonials appear on 5 pages, create a Testimonial type and reference it — don't duplicate. 4. **Keep models flat.** Deeply nested structures are hard to query and maintain. Prefer references over nesting. ### Common Marketing Content Types | Type | Key Fields | Notes | |------|-----------|-------| | **Landing Page** | title, slug, hero, sections[], seo | Modular sections for flexibility | | **Blog Post** | title, slug, body, author, category, tags, publishedAt, seo | Rich text or Portable Text body | | **Case Study** | title, customer, challenge, solution, results, metrics[], logo | Link to related products/features | | **Testimonial** | quote, author, role, company, avatar, rating | Reference from landing pages | | **FAQ** | question, answer, category | Group by category for programmatic pages | | **Author** | name, bio, avatar, social links | Reference from blog posts | | **CTA Block** | heading, body, buttonText, buttonUrl, variant | Reusable across pages | ### SEO Fields Checklist Every page-level content type needs: - `metaTitle` — 50-60 characters - `metaDescription` — 150-160 characters - `ogImage` — 1200x630px social preview - `slug` — URL path segment - `canonicalUrl` — optional override - `noIndex` — boolean for excluding from search - `structuredData` — optional JSON-LD override --- ## Editorial Workflows ### Draft → Review → Publish Cycle 1. **Draft** — Author creates or edits content 2. **Review** — Editor reviews for accuracy, brand voice, SEO 3. **Approve** — Stakeholder signs off 4. **Schedule** — Set publish date/time 5. **Publish** — Content goes live via API ### Preview APIs All major headless CMS platforms support draft previews: - **Sanity**: Real-time preview with `useLiveQuery` or Presentation tool - **Contentful**: Preview API (`preview.contentful.com`) with separate access token - **Strapi**: Draft & Publish system with `status=draft` query parameter (v5; replaces v4's `publicationState`) Set up a preview route in your frontend (e.g., `/api/preview`) that authenticates and renders draft content. ### Roles and Permissions | Role | Can Create | Can Edit | Can Publish | Can Delete | |------|:----------:|:--------:|:-----------:|:----------:| | Author | Yes | Own | No | Own drafts | | Editor | Yes | All | Yes | Drafts | | Admin | Yes | All | Yes | All | Exact permission models vary by platform. Sanity uses role-based access. Contentful has space-level roles. Strapi has granular RBAC. --- ## Platform Comparison | Feature | Sanity | Contentful | Strapi | |---------|--------|------------|--------| | Hosting | Cloud (managed) | Cloud (managed) | Self-hosted or Cloud | | Query Language | GROQ | REST / GraphQL | REST / GraphQL | | Free Tier | Generous | Limited | Open source (free) | | Real-time Collab | Yes (built-in) | Limited | No | | Best For | Developer flexibility | Enterprise multi-locale | Budget / self-hosted | | Content Modeling | Schema-as-code | Web UI | Web UI or code | | Media Handling | Built-in DAM | Built-in | Plugin-based | ### Sanity **Strengths**: GROQ query language is powerful and flexible. Schema defined in code (version-controlled). Real-time collaborative editing. Portable Text for rich content. Generous free tier. **Considerations**: Steeper learning curve for non-developers. Studio customization requires React knowledge. Vendor lock-in on GROQ queries. **Marketing fit**: Best when developers and marketers collaborate closely. Strong for content-heavy sites with complex models. ### Contentful **Strengths**: Mature enterprise platform. Excellent multi-locale support. Strong ecosystem of integrations. Composable content with Studio. Well-documented APIs. **Considerations**: Pricing scales with content types and locales. Two separate APIs (Delivery and Management). Rate limits can be tight on lower plans. **Marketing fit**: Best for enterprises with multi-market content needs. Good when you need established vendor reliability. ### Strapi **Strengths**: Open source, self-hosted option. Full control over data. No per-seat pricing. Customizable admin panel. Plugin ecosystem. REST by default, GraphQL via plugin. **Considerations**: Self-hosting means you handle infrastructure. Smaller ecosystem than Sanity/Contentful. V5 migration can be significant from V4. **Marketing fit**: Best for teams with DevOps capability who want full control and no vendor lock-in. Good for budget-conscious projects. ### Others Worth Knowing - **Hygraph** — GraphQL-native, strong for federation and multi-source content - **Keystatic** — Git-based, good for developer-content hybrid workflows - **Payload** — TypeScript-first, self-hosted, code-configured like Sanity - **Builder.io** — Visual editor with headless backend, good for non-technical marketers - **Prismic** — Slice-based content modeling, strong Next.js integration --- ## Integration with Marketing Skills ### Programmatic SEO Use CMS as the data source for programmatic pages. Store structured data (FAQs, comparisons, city pages) as content types and generate pages from queries. See **programmatic-seo** skill. ### Copywriting CMS content models enforce consistent structure. Define fields that match your copy frameworks (headline, subheadline, social proof, CTA). See **copywriting** skill. ### Site Architecture URL structure, navigation hierarchy, and internal linking all depend on how content is organized in the CMS. Plan your content model and site architecture together. See **site-architecture** skill. ### Email Sequences Pull CMS content into email templates for consistent messaging across web and email. Case studies, testimonials, and blog posts can feed email nurture sequences. See **emails** skill. --- ## Implementation Checklist - [ ] Define content types based on page types and reusable blocks - [ ] Add SEO fields to every page-level content type - [ ] Set up preview/draft mode in your frontend - [ ] Configure roles and permissions for your team - [ ] Create sample content for each type before building frontend - [ ] Set up webhook notifications for content changes (rebuild triggers) - [ ] Document content guidelines for editors (field descriptions, character limits) - [ ] Test content delivery performance (CDN, caching, ISR) - [ ] Plan migration strategy if moving from existing CMS --- ## Relevant Integration Guides - [Sanity](../../../tools/integrations/sanity.md) — GROQ queries, mutations, CLI - [Contentful](../../../tools/integrations/contentful.md) — Delivery/Management APIs, publishing - [Strapi](../../../tools/integrations/strapi.md) — REST CRUD, filters, document API
MIT License Copyright (c) 2025 Corey Haines Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Corey Haines · MIT · SHA-256 f084bbd1d7d38f142c67c7877e4d57fc46f0452c145741eeee293b90fd34467a
# Sanity
Headless CMS with real-time collaboration, GROQ query language, and schema-as-code.
## Capabilities
| Integration | Available | Notes |
|-------------|-----------|-------|
| API | ✓ | GROQ queries, Mutations API, Assets API |
| MCP | - | No official MCP server |
| CLI | ✓ | `sanity` CLI for studio, datasets, deployment |
| SDK | ✓ | `@sanity/client`, `next-sanity`, `@sanity/image-url` |
## Authentication
- **Type**: API Token (Bearer)
- **Header**: `Authorization: Bearer skXXXXXX`
- **Tokens**: Create in Sanity Manage → API → Tokens
- **Permissions**: Read-only or Read+Write per token
## Common Agent Operations
### Query documents (GROQ)
URL-encode the `query` parameter value in practice.
```bash
GET https://{projectId}.api.sanity.io/v2024-01-01/data/query/{dataset}?query=*[_type == "post"]{title, slug, publishedAt}
```
### Query with parameters
```bash
GET https://{projectId}.api.sanity.io/v2024-01-01/data/query/{dataset}?query=*[_type == "post" && slug.current == $slug][0]&$slug="my-post"
```
### Get document by ID
```bash
GET https://{projectId}.api.sanity.io/v2024-01-01/data/doc/{dataset}/{documentId}
```
### Create document (Mutations API)
```bash
POST https://{projectId}.api.sanity.io/v2024-01-01/data/mutate/{dataset}
{
"mutations": [
{
"create": {
"_type": "post",
"title": "New Post",
"slug": {"_type": "slug", "current": "new-post"},
"body": [{"_type": "block", "children": [{"_type": "span", "text": "Hello"}]}]
}
}
]
}
```
Use `createOrReplace` instead if you want to upsert (requires `_id` field).
### Delete document
```bash
POST https://{projectId}.api.sanity.io/v2024-01-01/data/mutate/{dataset}
{
"mutations": [
{"delete": {"id": "document-id"}}
]
}
```
### Patch document
```bash
POST https://{projectId}.api.sanity.io/v2024-01-01/data/mutate/{dataset}
{
"mutations": [
{
"patch": {
"id": "document-id",
"set": {"title": "Updated Title"}
}
}
]
}
```
## CLI Commands
```bash
# Create a new Sanity project
sanity init
# Start the studio locally
sanity dev
# Deploy studio to Sanity hosting
sanity deploy
# Export dataset
sanity dataset export production ./backup.tar.gz
# Import dataset
sanity dataset import ./data.ndjson production
# List datasets
sanity dataset list
# Run a GROQ query
sanity documents query '*[_type == "post"][0..9]{title, slug}'
```
## Key Objects
- **Document** — Top-level content item with `_id`, `_type`, `_rev`
- **Asset** — Images and files stored in Sanity CDN
- **Reference** — Link between documents (`{_type: "reference", _ref: "doc-id"}`)
- **Portable Text** — Rich text as structured array of blocks
- **Dataset** — Isolated content database (e.g., `production`, `staging`)
- **Slug** — URL-friendly identifier (`{_type: "slug", current: "my-slug"}`)
## When to Use
- Structured content for marketing sites and blogs
- Multi-channel content delivery (web, mobile, email)
- Real-time collaborative editing workflows
- Content-heavy sites with complex models
- Next.js or React-based frontends
## Rate Limits
Rate limits vary by plan. Documented defaults:
- CDN API (queries): High throughput, globally distributed (no hard per-second cap published)
- API (without CDN): Rate-limited per project (varies by plan)
- Mutations: Rate-limited per project (varies by plan)
- See [Sanity technical limits](https://www.sanity.io/docs/technical-limits) for current values
## Relevant Skills
- content-strategy (CMS selection, content modeling)
- programmatic-seo (CMS as data source for generated pages)
- site-architecture (URL structure from CMS slugs)
MIT License Copyright (c) 2025 Corey Haines Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Corey Haines · MIT · SHA-256 17526825260159bc60b3c8ba6e644acd30a7126397da1dc2b633f214037a1686
# Contentful
Enterprise headless CMS with multi-locale support, two-API architecture, and composable content.
## Capabilities
| Integration | Available | Notes |
|-------------|-----------|-------|
| API | ✓ | Content Delivery API (read), Content Management API (write) |
| MCP | - | No official MCP server |
| CLI | ✓ | `contentful-cli` for spaces, content types, migrations |
| SDK | ✓ | `contentful` (delivery), `contentful-management` (management) |
## Authentication
- **Delivery API (CDA)**: `Authorization: Bearer {delivery_token}`
- Base URL: `https://cdn.contentful.com`
- Read-only, CDN-cached
- **Preview API (CPA)**: `Authorization: Bearer {preview_token}`
- Base URL: `https://preview.contentful.com`
- Read-only, returns draft content
- **Management API (CMA)**: `Authorization: Bearer {management_token}`
- Base URL: `https://api.contentful.com`
- Read/write, not cached
- **Tokens**: Create in Settings → API keys (delivery) or Settings → CMA tokens (management)
## Common Agent Operations
### Get entries (Delivery API)
```bash
GET https://cdn.contentful.com/spaces/{space_id}/environments/{environment}/entries?content_type=blogPost&limit=10
Authorization: Bearer {delivery_token}
```
### Get single entry
```bash
GET https://cdn.contentful.com/spaces/{space_id}/environments/{environment}/entries/{entry_id}
Authorization: Bearer {delivery_token}
```
### Search and filter
```bash
# By field value
GET https://cdn.contentful.com/spaces/{space_id}/environments/{environment}/entries?content_type=blogPost&fields.slug=my-post
# Full-text search
GET https://cdn.contentful.com/spaces/{space_id}/environments/{environment}/entries?query=marketing+strategy
# By date range
GET https://cdn.contentful.com/spaces/{space_id}/environments/{environment}/entries?content_type=blogPost&fields.publishDate[gte]=2024-01-01
```
### Create entry (Management API)
CMA uses PUT with a client-generated `entry_id`. To auto-generate, use POST without an ID in the path.
```bash
PUT https://api.contentful.com/spaces/{space_id}/environments/{environment}/entries/{entry_id}
Content-Type: application/vnd.contentful.management.v1+json
X-Contentful-Content-Type: blogPost
Authorization: Bearer {management_token}
{
"fields": {
"title": {"en-US": "New Post"},
"slug": {"en-US": "new-post"},
"body": {"en-US": "Post content here"}
}
}
```
### Update entry
```bash
PUT https://api.contentful.com/spaces/{space_id}/environments/{environment}/entries/{entry_id}
Content-Type: application/vnd.contentful.management.v1+json
X-Contentful-Version: {current_version}
Authorization: Bearer {management_token}
{
"fields": {
"title": {"en-US": "Updated Title"}
}
}
```
### Publish entry
```bash
PUT https://api.contentful.com/spaces/{space_id}/environments/{environment}/entries/{entry_id}/published
X-Contentful-Version: {current_version}
Authorization: Bearer {management_token}
```
### Unpublish entry
```bash
DELETE https://api.contentful.com/spaces/{space_id}/environments/{environment}/entries/{entry_id}/published
X-Contentful-Version: {current_version}
Authorization: Bearer {management_token}
```
## CLI Commands
```bash
# Login
contentful login
# List spaces
contentful space list
# Export space content
contentful space export --space-id {space_id}
# Import content
contentful space import --space-id {space_id} --content-file export.json
# Create migration
contentful space migration --space-id {space_id} migration.js
# List content types
contentful content-type list --space-id {space_id}
```
## Key Objects
- **Space** — Top-level container for content (one per project)
- **Environment** — Isolated content branch (`master`, `staging`, etc.)
- **Content Type** — Schema definition with fields and validations
- **Entry** — Content item of a specific content type
- **Asset** — Media file (image, video, document)
- **Locale** — Language/region variant (e.g., `en-US`, `de-DE`)
## When to Use
- Multi-locale marketing content (global sites)
- Enterprise content operations with approval workflows
- Composable content architecture
- Teams needing established vendor support and SLAs
- Content reuse across multiple channels
## Rate Limits
Rate limits are plan-dependent. Check `X-Contentful-RateLimit-Second-Limit` response header for your actual limits.
- Delivery API (CDA): Varies by plan (typically high throughput)
- Preview API (CPA): Lower than CDA (varies by plan)
- Management API (CMA): ~10 requests per second (default)
- See [Contentful technical limits](https://www.contentful.com/developers/docs/technical-limits/) for current values
## Relevant Skills
- content-strategy (CMS selection, content modeling)
- programmatic-seo (CMS as data source for generated pages)
- site-architecture (multi-locale URL structure)
MIT License Copyright (c) 2025 Corey Haines Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Corey Haines · MIT · SHA-256 e78e9898f0aa05c8ef1d435a28c0c87467c8e00bfbfb9b9d7be11ff796bd654b
# Strapi
Open-source headless CMS with self-hosted option, REST and GraphQL APIs, and customizable admin panel. Targets Strapi 5.
## Capabilities
| Integration | Available | Notes |
|-------------|-----------|-------|
| API | ✓ | REST (default), GraphQL (plugin) |
| MCP | - | No official MCP server |
| CLI | ✓ | `strapi` CLI for project setup, content types, plugins |
| SDK | ✓ | `@strapi/sdk-js`, `@strapi/blocks-react-renderer` |
## Authentication
- **Type**: API Token or Users & Permissions JWT
- **Header**: `Authorization: Bearer {api_token}`
- **Tokens**: Create in Settings → API Tokens (full access, read-only, or custom)
- **JWT**: `POST /api/auth/local` with identifier + password returns JWT
## Common Agent Operations
### List documents
```bash
GET http://localhost:1337/api/articles?populate=*
Authorization: Bearer {api_token}
```
### Get single document
```bash
GET http://localhost:1337/api/articles/{documentId}?populate=*
Authorization: Bearer {api_token}
```
### Filter and sort
```bash
# Filter by field
GET http://localhost:1337/api/articles?filters[slug][$eq]=my-post
# Multiple filters
GET http://localhost:1337/api/articles?filters[category][name][$eq]=Marketing&filters[publishedAt][$notNull]=true
# Sort
GET http://localhost:1337/api/articles?sort=publishedAt:desc
# Pagination
GET http://localhost:1337/api/articles?pagination[page]=1&pagination[pageSize]=10
```
### Create document
```bash
POST http://localhost:1337/api/articles
Content-Type: application/json
Authorization: Bearer {api_token}
{
"data": {
"title": "New Article",
"slug": "new-article",
"body": "Article content here",
"category": "{category_documentId}"
}
}
```
### Update document
```bash
PUT http://localhost:1337/api/articles/{documentId}
Content-Type: application/json
Authorization: Bearer {api_token}
{
"data": {
"title": "Updated Title"
}
}
```
### Delete document
```bash
DELETE http://localhost:1337/api/articles/{documentId}
Authorization: Bearer {api_token}
```
### Get draft content
```bash
# Strapi 5 uses status parameter (replaces v4 publicationState)
GET http://localhost:1337/api/articles?status=draft
Authorization: Bearer {api_token}
```
Publishing and unpublishing are managed through the Strapi admin panel or Document Service API (server-side). The public REST API does not expose dedicated publish/unpublish endpoints.
### Populate relations and components
```bash
# Populate all relations
GET http://localhost:1337/api/articles?populate=*
# Populate specific relations
GET http://localhost:1337/api/articles?populate[0]=author&populate[1]=category
# Deep populate
GET http://localhost:1337/api/articles?populate[author][populate]=avatar
```
## CLI Commands
```bash
# Create new Strapi project
npx create-strapi@latest my-project
# Start development server
strapi develop
# Build admin panel
strapi build
# Generate content type
strapi generate content-type
# Generate controller
strapi generate controller
# Add GraphQL plugin
npm install @strapi/plugin-graphql
```
## Key Objects
- **Content Type** — Schema definition (collection type or single type)
- **Document** — Content item identified by `documentId` (Strapi 5 pattern)
- **Component** — Reusable field group (e.g., SEO fields, CTA block)
- **Dynamic Zone** — Flexible content area accepting multiple component types
- **Media** — Files managed through the Media Library
- **Locale** — i18n locale for content translation (plugin-based)
## When to Use
- Self-hosted CMS with full data ownership
- Budget-conscious projects (no per-seat pricing)
- Custom admin panel or plugin requirements
- Teams with DevOps capability
- Projects needing both REST and GraphQL access
## Rate Limits
- Self-hosted: No built-in rate limits (configure via middleware or reverse proxy)
- Strapi Cloud: Varies by plan
- Recommended: Add rate limiting middleware for production APIs
## Relevant Skills
- content-strategy (CMS selection, content modeling)
- programmatic-seo (CMS as data source for generated pages)
- site-architecture (URL structure from CMS slugs)
MIT License Copyright (c) 2025 Corey Haines Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
MIT License Copyright (c) 2025 Corey Haines Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
website-information-architecture · together — Align topic clusters with page hierarchy, stable URLs and internal links.
marketing-content-drafting · next — Turn a selected editorial topic and evidence into a concrete content draft.
product-launch-planning · together — Use the launch channel framework to plan distribution for a flagship content release.
Copy the text below, then paste it into your chat.