Annette's Hub
Editorial calendar research. Password required.
That's not it. Try again.
Editorial Calendar
Architecture
The definitive layouts, fields, and AI generation protocol for running content calendars across 8 brands without chaos. Covers format architecture, field design, multi-brand organization, visual UX, AI-native generation, adoption psychology, and repurposing frameworks.
Executive Summary
The research is unanimous: a single database (Airtable or Notion) with per-brand filtered views beats every alternative for 8+ divergent brands. Separate calendars per brand create cadence blindness; a flat unified spreadsheet creates cognitive overload. The winning architecture is hub-and-spoke inside one data store: a master calendar showing all 8 brands color-coded, plus 8 named filtered views for brand-level execution. The second most important finding is architectural: never let an LLM assign calendar dates. LLMs reliably put "Monday June 16" on a Wednesday. Dates get computed in Python and injected as a pre-built scaffold before the AI fills content. And the third finding determines whether any of this gets used: the calendar must live inside Postiz (already running self-hosted), eliminating the translate-to-scheduler step that kills calendar habits within two weeks.
The 6 Key Forces
Database beats spreadsheet at scale
One database with filtered views outperforms both separate-per-brand calendars (cadence blindness) and a flat unified spreadsheet (cognitive overload). Hybrid database + multi-view is the settled consensus.
Never let Claude assign dates
LLMs reliably misalign dates with days of the week. This is a hard documented bug. Dates must be computed in Python and injected into the prompt before any generation. The AI fills content only.
Pillars protect brand voice across 8 brands
Without explicit per-brand content pillars, content homogenizes toward the writer's default register when scheduling 8 brands in one sitting. Pillars are the forcing function.
Complexity kills calendars in week 3
The #1 abandonment driver is too many fields. A solo creator filling 12 fields per row drops the calendar when she's busy. Max 5 fields in the default view. Flex slots built in. Weekly batch session only.
Postiz integration removes the #1 friction point
Planning in one tool and scheduling in another is the documented primary calendar abandonment trigger. The calendar-ops skill outputs JSON that goes directly into Postiz via API.
Cross-brand repurposing is the highest-leverage move
One menopause research finding becomes 5 pieces across SmartStrongAlive, Vitalency, SEOBeliever, YouTube, and AjijicRelocationGuide. Same research session, three completely different audience frames.
Calendar Format Comparison
No single format wins for all use cases. The research shows a clear hierarchy based on complexity and team size.
| Format | Best For | Breaks When | Tools |
|---|---|---|---|
| Spreadsheet grid | Single brand, under 20 pieces/month, quick start | Content types multiply; multiple brands needed; filtering becomes manual | Google Sheets, Excel, HubSpot free template |
| Kanban board | Tracking production workflow states; single content type | No time-density visibility; publish-day pile-ups invisible; multiple brands | Trello, Monday.com board view, ClickUp board |
| Month / calendar view | Seeing what publishes WHEN; spotting gaps; client presentations | No field depth; can't filter by brand in basic tools | Google Calendar, CoSchedule, Notion calendar view |
| Database (Notion) | Document-heavy editorial; writing briefs inside entries; long-form teams | Weaker relational power than Airtable; slow at high row counts | Notion (all plans) |
| Database (Airtable) | Multi-brand structured data; linked records; automation; filtering | Rows aren't pages; limited for long briefs inside entries; cost | Airtable (Team plan ~$20/mo) |
| Hybrid database + views | Multi-brand solo creator; B2B + B2C simultaneously; long-form + social | Requires upfront schema design; setup complexity | Airtable or Notion with multiple views on same base |
Winner for 8 brands: Hybrid database with brand-colored filtered views. One Airtable or Notion base functions as a master database, with per-brand calendar views and a cross-brand master calendar view.
What Fields Actually Matter
Consensus across 7+ independent sources on the essential field set. The pattern: fields that force a decision survive long-term. Fields that require a lookup get abandoned within three weeks.
| Field | What it captures | Survives? | Notes |
|---|---|---|---|
| Title / Working Title | Planning anchor | Always | The one field always filled |
| Publish Date | Go-live date (+ time for social) | Always | Computed, never LLM-assigned |
| Brand | Which of the 8 businesses | Always | The primary filter axis |
| Platform / Channel | Where it publishes | Always | Substack, LinkedIn, Instagram, YouTube, Blog, Email |
| Content Format / Type | Reel, newsletter, carousel, thread, long-form | Yes | Forces the creative decision |
| Content Pillar | Thematic organizing unit | Yes | Replaces "category" in modern frameworks; protects voice |
| Hook | The opening line (separate from body copy) | Yes (long-form) | Earns its own field for newsletters, YouTube scripts |
| Status | Idea, Draft, Scheduled, Published | Always | Badge, not text string. Most valuable single field |
| CTA + Link | Call to action + UTM-tagged URL | Usually | UTM tagging strongly recommended |
| Creative Asset | Link to Drive/Dropbox design file | Usually | URL reference, not file upload |
| Funnel Stage | TOFU / MOFU / BOFU | B2B only | Essential for SEOBeliever and Vitalency |
| Target Persona | Named audience segment | B2B only | Medspa Owner, Local SEO Buyer, etc. |
| Word count target | Length goal | Never | Belongs in the brief, not the calendar. Always abandoned. |
| ROI / Business Goal | Strategic intent | Never | It's always the same 2-3 goals. Not worth a column. |
| Content quality score | Numeric rating | Never | Never scored consistently in practice. |
The 8-Brand Color Palette
Brand color is the primary visual axis in any calendar view. It tells you WHO before you read WHAT. Content type and status are secondary chips. Two-layer system: brand color as card border accent, status as colored badge.
Status Badge Colors (near-universal standard)
The AI Generation Protocol
Critical finding from research: LLMs reliably misalign dates with days of the week. They produce polished-looking calendars where "Monday, June 16" is actually a Wednesday. This is a documented, reproducible bug. Dates must ALWAYS be computed programmatically before any LLM call. The AI fills content only, never dates.
The 3-Pass Generation Architecture
- Pass 0: Compute dates in Python. Calculate the actual weekdays for the requested period. Build a date scaffold (Monday June 23, Tuesday June 24, etc.). Pass this to Claude as given data, not something to compute.
- Pass 1: Pillar confirmation. Load or confirm the brand's content pillars (can be cached as a system prompt). This decouples strategic pillar design from scheduling.
- Pass 2: Scaffold assignment. Assign which pillar and platform go to which date slot, based on the brand's posting cadence. Still no copy yet.
- Pass 3: Content fill, platform by platform. One LLM call per platform (LinkedIn, then Instagram, then email). Each call gets the pre-built date scaffold + platform rules + pillar assignments. Merge after. This produces materially better platform-native voice than filling all platforms in one table.
The skill outputs two formats: a markdown table for review, and JSON for direct Postiz import:
Why Calendars Get Abandoned (and How to Prevent It)
The research is sobering: most content calendars get abandoned within three weeks. The cause is always the same: the maintenance burden exceeds the perceived value. Here's what the research says actually works for a solo creator running multiple businesses.
| Abandonment Trigger | How Common | The Fix |
|---|---|---|
| Too many fields per entry (8-12+) | Most common | Max 5 fields in the default view. Others exist but aren't shown. |
| Planning too far ahead (monthly) | Very common | Rolling 2-week horizon only. Monthly calendars become fiction by week 2. |
| Daily update obligation | Common | One weekly batch session (60-90 min, Sunday or Monday). No daily check-ins. |
| Too many platforms for a solo creator | Common | Start with 2-3 platforms per brand. Add more only when cadence is consistent. |
| No batching habit | Common | The weekly batch session is the entire habit. Ideate, draft, schedule in one sitting. |
| Calendar doesn't live in the scheduling tool | Very common | Postiz integration. Plan in the skill, publish in Postiz, zero copy-paste. |
| Guilt loop after skipping | Common | Skip-recovery mode: "I missed last week" generates current week only, no backlog. |
The minimum viable calendar that actually gets used: Date, Brand, Platform, Pillar, Status. Five fields. One weekly session. Flex slots built in. Lives in Postiz.
Cross-Brand Content Multiplication
The Gary Vee/Hormozi/Welsh frameworks all point to the same structure: one pillar piece generates 10-30 derivatives. For Annette's 8 brands, this multiplies further: one research finding generates pieces for completely different audiences across multiple businesses.
Example: One Menopause Research Finding, Five Pieces
| Brand | Audience | Angle Frame | Platform | Title Example |
|---|---|---|---|---|
| SmartStrongAlive | Women 47-65 | Patient empowerment | Substack | "The estradiol data most women never see" |
| Vitalency | Medspa owners | Clinical revenue opportunity | "The estradiol optimization gap: why high-end medspas are adding hormone consulting" | |
| SEOBeliever | B2B SEO buyers | Content drives organic traffic | LinkedIn / Blog | "We published 12 menopause research summaries. Here's what happened to organic traffic." |
| SmartStrongAlive | Women 47-65 | Curiosity gap / shock stat | YouTube Short | The most surprising stat, 45 seconds to camera |
| AjijicRelocationGuide | Expat prospects | Healthcare access abroad | Blog | "Why expat women in Mexico choose HRT-forward primary care over US options" |
Platform Adaptation: What Actually Changes
Repurposing isn't reformatting. It's reframing. The same insight gets a completely different angle, structure, and hook for each platform and audience.
Substack (source)
- Angle
- Deep personal + evidence
- Structure
- Narrative, data, takeaway
- Hook style
- Story opening, payoff at end
- Length
- 800-2,000 words
- CTA
- Subscribe / share
- Angle
- Professional insight / authority
- Structure
- Data point, context, implication, lesson
- Hook style
- Counterintuitive stat or controversial statement
- Length
- 150-300 words
- CTA
- Follow / comment
Instagram Caption
- Angle
- Emotional resonance / identity
- Structure
- Hook, personal truth, universal, action
- Hook style
- First line must stop the scroll
- Length
- 150 words max
- CTA
- Save / share with someone who needs this
YouTube Shorts
- Angle
- Curiosity gap / shock value
- Structure
- Payoff first, then proof
- Hook style
- Open with the punchline or most surprising claim
- Length
- 30-60 seconds
- CTA
- Full video in bio
X / Twitter Thread
- Angle
- Hot take / provocation
- Structure
- Lead tweet = entire argument compressed
- Hook style
- Strong opinion, not a question
- Length
- 8-15 tweets
- CTA
- RT if useful
Email Newsletter
- Angle
- Intimate / conversational
- Structure
- One idea, one link, one ask
- Hook style
- "Hey, I learned something this week"
- Length
- 200-400 words
- CTA
- Click through to full piece
calendar-ops: What the Skill Does
The calendar-ops skill is now live at ~/.claude/skills/calendar-ops.md. Here's what it does when invoked.
Trigger phrases
- "Create a content calendar for [brand]"
- "Plan content for [brand] for [N] weeks"
- "What should I post this week for [brand]"
- "Build my editorial calendar for [brand]"
- "Batch my content for [brand]"
- "Social media calendar for [brand]"
What it generates
- Markdown table with Date, Day, Brand, Platform, Pillar, Format, Title/Hook, Status
- JSON block formatted for Postiz API import
- 2-3 flex slots per week (labeled "OPEN" for trending/reactive content)
- Optional repurpose layer: cross-brand derivative suggestions with angle shifts
Brand configs built in
- SmartStrongAlive (5 pillars, 3 platforms)
- SEOBeliever (5 pillars, 3 platforms)
- Vitalency (5 pillars, 2 platforms + B2B fields)
- AjijicRelocationGuide (5 pillars, 4 platforms)
- MensGroups (5 pillars, 3 platforms)
- ProteinFirstRecipes (5 pillars, 2 platforms)
- RecipeMemoir (4 pillars, 2 platforms)
- AnnetteThompson personal brand (3 pillars, hub + LinkedIn)
Contrarian View
The strongest argument against this architecture: a database calendar is a system, and systems require maintenance. For a solo creator running 8 businesses, the setup cost (defining pillars, configuring views, building Postiz integration) may exceed the ROI if posting isn't consistent to begin with. The minimum viable alternative is a Google Sheet with 5 columns and a Sunday morning habit. Some of the most consistent creators use nothing more. The database architecture earns its complexity only when (a) cadence is already consistent and (b) the cross-brand repurposing layer is actively used. If neither is true: start with the Google Sheet and add complexity as the system earns it. The calendar-ops skill outputs a markdown table that works as a standalone Google Sheet for exactly this reason.
7 Capabilities Added to the Skill
A cross-model review (Gemini, Grok, ChatGPT) surfaced 7 gaps in the initial skill spec. All 7 are now built into calendar-ops.
Image generation + preview
The --with-images flag triggers Ideogram MCP to generate a thumbnail for every non-email post. Images embed in the HTML calendar card and pre-populate Postiz's mediaUrls field. Each brand has its own visual style note.
Instagram 3x3 grid preview
For feed-first brands (SmartStrongAlive, ProteinFirstRecipes, RecipeMemoir), the skill generates a 3-column grid mockup showing how the next 9 posts will look together as a feed before they're scheduled.
Performance feedback loop
Pass a --performance note per brand before generating (e.g. "SSA: hormone posts 3x"). The skill biases the next week's pillar weighting toward winners and tags continuing top performers.
Trending topic flex slots
One Tavily search per brand at generation time pre-fills the OPEN flex slot with a current trending topic in that brand's niche. Still labeled FLEX so you can override it.
GEO-visibility tagging
Posts containing a stat, how-to answer, or definition get tagged [GEO-READY] in the calendar and "geo_ready": true in the JSON. Critical for SEOBeliever and Vitalency's AI search presence.
Cross-brand collision detection
After the full week is generated, the skill flags when two brands schedule a version of the same repurposed content to the same platform audience on the same day. Conflicting cards get a yellow border in the HTML calendar.
Weekly voice temperature dial
Add --voice warm for launch weeks or --voice authority for research weeks. The content fill prompt adjusts accordingly, brand by brand. Default is neutral (existing per-brand voice config).