linkedin-studio/references/scheduling-strategy.md
Kjell Tore Guttormsen 25b356fc5c fix(linkedin-studio): S29c terminology-scrub — "thought leadership" → neutral (references/)
Third sub-pass of the S29 plugin-wide terminology scrub: the banned brand phrase
"thought leadership" (FORM A) removed from the reference-doc surface — the largest pass
(2x S29a/S29b). 34 edits across 15 reference files. Vocabulary consistent with S29a/S29b:
"thought leadership angle(s)" -> "content angle(s)"; "thought leadership" (positioning/practice)
-> "authority ..."; content-type labels -> "authority content / authority posts"; the whole
"Value Test" family -> "Authority Value Test".

Established cross-pass equivalents closed: glossary:229 "Thought Leadership Value Test" ->
"Authority Value Test" (closes the S29b cross-directory naming gap); glossary:29 "8 universal
thought leadership angles" -> "content angles"; engagement-frameworks:137 "Standard Thought
Leadership Structure" -> "Standard Post Structure" (matches S29a post:98).

S29e filename locked this session: thought-leadership-angles.md -> content-angles.md (operator-
chosen). The canonical file's in-file title/headers scrubbed now for consistency (H1 ->
"# Content Angles"; "## The Authority Value Test"; "### Step 3: Test For Authority Value");
the file rename + all 20 pointers remain S29e (atomic).

Judgment-calls (operator-approved): thought-leadership-angles:212 "disguised as thought
leadership" -> "expertise" (S29b vocab); linkedin-formats:295 -> "Text-based content" (avoids
authority...authority echo); linkedin-visual-style:3 -> "For building authority,"; ai-content-
framework:380 "main LinkedIn thought leadership skill" -> "content skill" (avoids awkward
"authority skill"). Kept by design: video-strategy-guide:429 ironic quote; video-strategy-
guide:532 "TL;DW" false positive (too long, didn't watch).

Scope (operator-locked, inherits S29a/S29b): FORM A only. FORM B ("thought leader(s)" as role,
references = 4) untouched. The 3 thought-leadership-angles.md filename pointers in references/
deferred to S29e.

Verify: FORM A in references/ = only the kept ironic quote (video:429); canonical file in-file
FORM A = NONE; FORM B unchanged (4); filename pointers unchanged (3); no anchor links to changed
headers; gate 81/0/0; counts 29/19/26/6 + v0.5.0 unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016qgzo6rxthw7KuxHjn5vyE
2026-06-20 05:44:05 +02:00

3.3 KiB

Post Scheduling Strategy

Reference for calculating optimal posting schedule based on weekly goal and content mix.

Optimal Posting Slots

Based on weekly_goal from state file:

2x/week

Slot Day Time (CET) Rationale
1 Tuesday 08:30 Peak B2B engagement window
2 Thursday 12:00 Lunch-break engagement peak

3x/week (default)

Slot Day Time (CET) Rationale
1 Tuesday 08:30 Peak B2B engagement window
2 Thursday 12:00 Lunch-break engagement peak
3 Saturday 10:00 Weekend catch-up readers, less competition

4x/week

Slot Day Time (CET) Rationale
1 Monday 09:00 Week-start motivation content
2 Tuesday 08:30 Peak B2B engagement window
3 Thursday 12:00 Lunch-break engagement peak
4 Saturday 10:00 Weekend catch-up readers

5x/week

Slot Day Time (CET) Rationale
1 Monday 09:00 Week-start motivation content
2 Tuesday 08:30 Peak B2B engagement window
3 Wednesday 08:30 Mid-week authority content
4 Thursday 12:00 Lunch-break engagement peak
5 Saturday 10:00 Weekend catch-up readers

Scheduling Algorithm

When assigning dates to batch-created posts:

  1. Start from next available optimal slot after today
  2. Skip slots that already have queued posts (check queue.json)
  3. If all slots this week are taken, spill into next week
  4. Assign in slot order (earliest available first)

Slot Assignment Logic

Given: weekly_goal, today's date, existing queue entries
1. Get the slot template for this weekly_goal (tables above)
2. Find current ISO week
3. For each post to schedule:
   a. Find next available slot (date >= tomorrow, no existing queued post)
   b. Assign that date + time
   c. Mark slot as taken
4. Return list of (date, time) assignments

Format Rotation Rules

Avoid monotony by rotating formats:

  • No consecutive same format — If post N is "standard", post N+1 should be "carousel", "quick", "video", etc.
  • Suggested rotation: standard → carousel → quick → standard → video
  • Format weights: 50% standard, 20% carousel, 15% quick, 15% video

Pillar Balance Rules

Ensure coverage across expertise areas:

  • No consecutive same pillar — Enforced by topic-rotation-gate hook
  • No pillar >50% in a 14-day window — Also enforced by hook
  • Ideal distribution: Each pillar appears at least once per 2 weeks
  • When batching: Spread pillars evenly across the week

Time Zone Notes

  • All times are CET (Central European Time)
  • Norwegian audience peaks: 7:30-9:00 and 11:30-13:00
  • For international audiences, 08:30 CET catches both EU morning and US east coast pre-work
  • Saturday posts perform well 09:00-11:00 CET

Queue Integration

When posts are scheduled via /linkedin:batch:

  1. Each post gets a scheduled_date and scheduled_time from this algorithm
  2. Entry is added to ${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/drafts/queue.json
  3. Session-start hook shows today's scheduled posts
  4. /linkedin:calendar (publish action) marks posts as published and updates state
  5. /linkedin:calendar shows the full schedule view