Content Calendar

Manage your marketing content pipeline across blog, social, email, video, and community channels — with entity-backed tracking and multi-view workflows.

Why Track Content as Entities?

Most teams track content in spreadsheets or project management tools that are disconnected from their workspace. In Based, content entries are entities in your bucket — the same way you track customers, partners, and tasks. This means you can embed a content calendar DataTable on your Marketing page, filter by channel on your Social page, group by status on a Kanban board, and link content pieces to campaigns and partners.

Page Structure

📣 Marketing
│
├── 📅 Content Calendar
│   ├── DataTable: content/ sorted by publishDate
│   │   Columns: title, channel, type, status, author, publishDate, campaign
│   ├── Kanban: content/ grouped by status
│   │   idea → drafting → review → scheduled → published
│   └── Filtered views:
│       ▶ This Week (DataTable filtered by publishDate in current week)
│       ▶ Blog Only (DataTable filtered by channel=blog)
│       ▶ Social Only (DataTable filtered by channel=social)
│       ▶ My Content (DataTable filtered by author=currentUser)
│
├── 📝 Blog
│   ├── Published Posts (DataTable: content/ filtered by channel=blog, status=published)
│   │   Columns: title, publishDate, author, views, conversions
│   ├── Editorial Calendar (Kanban: content/ filtered by channel=blog, grouped by status)
│   ├── Blog Post Template
│   │   ▶ Title: [SEO-optimized headline]
│   │   ▶ Target keyword: [primary keyword]
│   │   ▶ Audience: [who is this for]
│   │   ▶ Goal: [awareness / consideration / conversion]
│   │   ▶ Outline:
│   │       1. Hook — why should they care?
│   │       2. Problem — what pain point are we addressing?
│   │       3. Solution — how does our approach solve it?
│   │       4. Evidence — data, examples, case studies
│   │       5. CTA — what should they do next?
│   │   ▶ Distribution:
│   │       □ Publish on blog
│   │       □ Share on Twitter/X
│   │       □ Share on LinkedIn
│   │       □ Send to email list
│   │       □ Submit to relevant communities
│   │       □ Repurpose into social snippets
│   └── SEO Tracker
│       DataTable: keywords/
│       Columns: keyword, volume, difficulty, currentRank, targetRank, contentId
│
├── 📱 Social Media
│   ├── Weekly Plan (DataTable: content/ filtered by channel=social, this week)
│   │   Columns: platform, type, copy, mediaAsset, publishTime, status
│   ├── Platform Strategies
│   │   ▶ Twitter/X Strategy
│   │       Frequency: 5-10x/week
│   │       Voice: [brand voice description]
│   │       Content mix: 40% insights, 30% engagement, 20% product, 10% culture
│   │   ▶ LinkedIn Strategy
│   │       Frequency: 3-5x/week
│   │       Voice: [professional but authentic]
│   │       Content mix: thought leadership, team highlights, product updates
│   │   ▶ Instagram / TikTok (if applicable)
│   │       ...
│   ├── Social Assets Library
│   │   ▶ Brand templates (file blocks)
│   │   ▶ Logo pack
│   │   ▶ Approved headshots
│   │   ▶ Product screenshots
│   └── Engagement Queue
│       DataTable: social-queue/ (people to engage with, comments to reply to)
│
├── 📧 Email
│   ├── Email Sequences (DataTable: email-sequences/)
│   │   Columns: name, trigger, emails, openRate, clickRate, status
│   ├── Newsletter Archive
│   │   ▶ [Date] — [Subject line] — [open rate, click rate]
│   │   ▶ ...
│   ├── Email Templates
│   │   ▶ Welcome Sequence (5 emails over 14 days)
│   │       Email 1 (Day 0): Welcome + quick win
│   │       Email 2 (Day 2): Core feature highlight
│   │       Email 3 (Day 5): Customer story
│   │       Email 4 (Day 10): Advanced use case
│   │       Email 5 (Day 14): CTA to upgrade / book call
│   │   ▶ Newsletter Template
│   │       Subject: [catchy, <50 chars]
│   │       Preview text: [extend the hook]
│   │       Body: hero → main story → 2-3 quick links → CTA
│   │   ▶ Product Update Email
│   │   ▶ Event Invitation Email
│   │   ▶ Re-engagement Email (for dormant users)
│   └── Email Performance
│       DataTable: newsletters/ with metrics
│       Columns: date, subject, sent, opened, clicked, unsubscribed
│
├── 🎥 Video / Podcast
│   ├── Production Pipeline (Kanban: content/ filtered by type in [video, podcast])
│   │   scripting → recording → editing → review → published
│   ├── Video Ideas Backlog
│   │   DataTable: content/ filtered by type=video, status=idea
│   ├── Recording Checklist
│   │   ▶ Script / outline finalized
│   │   ▶ Equipment tested (camera, mic, lighting)
│   │   ▶ Quiet environment secured
│   │   ▶ Guest briefed (if applicable)
│   │   ▶ Record
│   │   ▶ Review raw footage
│   │   ▶ Send to editor
│   │   ▶ Review edit
│   │   ▶ Add captions / thumbnail
│   │   ▶ Upload and schedule
│   └── Distribution Checklist
│       ▶ YouTube (full video)
│       ▶ Twitter/X (short clips)
│       ▶ LinkedIn (clips + article)
│       ▶ Blog (embed + transcript)
│       ▶ Newsletter mention
│
├── 🏘 Community
│   ├── Community Channels
│   │   ▶ Discord — roles, channels, moderation guidelines
│   │   ▶ Telegram — purpose, rules
│   │   ▶ Reddit — which subreddits, posting guidelines
│   │   ▶ GitHub Discussions — topics, labels
│   ├── Community Content Calendar
│   │   DataTable: content/ filtered by channel=community
│   │   AMA schedule, community calls, challenge announcements
│   └── Community Metrics
│       DataTable: community-metrics/ (weekly snapshots)
│       Columns: week, members, activeMembers, messages, newJoins, churn
│
├── 📊 Campaigns
│   ├── Active Campaigns (DataTable: campaigns/)
│   │   Columns: name, goal, channels, startDate, endDate, budget, leads, status
│   ├── Campaign Template
│   │   ▶ Name: [campaign name]
│   │   ▶ Goal: [awareness / leads / conversions / retention]
│   │   ▶ Target audience: [segment]
│   │   ▶ Channels: [list all channels involved]
│   │   ▶ Content pieces: [DataTable filtered by campaignId]
│   │   ▶ Budget: $X
│   │   ▶ Timeline: [start] → [end]
│   │   ▶ Success metrics: [specific KPIs]
│   │   ▶ Owner: [person responsible]
│   └── Past Campaign Results
│       DataTable: campaigns/ filtered by status=completed
│
└── 📚 Marketing Wiki
    ├── Brand Guidelines
    │   ▶ Voice and tone
    │   ▶ Visual identity (colors, fonts, logo usage)
    │   ▶ Do's and don'ts
    ├── Content Pillars
    │   ▶ Pillar 1: [topic area] — what we talk about and why
    │   ▶ Pillar 2: [topic area]
    │   ▶ Pillar 3: [topic area]
    ├── Distribution Playbook
    │   For each content type, where and how to distribute
    ├── Analytics Setup
    │   UTM conventions, tracking pixels, attribution model
    └── Competitor Content Analysis

