Content calendar
@contentstudio/content-calendar
Plan a few weeks of content across LinkedIn, a newsletter, a blog, and more. A script lays out dated slots per channel with your content pillars rotated evenly, then Claude fills in specific topics and hooks you can actually write. Exports a CSV for your sheet or planner.
- Activity
- New: be the first to try it
- Installs
- 0 installs
- Likes
- 0 likes
- Clones
- 0 clones
- 1---
- 2name: content-calendar
- 3description: Plan a content calendar for the next few weeks across channels (LinkedIn, newsletter, blog, X, Instagram, YouTube, podcast). A script lays out dated slots with content pillars rotated evenly; Claude then fills each slot with a specific topic and hook, and exports a CSV for a spreadsheet or planner. Use when the user says "plan our content", "content calendar", "what should we post this month?", "editorial calendar", or "posting schedule".
- 4license: MIT
- 5---
- 7# Content calendar
- 9Most content calendars fail in one of two ways: a grid of empty boxes, or a list of vague themes ("thought leadership"). This one gets the structure right with a script (dates, channels, an even pillar mix) and then fills every slot with a topic specific enough to start writing today.
- 11## When to use
- 13- Planning the next 2 to 8 weeks of posts, newsletters, or articles.
- 14- "What should we post this month?", "build our content calendar", "plan LinkedIn for Q1".
- 15- To turn one big piece into many, use `repurpose-long-form` and slot the results in here.
- 17## Inputs
- 19Ask in one message, with these defaults:
- 211. **Start date** (next Monday) and **weeks** (4).
- 222. **Channels and days.** Default: LinkedIn Mon, Wed, Fri; newsletter Thu; blog Tue. Fewer channels done well beats many done badly. Suggest cutting if the team is one person and they ask for more than 4 pieces a week.
- 233. **Pillars:** 3 to 4 recurring themes (default: Product tips, Customer stories, Behind the scenes). Good pillars map to what the audience wants, not to departments.
- 244. **Audience** in one line, and **what is coming up:** launches, events, holidays, dates to skip.
- 255. **Raw material:** existing posts, docs, customer quotes, or notes in `content/`. Read them; good topics come from here.
- 266. **Voice:** follow `brand.md` if it exists.
- 28## Steps
- 301. **Lay out the slots.**
- 32 ```bash
- 33 node scripts/calendar.mjs content/calendar --start 2026-11-09 --weeks 4 --cadence "linkedin:mon,wed,fri newsletter:thu blog:tue" --pillars "Product tips,Customer stories,Behind the scenes" --skip 2026-11-26
- 34 ```
- 36 It writes `content-calendar.csv`, `.md`, and `.json` in `content/calendar/`. It will not overwrite an existing calendar; pass `--name december` for a new one, or `--force` only if the user says to replace it.
- 372. **Place the fixed moments first:** launches, events, and holidays go in the slots nearest their dates. Put a teaser 3 to 5 days before a launch and a recap after.
- 383. **Fill every slot** in the CSV: `topic` (specific, one sentence) and `hook` (the first line a reader sees). Match the pillar and the channel format:
- 39 - LinkedIn post: one idea, a story or a lesson, 150 to 250 words.
- 40 - Newsletter issue: one main piece plus two short links.
- 41 - Blog article: a question people search for, 800 to 1,500 words.
- 42 - Thread or carousel: a list of 5 to 8 steps or examples.
- 43 Specific beats general: "How one clinic cut no-shows from 18% to 7% with a two-line text" beats "Customer success story".
- 444. **Reuse on purpose.** A blog article on Tuesday can feed Wednesday's LinkedIn post and Thursday's newsletter. Note the source in `link`.
- 455. **Check the mix:** no pillar twice in a row on the same channel, no more than one promotional piece in five, at least one piece a week that asks the audience a question.
- 466. **Update the `.md`** to match the filled CSV and show the first two weeks in chat. Ask what to swap.
- 48See `examples/content-calendar-filled.csv` for what a finished week looks like.
- 50## Output format
- 52```markdown
- 53# Content calendar: 2026-11-09 to 2026-12-04
- 5520 pieces over 4 weeks. linkedin 12, blog 4, newsletter 4.
- 57## Week 1 (from 2026-11-09)
- 58| Date | Channel | Format | Pillar | Topic | Hook |
- 59| --- | --- | --- | --- | --- | --- |
- 60| Mon 2026-11-09 | linkedin | post | Product tips | The 2-line reminder text that halves no-shows | "Most reminder texts are too long. Ours is 2 lines." |
- 61```
- 63## Guardrails
- 65- Never schedule or publish anything. This plans; people post.
- 66- Do not invent customer names, results, or quotes for topics. Use `<customer story: need one>` and list what material is missing.
- 67- Keep the calendar realistic for the team size the user gave. Say so if the plan is more than they can produce.
- 68- Do not overwrite a calendar that has topics filled in.
