content-calendar

Plan, schedule, and publish social media posts across Twitter/X, LinkedIn, and Instagram from a single self-hosted calendar interface. Use when asked to schedule social posts, manage a content pipeline, preview platform-specific formatting, or bulk-import a posting schedule from CSV. Triggers include "schedule post", "social media calendar", "publish to Twitter", "content pipeline", "bulk schedule", or "content calendar".

7 stars

Best use case

content-calendar is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Plan, schedule, and publish social media posts across Twitter/X, LinkedIn, and Instagram from a single self-hosted calendar interface. Use when asked to schedule social posts, manage a content pipeline, preview platform-specific formatting, or bulk-import a posting schedule from CSV. Triggers include "schedule post", "social media calendar", "publish to Twitter", "content pipeline", "bulk schedule", or "content calendar".

Teams using content-calendar should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/content-calendar/SKILL.md --create-dirs "https://raw.githubusercontent.com/heldernoid/agentic-build-templates/main/projects/automation-productivity/content-calendar/skills/content-calendar/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/content-calendar/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How content-calendar Compares

Feature / Agentcontent-calendarStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Plan, schedule, and publish social media posts across Twitter/X, LinkedIn, and Instagram from a single self-hosted calendar interface. Use when asked to schedule social posts, manage a content pipeline, preview platform-specific formatting, or bulk-import a posting schedule from CSV. Triggers include "schedule post", "social media calendar", "publish to Twitter", "content pipeline", "bulk schedule", or "content calendar".

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# content-calendar

Self-hosted social media content planner. Schedule posts across platforms, preview formatting, and manage a team content pipeline.

## When to use

- Planning and scheduling social media posts across multiple platforms
- Previewing how content will appear on Twitter/X, LinkedIn, and Instagram before publishing
- Managing a content pipeline with a small team (drafts, review, schedule)
- Bulk scheduling posts from a CSV file
- Tracking post performance analytics

## Prerequisites

1. content-calendar server running (self-hosted or Docker)
2. Login credentials (email + password)
3. At least one platform connected in Settings

## Quick Start

```bash
# Start with Docker
docker compose up -d

# Open in browser
open http://localhost:3000
```

Default admin credentials are set during first run via the seed script.

## Core Workflows

### Create and schedule a post

1. Open the calendar or Posts view.
2. Click "New Post".
3. Enter a title (internal reference), body text, and select platforms.
4. Upload or pick media from the library.
5. Click "Schedule Post" and pick a date and time.
6. Review the platform preview and confirm.

### Bulk schedule from CSV

1. Go to Posts, then Bulk Import.
2. Upload a CSV with columns: `title`, `body`, `platforms`, `scheduled_at`.
3. Review the parsed rows for validation errors.
4. Click "Schedule N Posts" to confirm.

CSV format:
```
title,body,platforms,scheduled_at
Spring sale,Check out our sale!,twitter;linkedin,2026-03-24T09:00:00Z
```

### Publish immediately

On any scheduled post, click the three-dot menu and select "Publish Now". The scheduler will attempt to publish within seconds.

## API Reference

All API calls require a valid session cookie (`POST /api/auth/login` to authenticate).

| Method | Path | Description |
|---|---|---|
| POST | /api/auth/login | Log in (body: email, password) |
| GET | /api/posts | List posts (filter: status, platform) |
| POST | /api/posts | Create post |
| PUT | /api/posts/:id | Update post |
| DELETE | /api/posts/:id | Delete post |
| POST | /api/posts/:id/publish | Publish immediately |
| GET | /api/calendar | Posts for month (?year=2026&month=3) |
| POST | /api/media | Upload media file (multipart) |
| GET | /api/analytics | Aggregate stats |

## Environment Variables

| Variable | Description | Default |
|---|---|---|
| PORT | Server port | 3000 |
| DATA_DIR | SQLite + media storage path | ./data |
| SESSION_SECRET | Session signing secret (required) | - |
| MEDIA_MAX_SIZE_MB | Max upload size in MB | 50 |
| SCHEDULER_ENABLED | Enable auto-publishing: 0 or 1 | 1 |
| LOG_LEVEL | debug, info, warn, error | info |

## Post Status Lifecycle

```
draft -> scheduled -> published
                   -> failed (retry up to 3 times)
```

A post with no `scheduled_at` is a draft. Setting a date and saving moves it to `scheduled`. The cron job publishes due posts every minute.

## Platform Rules Summary

| Platform | Body limit | Images | Links |
|---|---|---|---|
| Twitter / X | 280 chars | 4 images or 1 video | Auto-card |
| LinkedIn | 3000 chars | 9 images or 1 video | Auto-preview |
| Instagram | 2200 chars | 10 images or 1 video | Link in bio only |

## Troubleshooting

### Post shows "Failed"

The platform API returned an error. Check Settings to confirm the access token is still valid. LinkedIn tokens expire frequently and must be reconnected. Click "Retry" on the failed post after reconnecting.

### Scheduled post not published

Confirm `SCHEDULER_ENABLED=1` in your environment. The scheduler runs every minute; posts may publish up to 60 seconds after their scheduled time.

### Platform connection not working

OAuth tokens expire. Go to Settings > Platform Connections and click "Reconnect" for the affected platform.

### Media upload rejected

Check that the file is under MEDIA_MAX_SIZE_MB and is one of the allowed types: PNG, JPG, GIF, WebP, MP4, MOV.

Related Skills

Skill: Uptime Monitoring

7
from heldernoid/agentic-build-templates

## Overview

Skill: Status Page

7
from heldernoid/agentic-build-templates

## Overview

Skill: unit-conversion

7
from heldernoid/agentic-build-templates

## Overview

Skill: recipe-scaler

7
from heldernoid/agentic-build-templates

## Overview

reading-list

7
from heldernoid/agentic-build-templates

Operate the reading-list API to save, manage, tag, search, and export articles.

email-digest

7
from heldernoid/agentic-build-templates

Configure, test, and troubleshoot the reading-list daily email digest delivered via nodemailer.

websocket-realtime

7
from heldernoid/agentic-build-templates

Use the WebSocket connection in poll-builder to receive live vote updates. Use when you need to stream real-time poll results, monitor a poll for new votes, or build a live dashboard. Triggers include "live results", "real-time updates", "stream votes", "watch poll", or "WebSocket".

poll-builder

7
from heldernoid/agentic-build-templates

Self-hosted poll creation tool with real-time results. Use when you need to create a poll, check vote counts, close a poll, export results, or get the shareable link for a poll. Triggers include "create poll", "vote", "poll results", "survey", "collect votes", "share poll", or any task involving polling or voting.

Skill: personal-finance

7
from heldernoid/agentic-build-templates

## Overview

Skill: csv-import

7
from heldernoid/agentic-build-templates

## Overview

Skill: Syntax Highlighting

7
from heldernoid/agentic-build-templates

## Purpose

Skill: Pastebin Core

7
from heldernoid/agentic-build-templates

## Purpose