> ## Documentation Index
> Fetch the complete documentation index at: https://docs.writerzroom.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Content Calendar

> Plan content slots before generation begins. Schedule topics, assign templates and verticals, track status, and execute when ready.

The Content Calendar is the planning layer that sits before generation. Rather than generating reactively, you schedule content slots for specific dates, assign the configuration each piece will use, and execute slots when editorial priorities dictate.

This is the workflow agencies and enterprise content teams use to operate at scale: plan the month, then generate in priority order with all configuration decisions already made.

Navigate to **Calendar** in the top navigation bar to access it.

## The Planning Model

Most AI content tools treat generation as the starting point. WriterzRoom separates planning from generation so the two activities happen at the right time and with the right level of attention.

Planning is a strategic decision, what to write, for whom, using which template and vertical. Generation is an execution decision, running the pipeline when the slot is ready. The calendar keeps these distinct.

A slot without a generated draft is a commitment. A slot with a generated draft is a deliverable. The status pipeline tracks the distance between the two.

## Creating a Slot

Click any date on the calendar grid to open the planning drawer. Empty cells show a **+** icon on hover. Each slot captures:

| Field         | Required | Purpose                                                                         |
| ------------- | -------- | ------------------------------------------------------------------------------- |
| Title         | Yes      | Descriptive name for the planned piece, used as the calendar chip label         |
| Topic / Brief | Yes      | What the content should cover, carried into generation context when you execute |
| Template      | No       | The template you intend to use when generating                                  |
| Style Profile | No       | The style profile to pair with the template                                     |
| Vertical      | No       | The industry vertical, if applicable                                            |
| Notes         | No       | Team reminders, references, editorial direction, or approver names              |

Slots are saved to your account immediately and persist across sessions. They appear on the calendar grid as colored chips on their scheduled date, color-coded by status.

<Tip>
  Fill in Template, Style Profile, and Vertical during planning, not at generation time. When you click Generate Now later, these are pre-populated so you go straight to the topic-specific parameters without making configuration decisions under time pressure.
</Tip>

<div style={{ border: '1px solid rgba(79,110,247,0.2)', borderRadius: '10px', padding: '20px 24px', background: 'rgba(79,110,247,0.04)', margin: '1.5rem 0' }}>
  <div style={{ fontSize: '11px', color: 'var(--colors-content-secondary)', textTransform: 'uppercase', letterSpacing: '0.06em', marginBottom: '14px' }}>Example slot</div>

  <div style={{ display: 'grid', gridTemplateColumns: '120px 1fr', gap: '8px 16px', fontSize: '13px' }}>
    <div style={{ color: 'var(--colors-content-secondary)', fontWeight: '500' }}>Title</div>
    <div>Q3 Compliance Brief: Data Handling</div>
    <div style={{ color: 'var(--colors-content-secondary)', fontWeight: '500' }}>Topic</div>
    <div>Data handling considerations for health technology teams processing sensitive information</div>
    <div style={{ color: 'var(--colors-content-secondary)', fontWeight: '500' }}>Template</div>
    <div>White Paper</div>
    <div style={{ color: 'var(--colors-content-secondary)', fontWeight: '500' }}>Style Profile</div>
    <div>Executive Summary</div>
    <div style={{ color: 'var(--colors-content-secondary)', fontWeight: '500' }}>Vertical</div>
    <div>Healthcare & Medical AI</div>
    <div style={{ color: 'var(--colors-content-secondary)', fontWeight: '500' }}>Scheduled</div>
    <div>May 20, 2026</div>
    <div style={{ color: 'var(--colors-content-secondary)', fontWeight: '500' }}>Status</div>

    <div style={{ display: 'inline-flex', alignItems: 'center', gap: '6px' }}>
      <span style={{ width: '8px', height: '8px', borderRadius: '50%', background: 'rgba(100,116,139,0.8)', display: 'inline-block' }} />

      Planned
    </div>

    <div style={{ color: 'var(--colors-content-secondary)', fontWeight: '500' }}>Notes</div>
    <div>Compliance review required before publication. Reference relevant policy guidance and internal review notes.</div>
  </div>
</div>

## Status Pipeline

