BREAKING CHANGE: the marketplace slug, the agent namespace (linkedin-studio:<agent>), and the runtime state-file path (~/.claude/linkedin-studio.local.md) all change. Reinstall required; existing state migrated in place (post metrics, streak, history preserved). The /linkedin:* commands are unchanged — the command namespace is set per-command in frontmatter and was always independent of the plugin slug. Functionality is byte-identical to v2.4.0; this release is pure identity. - dir + manifests: plugins/linkedin-studio + plugin.json + root marketplace.json - agent namespace updated in commands/newsletter.md (only functional invoker) - state path updated in 4 hook scripts + topic-rotation prompt + state template - catch-all skill dir renamed skills/linkedin-studio (5 functional skills unchanged) - docs + version bump to 3.0.0 across README badge, CHANGELOG, root README/CLAUDE.md - historical records (CHANGELOG past entries, docs/ build artifacts, config-audit v5.0.0 snapshots) intentionally retain the old slug Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.3 KiB
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 thought leadership |
| 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:
- Start from next available optimal slot after today
- Skip slots that already have queued posts (check queue.json)
- If all slots this week are taken, spill into next week
- 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:
- Each post gets a
scheduled_dateandscheduled_timefrom this algorithm - Entry is added to
assets/drafts/queue.json - Session-start hook shows today's scheduled posts
/linkedin:calendar(publish action) marks posts as published and updates state/linkedin:calendarshows the full schedule view