Entity Schemas

{
  "Content": {
    "path": "@content/(id:nanoid)",
    "file": "[data].json",
    "fields": {
      "title": { "type": "string", "required": true },
      "channel": { "type": "string", "required": true },
      "type": { "type": "string", "required": true },
      "status": { "type": "string", "default": "idea" },
      "author": { "type": "string" },
      "publishDate": { "type": "string" },
      "campaignId": { "type": "string" },
      "platform": { "type": "string" },
      "targetKeyword": { "type": "string" },
      "brief": { "type": "string" },
      "draftUrl": { "type": "string" },
      "publishedUrl": { "type": "string" },
      "assetIds": { "type": "array" },
      "metrics": { "type": "object" },
      "tags": { "type": "array" },
      "notes": { "type": "string" }
    },
    "oplog": true,
    "softDelete": true
  },
  "EmailSequence": {
    "path": "@email-sequences/(id:nanoid)",
    "file": "[data].json",
    "fields": {
      "name": { "type": "string", "required": true },
      "trigger": { "type": "string" },
      "status": { "type": "string", "default": "draft" },
      "emails": { "type": "array" },
      "subscriberCount": { "type": "number", "default": 0 },
      "openRate": { "type": "number" },
      "clickRate": { "type": "number" },
      "conversionRate": { "type": "number" },
      "notes": { "type": "string" }
    },
    "oplog": true,
    "softDelete": true
  },
  "Newsletter": {
    "path": "@newsletters/(id:nanoid)",
    "file": "[data].json",
    "fields": {
      "subject": { "type": "string", "required": true },
      "sendDate": { "type": "string" },
      "status": { "type": "string", "default": "draft" },
      "sent": { "type": "number", "default": 0 },
      "opened": { "type": "number", "default": 0 },
      "clicked": { "type": "number", "default": 0 },
      "unsubscribed": { "type": "number", "default": 0 },
      "contentIds": { "type": "array" },
      "notes": { "type": "string" }
    },
    "oplog": true,
    "softDelete": true
  },
  "Keyword": {
    "path": "@keywords/(id:nanoid)",
    "file": "[data].json",
    "fields": {
      "keyword": { "type": "string", "required": true },
      "volume": { "type": "number" },
      "difficulty": { "type": "number" },
      "currentRank": { "type": "number" },
      "targetRank": { "type": "number" },
      "contentId": { "type": "string" },
      "notes": { "type": "string" }
    },
    "oplog": true,
    "softDelete": true
  }
}