Each slot moves through four statuses as work progresses. Status is set manually, it is an editorial signal, not an automated system state.

<div style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: '8px', margin: '1rem 0' }}>
  <div style={{ border: '1px solid rgba(100,116,139,0.3)', borderRadius: '8px', padding: '12px 14px', background: 'rgba(100,116,139,0.08)' }}>
    <div style={{ fontSize: '10px', color: 'var(--colors-content-secondary)', marginBottom: '4px', textTransform: 'uppercase', letterSpacing: '0.05em' }}>01</div>
    <div style={{ fontWeight: '600', fontSize: '13px', marginBottom: '4px' }}>Planned</div>
    <div style={{ fontSize: '11px', color: 'var(--colors-content-secondary)', lineHeight: '1.5' }}>Slot created, no generation started. A commitment on the editorial calendar.</div>
  </div>

  <div style={{ border: '1px solid rgba(59,130,246,0.3)', borderRadius: '8px', padding: '12px 14px', background: 'rgba(59,130,246,0.08)' }}>
    <div style={{ fontSize: '10px', color: 'var(--colors-content-secondary)', marginBottom: '4px', textTransform: 'uppercase', letterSpacing: '0.05em' }}>02</div>
    <div style={{ fontWeight: '600', fontSize: '13px', marginBottom: '4px' }}>In Progress</div>
    <div style={{ fontSize: '11px', color: 'var(--colors-content-secondary)', lineHeight: '1.5' }}>Generation or editing actively underway. Signals to collaborators the piece is being worked.</div>
  </div>

  <div style={{ border: '1px solid rgba(245,158,11,0.3)', borderRadius: '8px', padding: '12px 14px', background: 'rgba(245,158,11,0.08)' }}>
    <div style={{ fontSize: '10px', color: 'var(--colors-content-secondary)', marginBottom: '4px', textTransform: 'uppercase', letterSpacing: '0.05em' }}>03</div>
    <div style={{ fontWeight: '600', fontSize: '13px', marginBottom: '4px' }}>Generated</div>
    <div style={{ fontSize: '11px', color: 'var(--colors-content-secondary)', lineHeight: '1.5' }}>Draft exists in the Content Library. In review or refinement before publication.</div>
  </div>

  <div style={{ border: '1px solid rgba(34,197,94,0.3)', borderRadius: '8px', padding: '12px 14px', background: 'rgba(34,197,94,0.08)' }}>
    <div style={{ fontSize: '10px', color: 'var(--colors-content-secondary)', marginBottom: '4px', textTransform: 'uppercase', letterSpacing: '0.05em' }}>04</div>
    <div style={{ fontWeight: '600', fontSize: '13px', marginBottom: '4px' }}>Published</div>
    <div style={{ fontSize: '11px', color: 'var(--colors-content-secondary)', lineHeight: '1.5' }}>Content delivered to its destination. Terminal status in the editorial lifecycle.</div>
  </div>
</div>

Update status from the entry drawer. Open any existing slot by clicking its chip on the calendar grid, then select the new status from the pipeline bar at the top of the drawer.

## Executing a Slot

When a slot is ready to generate, open it and click **Generate Now**. WriterzRoom routes to the generation workspace with the template, style profile, and vertical pre-selected from the slot configuration. You land directly at the parameter inputs — topic, audience, key points, and any template-specific fields.

Complete the parameters and submit. The generation pipeline runs normally. When the draft completes, return to the calendar and update the slot status to **Generated**.

<Info>
  The Topic / Brief you entered during planning is not automatically injected as a parameter, it is reference context for you, not a prompt override. Use it to inform how you fill the generation parameters when you execute.
</Info>

## Editing a Slot

Click any chip on the calendar grid to reopen the entry drawer. All fields are editable. You can update the title, topic, template, style profile, vertical, notes, and status at any time before or after generation.

To delete a slot, open the entry drawer and click **Delete Entry**. Deletion is permanent and does not affect any generated content linked to the slot, content lives in the Content Library independently.

## Calendar Navigation

The calendar renders one month at a time. Use the chevron controls in the header to move forward and backward by month. Click **Today** to return to the current month.

Dates with planned entries show colored chips, up to three per cell, with a "+N more" indicator when a date has additional entries. The status legend below the header maps colors to pipeline stages.

