social_calendar — Social Media Calendar
| Field | Value |
|---|---|
| Type key | social_calendar |
| Label | Social Media Calendar |
| Agent queue | social-calendar-planner |
| Plan tier | Free+ (starter, growth, professional) |
| Credits/unit | 1 |
| Monthly range | 1 (exactly 1 per month when social posts are planned) |
What it produces
A monthly social media posting schedule. Output is a JSON calendar with slots per week/day, each specifying: date, platform, topic angle, content type (educational / promotional / engagement / behind-the-scenes), format (carousel / reel / static / story), and notes for the writer. Stored in Activity.outputPayload.
{
"slots": [
{
"date": "2026-04-07",
"platform": "instagram",
"topicAngle": "Spring landscaping tips",
"contentType": "educational",
"format": "carousel",
"notesForWriter": "Focus on low-effort DIY; include 3 practical tips"
}
]
}Pipeline sequence
social-calendar-planner ──→ Activity: done
│
[auto-approved — no review]
│
social-post-writer jobs pick up individual slotsNo HITL gates. The calendar auto-approves on agent completion.
Status machine
Status tracked on the parent Activity record only.
| Activity status | Meaning |
|---|---|
pending | Scheduled, waiting |
queued | Submitted to BullMQ |
in_progress | Worker running |
done | Calendar written, outputPayload saved |
failed | Worker error |
The Deliverable moves from generating → approved automatically on done.
HITL gates
None. The social calendar is an internal planning artefact — not shown to clients for approval and not surfaced in the DM approvals queue.
Dependencies
- No hard dependencies. The calendar planner uses the tenant’s strategy goals, connected channels list, and posting frequency targets from the deliverable plan.
- Depended on by: each
social_postactivity — the relevant calendar slot (date, platform, angle, format, notes) is injected into each social-post-writer’s input payload.
DB records created
| Record | Created by | Notes |
|---|---|---|
DeliverableTemplate | deliverable-planner | 1 calendar per month |
Activity | activity-planner | type = social_calendar; runs before social_post activities |
Deliverable | social-calendar-planner worker | Auto-approved; not shown as a client-facing deliverable card |
No dedicated content model. Calendar JSON lives in Activity.outputPayload.
Channel requirement
The social calendar does not require connected channels. Calendar planning always proceeds regardless of whether the tenant has connected social accounts. Channels are only consulted when publishing the individual posts.
Key rules
- The planner must include exactly 1
social_calendarper month when social posts are included in the plan. - The calendar activity must be scheduled to complete before any
social_postactivities start (enforced viaActivity.dependsOnon each social post). - There is no client-visible deliverable card for the calendar — it is a pipeline input, not a client deliverable.