Content Workflow

Content Pipeline Stages:

idea          — Raw concept, topic, or request (anyone can add)
brief         — Fleshed out: audience, goal, outline, keyword
drafting      — Writer is producing the content
review        — Editor / team reviewing the draft
revision      — Feedback incorporated, final polish
scheduled     — Approved and queued for publish date
published     — Live and distributed
evergreen     — Published and still relevant (update periodically)
archived      — No longer relevant or promoted

Channel Types:

blog          — Long-form written content on your site
social        — Short-form posts on Twitter/X, LinkedIn, Instagram, etc.
email         — Newsletters, sequences, announcements
video         — YouTube, Loom, TikTok, product demos
podcast       — Audio content, interviews
community     — Discord/Telegram posts, AMAs, community calls
press         — Press releases, media pitches, guest articles
partner       — Co-created content with partners

Content Types:

article       — Blog post, guide, tutorial
announcement  — Product update, feature launch, company news
case_study    — Customer success story
thought_piece — Opinion, trend analysis, industry commentary
tutorial      — Step-by-step how-to
comparison    — vs. competitor, tool comparison
interview     — Q&A with customer, partner, expert
recap         — Event recap, monthly roundup
thread        — Twitter/X thread
short_video   — <60s clip for social
long_video    — >5min deep dive
newsletter    — Regular email digest

Content Pillars

Define 3-5 content pillars — topic areas that align with your product, audience, and brand. Every piece of content should map to a pillar. Create a page in your Marketing Wiki to document these:

# Content Pillars

## Pillar 1: [Core Problem You Solve]
Why: This is what customers search for
Example topics:
  - "How to [solve problem] with [your approach]"
  - "[Problem] benchmarks and best practices"
  - "Common mistakes in [problem area]"

## Pillar 2: [Your Unique Approach / Technology]
Why: This differentiates you from competitors
Example topics:
  - "Why we built [product] this way"
  - "Deep dive into [technology/architecture]"
  - "[Your approach] vs [traditional approach]"

## Pillar 3: [Customer Success / Use Cases]
Why: Social proof and inspiration
Example topics:
  - "How [Customer] achieved [result] with [product]"
  - "[Industry] use cases for [product]"
  - "[N] ways teams use [product] for [workflow]"

## Pillar 4: [Industry Trends / Thought Leadership]
Why: Positions you as experts, builds trust
Example topics:
  - "The future of [industry/category]"
  - "[Year] trends in [space]"
  - "What [big change] means for [audience]"

Content Mix Target:
  Pillar 1: 35% (search-driven, evergreen)
  Pillar 2: 25% (differentiation, mid-funnel)
  Pillar 3: 20% (social proof, bottom-funnel)
  Pillar 4: 20% (thought leadership, top-funnel)

Distribution Checklist

Every piece of content should have a distribution plan. Use this as a toggle block on each content page:

Distribution Checklist (per content piece):

□ Publish on primary channel (blog, YouTube, etc.)
□ Share on Twitter/X with 3 different angles
□ Post on LinkedIn (native post, not just link)
□ Add to next newsletter
□ Share in Discord / Telegram community
□ Submit to relevant Reddit communities
□ Send to partners for co-promotion (if relevant)
□ Create 2-3 social snippets for future scheduling
□ Update internal wiki if content has team-relevant info
□ Track performance at 24h, 7d, 30d

Tips

  • Batch content creation. Write 4 blog posts in one week, then schedule over a month. Creation and distribution are different muscles.
  • Repurpose aggressively. One blog post becomes: a Twitter thread, 3 LinkedIn posts, a newsletter section, a short video, and a community discussion topic.
  • Use the campaignId field to group content by campaign. Filter the DataTable to see everything for one launch or initiative.
  • Review content performance monthly. Sort by metrics to find what resonates. Double down on what works.
  • Evergreen content is your best investment. Mark high-performing pieces as "evergreen" and update them quarterly.

Related Templates

Based ships built-in templates that complement this playbook:

  • Marketing KPIs — traffic, leads, conversion, and CAC
  • Status Update Template — weekly stakeholder updates
Browse all templates →