## Summary Strip

Below the calendar grid, four cards show the total count of entries at each status stage for the current month view. Use these to assess workload at a glance, how many pieces are planned versus in progress versus ready for publication.

## Agency and Enterprise Workflow

For teams managing multiple clients or content programs, the recommended workflow is:

<div style={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: '10px', margin: '1rem 0' }}>
  <div style={{ border: '1px solid rgba(255,255,255,0.1)', borderRadius: '8px', padding: '14px 16px', background: 'rgba(255,255,255,0.04)' }}>
    <div style={{ fontSize: '10px', color: 'var(--colors-content-secondary)', marginBottom: '4px', textTransform: 'uppercase', letterSpacing: '0.05em' }}>Step 01</div>
    <div style={{ fontWeight: '600', fontSize: '13px', marginBottom: '6px' }}>Plan the month</div>
    <div style={{ fontSize: '12px', color: 'var(--colors-content-secondary)', lineHeight: '1.6' }}>Populate the calendar with all planned pieces: titles, topics, templates, verticals, and notes. Think strategically. Do not generate yet.</div>
  </div>

  <div style={{ border: '1px solid rgba(255,255,255,0.1)', borderRadius: '8px', padding: '14px 16px', background: 'rgba(255,255,255,0.04)' }}>
    <div style={{ fontSize: '10px', color: 'var(--colors-content-secondary)', marginBottom: '4px', textTransform: 'uppercase', letterSpacing: '0.05em' }}>Step 02</div>
    <div style={{ fontWeight: '600', fontSize: '13px', marginBottom: '6px' }}>Prioritize by date and dependency</div>
    <div style={{ fontSize: '12px', color: 'var(--colors-content-secondary)', lineHeight: '1.6' }}>Identify hard publish dates and content dependencies. Pillar posts before satellite pieces. Reorder by updating scheduled dates.</div>
  </div>

  <div style={{ border: '1px solid rgba(255,255,255,0.1)', borderRadius: '8px', padding: '14px 16px', background: 'rgba(255,255,255,0.04)' }}>
    <div style={{ fontSize: '10px', color: 'var(--colors-content-secondary)', marginBottom: '4px', textTransform: 'uppercase', letterSpacing: '0.05em' }}>Step 03</div>
    <div style={{ fontWeight: '600', fontSize: '13px', marginBottom: '6px' }}>Execute in priority order</div>
    <div style={{ fontSize: '12px', color: 'var(--colors-content-secondary)', lineHeight: '1.6' }}>Click Generate Now on each slot, complete the parameters, and submit. Update status to In Progress as you start each piece.</div>
  </div>

  <div style={{ border: '1px solid rgba(255,255,255,0.1)', borderRadius: '8px', padding: '14px 16px', background: 'rgba(255,255,255,0.04)' }}>
    <div style={{ fontSize: '10px', color: 'var(--colors-content-secondary)', marginBottom: '4px', textTransform: 'uppercase', letterSpacing: '0.05em' }}>Step 04</div>
    <div style={{ fontWeight: '600', fontSize: '13px', marginBottom: '6px' }}>Review and update status</div>
    <div style={{ fontSize: '12px', color: 'var(--colors-content-secondary)', lineHeight: '1.6' }}>As drafts complete and move through editorial review and publication, update slot statuses. The summary strip gives an accurate workload snapshot at any point.</div>
  </div>
</div>

## What the Calendar Does Not Do

The Content Calendar is a planning and tracking tool, not a publishing scheduler. It does not:

* Automatically trigger generation on a scheduled date
* Push content to publishing destinations on a schedule
* Integrate with external editorial calendars (CoSchedule, Airtable, Notion)
* Send notifications or reminders when planned dates arrive

Automated scheduling and external calendar integrations are on the roadmap. See [Coming Soon](/roadmap/coming-soon) for status.

## Related

* [Content Management](/product/content-management): Content Library, editing, export, and sharing
* [Generation Workspace](/product/generation-workspace): How to configure and submit a generation request
* [Verticals](/product/verticals): What verticals control in the pipeline
* [Generation Tiers](/getting-started/generation-tiers): Quick, Standard, and Premium pipeline differences
