taketomarket 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +10 -0
- package/LICENSE +21 -0
- package/README.md +419 -0
- package/agents/ttm-producer.md +53 -0
- package/bin/lib/campaign.cjs +553 -0
- package/bin/lib/commit.cjs +105 -0
- package/bin/lib/core.cjs +172 -0
- package/bin/lib/deviation.cjs +149 -0
- package/bin/lib/drift-log.cjs +219 -0
- package/bin/lib/health.cjs +438 -0
- package/bin/lib/slug.cjs +59 -0
- package/bin/lib/state.cjs +96 -0
- package/bin/ttm-tools.cjs +157 -0
- package/gates/base-gates.md +266 -0
- package/gates/discipline/.gitkeep +0 -0
- package/gates/gate-evaluation.md +341 -0
- package/gates/meta-gates.md +19 -0
- package/install.js +307 -0
- package/package.json +53 -0
- package/playbooks/.gitkeep +0 -0
- package/playbooks/aeo.md +223 -0
- package/playbooks/affiliate.md +272 -0
- package/playbooks/base.md +110 -0
- package/playbooks/email.md +306 -0
- package/playbooks/events.md +320 -0
- package/playbooks/linkedin.md +263 -0
- package/playbooks/paid-ads.md +318 -0
- package/playbooks/pr-media.md +296 -0
- package/playbooks/seo.md +284 -0
- package/playbooks/social.md +305 -0
- package/playbooks/youtube.md +325 -0
- package/references/context-loading.md +107 -0
- package/references/learnings-extraction.md +94 -0
- package/references/measurement-template.md +48 -0
- package/references/meta-gate-evaluation.md +169 -0
- package/references/positioning-check-report.md +197 -0
- package/references/review-checklist.md +78 -0
- package/references/ship-checklist-items.md +94 -0
- package/settings.json +4 -0
- package/skills/ttm-aeo-check/SKILL.md +20 -0
- package/skills/ttm-affiliate-kit/SKILL.md +19 -0
- package/skills/ttm-archive/SKILL.md +13 -0
- package/skills/ttm-brand-refresh/SKILL.md +19 -0
- package/skills/ttm-brief/SKILL.md +14 -0
- package/skills/ttm-competitor-scan/SKILL.md +19 -0
- package/skills/ttm-email-preflight/SKILL.md +19 -0
- package/skills/ttm-fix/SKILL.md +13 -0
- package/skills/ttm-health/SKILL.md +12 -0
- package/skills/ttm-icp-refresh/SKILL.md +19 -0
- package/skills/ttm-init/SKILL.md +12 -0
- package/skills/ttm-keyword-map/SKILL.md +19 -0
- package/skills/ttm-learn/SKILL.md +14 -0
- package/skills/ttm-measure/SKILL.md +14 -0
- package/skills/ttm-new-campaign/SKILL.md +13 -0
- package/skills/ttm-next/SKILL.md +12 -0
- package/skills/ttm-positioning-check/SKILL.md +19 -0
- package/skills/ttm-positioning-shift/SKILL.md +19 -0
- package/skills/ttm-produce/SKILL.md +14 -0
- package/skills/ttm-repurpose/SKILL.md +20 -0
- package/skills/ttm-research/SKILL.md +13 -0
- package/skills/ttm-resume/SKILL.md +13 -0
- package/skills/ttm-review/SKILL.md +13 -0
- package/skills/ttm-seo-audit/SKILL.md +20 -0
- package/skills/ttm-ship/SKILL.md +13 -0
- package/skills/ttm-state/SKILL.md +13 -0
- package/skills/ttm-verify/SKILL.md +14 -0
- package/templates/agents-md.md +65 -0
- package/templates/campaign-brief.md +74 -0
- package/templates/campaign-research.md +39 -0
- package/templates/campaign-state.md +40 -0
- package/templates/claude-md.md +65 -0
- package/templates/deviation-log.md +12 -0
- package/templates/drift-log.md +17 -0
- package/templates/fix-brief.md +59 -0
- package/templates/fix-log.md +22 -0
- package/templates/measurement-report.md +75 -0
- package/templates/migration-plan.md +24 -0
- package/templates/production-manifest.json +20 -0
- package/templates/reference-files/brand.md +45 -0
- package/templates/reference-files/calendar.md +30 -0
- package/templates/reference-files/channels.md +40 -0
- package/templates/reference-files/competitors.md +40 -0
- package/templates/reference-files/icp.md +50 -0
- package/templates/reference-files/learnings.md +40 -0
- package/templates/reference-files/metrics.md +42 -0
- package/templates/reference-files/positioning.md +38 -0
- package/templates/reference-files/state.md +27 -0
- package/templates/verification-report.md +59 -0
- package/workflows/discipline/.gitkeep +0 -0
- package/workflows/discipline/aeo-check.md +180 -0
- package/workflows/discipline/affiliate-kit.md +147 -0
- package/workflows/discipline/email-preflight.md +150 -0
- package/workflows/discipline/keyword-map.md +125 -0
- package/workflows/discipline/repurpose.md +329 -0
- package/workflows/discipline/seo-audit.md +169 -0
- package/workflows/lifecycle/.gitkeep +0 -0
- package/workflows/lifecycle/brief-positioning-check.md +90 -0
- package/workflows/lifecycle/brief.md +355 -0
- package/workflows/lifecycle/fix.md +495 -0
- package/workflows/lifecycle/learn.md +405 -0
- package/workflows/lifecycle/measure.md +379 -0
- package/workflows/lifecycle/produce.md +383 -0
- package/workflows/lifecycle/research.md +264 -0
- package/workflows/lifecycle/review.md +432 -0
- package/workflows/lifecycle/ship.md +521 -0
- package/workflows/lifecycle/verify.md +507 -0
- package/workflows/reference-mgmt/.gitkeep +0 -0
- package/workflows/reference-mgmt/brand-refresh.md +193 -0
- package/workflows/reference-mgmt/competitor-scan.md +228 -0
- package/workflows/reference-mgmt/icp-refresh.md +200 -0
- package/workflows/reference-mgmt/positioning-check.md +339 -0
- package/workflows/reference-mgmt/positioning-shift.md +368 -0
- package/workflows/setup/.gitkeep +0 -0
- package/workflows/setup/init-questions.md +225 -0
- package/workflows/setup/init-validation.md +155 -0
- package/workflows/setup/init.md +449 -0
- package/workflows/setup/new-campaign.md +134 -0
- package/workflows/utility/.gitkeep +0 -0
- package/workflows/utility/archive.md +334 -0
- package/workflows/utility/health.md +166 -0
- package/workflows/utility/next.md +187 -0
- package/workflows/utility/resume.md +249 -0
- package/workflows/utility/state.md +207 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
---
|
|
2
|
+
discipline: social
|
|
3
|
+
asset_types: [tweet, instagram-post, instagram-carousel, instagram-reel-caption, facebook-post, facebook-ad-copy]
|
|
4
|
+
version: "1.0"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Social Playbook
|
|
8
|
+
|
|
9
|
+
## Production Guidance
|
|
10
|
+
|
|
11
|
+
Social media is not one channel -- it is three distinct platforms with different algorithms, audiences, and content rules. This playbook covers X/Twitter, Instagram, and Facebook. Every post must be written for a specific platform, not adapted from a generic template. Copy-pasting the same content across platforms is an anti-pattern that violates native format rules on every platform.
|
|
12
|
+
|
|
13
|
+
### General Social Principles
|
|
14
|
+
|
|
15
|
+
- **Native format preference:** Each platform rewards native content (text, image, video created for that platform) over link posts. Link-only posts get suppressed across all three platforms.
|
|
16
|
+
- **Platform voice:** Adapt tone per platform while maintaining brand voice from BRAND.md. X is concise and direct. Instagram is visual-first with descriptive captions. Facebook allows longer narrative and community engagement.
|
|
17
|
+
- **One idea per post:** Social posts succeed by delivering one clear point, not summarizing multiple ideas. If the idea is complex, break it into a thread (X) or carousel (Instagram).
|
|
18
|
+
|
|
19
|
+
### X/Twitter Production Rules
|
|
20
|
+
|
|
21
|
+
- Maximum value in minimum words. Target under 200 characters for highest engagement even though the limit is 280.
|
|
22
|
+
- **No rhetorical questions.** The X algorithm deprioritizes posts with rhetorical questions (questions that do not expect an answer). Use statements, data points, or direct challenges instead. Questions that genuinely invite a response are acceptable.
|
|
23
|
+
- Thread-first for longer content: if the idea needs more than 280 characters, write as a thread with each tweet standalone-valuable. Number tweets in threads longer than 3 posts.
|
|
24
|
+
- URLs count as 23 characters regardless of actual length (X's t.co link wrapping).
|
|
25
|
+
- Hashtags: 1-3 maximum, integrated naturally or at end. More than 3 looks spammy on X.
|
|
26
|
+
|
|
27
|
+
### Instagram Production Rules
|
|
28
|
+
|
|
29
|
+
- **Visual-first:** The image or carousel IS the content. The caption supports and extends the visual, not the other way around. Do not write a caption that makes sense without seeing the image.
|
|
30
|
+
- **Carousel structure:** 1:1 (feed-optimized) or 4:5 (maximum vertical space) ratio. Maximum 10 slides. Cover slide must have a hook. Content slides should have one point each. Closing slide should have a CTA.
|
|
31
|
+
- **Caption structure:** Hook in first line (before "more" truncation at ~125 characters), value in body, CTA and hashtags at end.
|
|
32
|
+
- **Hashtags:** 5-15 relevant hashtags, placed at the end of caption or in the first comment. Mix of broad and niche tags.
|
|
33
|
+
- **Reel captions:** Under 150 characters for visibility -- reels have less caption real estate.
|
|
34
|
+
- If a CTA needs a link, reference "link in bio" -- Instagram does not allow clickable links in post captions.
|
|
35
|
+
|
|
36
|
+
### Facebook Production Rules
|
|
37
|
+
|
|
38
|
+
- **Text before media:** Facebook shows text above images/videos. Lead with the hook in the first sentence -- do not let an image speak for itself.
|
|
39
|
+
- **Longer narrative acceptable:** 100-500 words perform well on Facebook. The first 100 words are visible before the "See more" truncation.
|
|
40
|
+
- **Community engagement:** Ask questions, run polls, invite shares. Facebook's algorithm weights shares and meaningful comments over reactions.
|
|
41
|
+
- **Hashtags: minimal.** 0-2 hashtags maximum. Facebook hashtags have minimal discovery benefit and look out of place in the feed.
|
|
42
|
+
- **Video preference:** Native video (uploaded directly, not linked from YouTube) gets significantly more reach. Square (1:1) or vertical (4:5) formats preferred in feed.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Discipline Gates
|
|
47
|
+
|
|
48
|
+
### DISC-SOC-01: Platform Character Limits -- Tier 1
|
|
49
|
+
|
|
50
|
+
**Checks:** Content length against platform-specific maximums
|
|
51
|
+
**Against:** Platform specifications for the target platform
|
|
52
|
+
|
|
53
|
+
#### Evaluation Criteria
|
|
54
|
+
|
|
55
|
+
1. **X/Twitter limit**
|
|
56
|
+
- PASS: Post is under 280 characters with URLs counted as 23 characters each
|
|
57
|
+
- WARN: Post is 260-280 characters (functional but no room for retweet commentary or quote-tweet additions)
|
|
58
|
+
- FAIL: Post exceeds 280 characters (will not publish)
|
|
59
|
+
- N/A: Asset is not targeting X/Twitter
|
|
60
|
+
|
|
61
|
+
2. **Instagram caption limit**
|
|
62
|
+
- PASS: Caption is under 2,200 characters
|
|
63
|
+
- WARN: Caption is 2,000-2,200 characters (approaching limit, may need trimming)
|
|
64
|
+
- FAIL: Caption exceeds 2,200 characters (will be truncated by platform)
|
|
65
|
+
- N/A: Asset is not targeting Instagram
|
|
66
|
+
|
|
67
|
+
3. **Facebook limit**
|
|
68
|
+
- PASS: Post is under 1,500 characters with key message in first 100 words (visible before truncation)
|
|
69
|
+
- WARN: Post is 1,500-2,000 characters (long but functional; key message should be front-loaded)
|
|
70
|
+
- FAIL: Post exceeds 2,000 characters or key message is buried after the first 200 words
|
|
71
|
+
- N/A: Asset is not targeting Facebook
|
|
72
|
+
|
|
73
|
+
### DISC-SOC-02: Native Format Preference -- Tier 2
|
|
74
|
+
|
|
75
|
+
**Checks:** Content formatted for native platform consumption
|
|
76
|
+
**Against:** Platform best practices for native content
|
|
77
|
+
|
|
78
|
+
#### Evaluation Criteria
|
|
79
|
+
|
|
80
|
+
1. **Format appropriateness**
|
|
81
|
+
- PASS: Content uses native format -- X: text, image, or thread; Instagram: image, carousel, or reel; Facebook: text+image, native video, or poll
|
|
82
|
+
- WARN: Link-based post but with substantial native text that delivers value independently of the link
|
|
83
|
+
- FAIL: Link-only post with no native content -- just a URL or "Check this out: [link]" with no additional context
|
|
84
|
+
|
|
85
|
+
2. **Media format**
|
|
86
|
+
- PASS: Images or video in platform-preferred ratios (Instagram: 1:1 or 4:5; Facebook: 1.91:1 for link previews, 1:1 or 4:5 for native; X: 16:9 or 1:1)
|
|
87
|
+
- WARN: Media present but uses non-standard ratio (will display with cropping or letterboxing)
|
|
88
|
+
- FAIL: N/A -- media is optional on some platforms. Only FAIL if media is present but severely wrong format (e.g., portrait video in a landscape container, or image so distorted it hurts readability)
|
|
89
|
+
|
|
90
|
+
### DISC-SOC-03: Platform-Specific Rules -- Tier 1
|
|
91
|
+
|
|
92
|
+
**Checks:** Platform-specific content rules that affect reach and engagement
|
|
93
|
+
**Against:** Current platform algorithm guidelines
|
|
94
|
+
|
|
95
|
+
#### Evaluation Criteria
|
|
96
|
+
|
|
97
|
+
1. **X/Twitter rhetorical questions**
|
|
98
|
+
- PASS: No rhetorical questions -- post uses statements, data points, or direct challenges
|
|
99
|
+
- WARN: Question present but phrased as a genuine request for response (e.g., "What tool do you use for email automation?" -- expects real answers)
|
|
100
|
+
- FAIL: Rhetorical question that does not expect an answer (e.g., "Don't you hate when...?", "Who else thinks...?", "Isn't it crazy that...?")
|
|
101
|
+
- N/A: Asset is not targeting X/Twitter
|
|
102
|
+
|
|
103
|
+
2. **Instagram carousel structure**
|
|
104
|
+
- PASS: Carousel has a cover slide with a hook, content slides with one key point each, and a closing CTA slide
|
|
105
|
+
- WARN: Carousel present but missing clear structure (e.g., no cover hook, or CTA buried mid-carousel)
|
|
106
|
+
- FAIL: Carousel with walls of text per slide, or slides with no narrative flow (random order would not change meaning)
|
|
107
|
+
- N/A: Asset is not an Instagram carousel
|
|
108
|
+
|
|
109
|
+
3. **Facebook text-before-media**
|
|
110
|
+
- PASS: Text appears above any image or video with a hook in the first sentence
|
|
111
|
+
- WARN: Text present but hook is weak or buried after generic opening
|
|
112
|
+
- FAIL: Image or video posted with no text or minimal text (under 20 characters)
|
|
113
|
+
- N/A: Asset is not targeting Facebook
|
|
114
|
+
|
|
115
|
+
### DISC-SOC-04: Hashtag and Mention Hygiene -- Tier 2
|
|
116
|
+
|
|
117
|
+
**Checks:** Platform-appropriate hashtag and mention usage
|
|
118
|
+
**Against:** Platform-specific engagement data and best practices
|
|
119
|
+
|
|
120
|
+
#### Evaluation Criteria
|
|
121
|
+
|
|
122
|
+
1. **Hashtag count**
|
|
123
|
+
- PASS: X/Twitter 1-3 hashtags; Instagram 5-15 hashtags; Facebook 0-2 hashtags
|
|
124
|
+
- WARN: Slightly above or below optimal range per platform (e.g., X with 4 hashtags, Instagram with 3-4 or 16-20, Facebook with 3)
|
|
125
|
+
- FAIL: X 5+ hashtags; Instagram 25+ hashtags; Facebook 5+ hashtags
|
|
126
|
+
- N/A: Platform does not benefit from hashtags or post intentionally omits them with documented reason
|
|
127
|
+
|
|
128
|
+
2. **Mention accounting**
|
|
129
|
+
- PASS: Mentions are relevant to the content, and character count including mentions stays within platform limits
|
|
130
|
+
- WARN: Mentions present and character limit is tight -- removing a mention would improve readability
|
|
131
|
+
- FAIL: Mentions push content over the platform character limit, or mentions are irrelevant tag-spam
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Base Gate Overrides
|
|
136
|
+
|
|
137
|
+
None -- all base gates keep default tiers.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Format Rules
|
|
142
|
+
|
|
143
|
+
Platform-specific formatting enforced during production:
|
|
144
|
+
|
|
145
|
+
### X/Twitter
|
|
146
|
+
|
|
147
|
+
- **Character limit:** 280 (URLs count as 23 characters regardless of actual length)
|
|
148
|
+
- **Hashtags:** 1-3, integrated naturally in text or placed at end
|
|
149
|
+
- **Thread posts:** Each tweet standalone-valuable, numbered if thread exceeds 3 tweets
|
|
150
|
+
- **Media:** 16:9 or 1:1 images, 4 images maximum per tweet
|
|
151
|
+
- **No rhetorical questions:** Use statements or genuine questions only
|
|
152
|
+
- **Quote tweets:** Under 200 characters to leave room for the quoted content
|
|
153
|
+
|
|
154
|
+
### Instagram
|
|
155
|
+
|
|
156
|
+
- **Caption limit:** 2,200 characters
|
|
157
|
+
- **Carousel:** 1:1 or 4:5 ratio, maximum 10 slides, cover slide with hook, closing slide with CTA
|
|
158
|
+
- **Hashtags:** 5-15, placed at end of caption or in first comment
|
|
159
|
+
- **Bio link reference:** If CTA needs a link, reference "link in bio" -- no clickable links in captions
|
|
160
|
+
- **Reel caption:** Under 150 characters for visibility
|
|
161
|
+
- **Image minimum resolution:** 1080x1080 (1:1) or 1080x1350 (4:5)
|
|
162
|
+
|
|
163
|
+
### Facebook
|
|
164
|
+
|
|
165
|
+
- **Post limit:** Practical limit 1,500 characters (first 100 words visible before "See more" truncation)
|
|
166
|
+
- **Link preview:** 1.91:1 image ratio for link card previews
|
|
167
|
+
- **Hashtags:** 0-2 maximum (Facebook hashtags have minimal discovery benefit)
|
|
168
|
+
- **Video:** Square (1:1) or vertical (4:5) preferred in feed; native upload only (no YouTube links)
|
|
169
|
+
- **Text before media:** Always include text above images or videos
|
|
170
|
+
- **Polls:** Use native poll feature for engagement; keep options to 2-4 choices
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Examples
|
|
175
|
+
|
|
176
|
+
### Good: Native X/Twitter Thread
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
Tweet 1 (178 chars):
|
|
180
|
+
We analyzed 2,000 B2B tweets from last quarter.
|
|
181
|
+
|
|
182
|
+
The ones that got 10x more engagement had one thing in common:
|
|
183
|
+
|
|
184
|
+
They made a claim in the first sentence. Not a question.
|
|
185
|
+
|
|
186
|
+
Thread:
|
|
187
|
+
|
|
188
|
+
Tweet 2:
|
|
189
|
+
Here's the data:
|
|
190
|
+
|
|
191
|
+
- Claim-first tweets: 4.2% engagement rate
|
|
192
|
+
- Question-first tweets: 0.8% engagement rate
|
|
193
|
+
- Link-first tweets: 0.3% engagement rate
|
|
194
|
+
|
|
195
|
+
The algorithm rewards conviction.
|
|
196
|
+
|
|
197
|
+
Tweet 3:
|
|
198
|
+
The best-performing claim format:
|
|
199
|
+
|
|
200
|
+
"[Specific number] + [counterintuitive insight]"
|
|
201
|
+
|
|
202
|
+
Example: "83% of B2B buyers make their decision before talking to sales."
|
|
203
|
+
|
|
204
|
+
Not: "Did you know most buyers decide early?"
|
|
205
|
+
|
|
206
|
+
#B2B #ContentStrategy
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Why it works:** Opens with data (not a question), each tweet stands alone, no external links, 2 hashtags on final tweet only, rhetorical-question-free.
|
|
210
|
+
|
|
211
|
+
### Good: Instagram Carousel with Structure
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
[Slide 1 - Cover/Hook]: "The 5-metric dashboard that replaced our 47-metric report"
|
|
215
|
+
[Slide 2]: Metric 1 -- Revenue per campaign (not total revenue)
|
|
216
|
+
[Slide 3]: Metric 2 -- CAC by channel (not blended CAC)
|
|
217
|
+
[Slide 4]: Metric 3 -- Pipeline velocity (not pipeline value)
|
|
218
|
+
[Slide 5]: Metric 4 -- Content-to-conversion ratio
|
|
219
|
+
[Slide 6]: Metric 5 -- Customer expansion rate
|
|
220
|
+
[Slide 7 - CTA]: "Save this for your next dashboard review. Follow @brand for more."
|
|
221
|
+
|
|
222
|
+
Caption (412 chars):
|
|
223
|
+
We deleted 42 metrics from our marketing dashboard last month.
|
|
224
|
+
|
|
225
|
+
Not because they weren't important.
|
|
226
|
+
Because they weren't actionable.
|
|
227
|
+
|
|
228
|
+
Here are the 5 metrics we kept -- and why each one drives a specific decision.
|
|
229
|
+
|
|
230
|
+
Swipe through to see the full breakdown.
|
|
231
|
+
|
|
232
|
+
Which metric would you add to this list? Drop it in the comments.
|
|
233
|
+
|
|
234
|
+
#MarketingMetrics #B2BMarketing #DataDriven #MarketingDashboard #GrowthMarketing
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**Why it works:** Cover slide has hook, one point per slide, CTA on final slide, caption has hook before truncation, 5 hashtags, engagement question.
|
|
238
|
+
|
|
239
|
+
### Bad: Rhetorical Question on X/Twitter
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
Don't you just HATE it when your marketing metrics don't make sense?
|
|
243
|
+
|
|
244
|
+
We've all been there. Check out our new guide to fix it: https://example.com/guide
|
|
245
|
+
|
|
246
|
+
#Marketing #Metrics #Guide #Data #Analytics #B2B #Growth #Strategy
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Why it fails:** DISC-SOC-03 FAIL (rhetorical question "Don't you just HATE..."), DISC-SOC-02 WARN (link-based post), DISC-SOC-04 FAIL (8 hashtags on X).
|
|
250
|
+
|
|
251
|
+
### Bad: Link-Only Facebook Post
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
https://example.com/blog/new-post
|
|
255
|
+
|
|
256
|
+
[Auto-generated link preview with generic image]
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**Why it fails:** DISC-SOC-02 FAIL (link-only, no native content), DISC-SOC-03 FAIL (no text before media/link).
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Anti-Patterns
|
|
264
|
+
|
|
265
|
+
1. **Rhetorical questions on X/Twitter:** The algorithm deprioritizes posts with questions that do not expect genuine answers. "Who else thinks...?" and "Don't you hate when...?" get lower distribution than direct statements or genuine questions.
|
|
266
|
+
|
|
267
|
+
2. **Link-only posts across all platforms:** Posting a bare URL with no native content gets suppressed on every major platform. Always provide standalone value in the post text itself.
|
|
268
|
+
|
|
269
|
+
3. **Same content copy-pasted across platforms:** Each platform has different character limits, audience expectations, hashtag norms, and content formats. A tweet is not a Facebook post is not an Instagram caption. Write platform-native content for each.
|
|
270
|
+
|
|
271
|
+
4. **Excessive hashtags:** 25+ hashtags on Instagram looks spammy, 5+ on X is excessive, and any hashtags on Facebook have minimal value. Stay within platform-optimal ranges.
|
|
272
|
+
|
|
273
|
+
5. **Instagram carousel with walls of text:** Each carousel slide should have one key point, not a paragraph. If you need more text, use the caption. Slides are visual -- treat them like presentation slides, not blog pages.
|
|
274
|
+
|
|
275
|
+
6. **Facebook posts with no text before media:** Posting an image or video with no text (or just an emoji) wastes the text space that Facebook displays prominently above media. Always lead with a text hook.
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Metrics
|
|
280
|
+
|
|
281
|
+
What to measure post-ship per platform:
|
|
282
|
+
|
|
283
|
+
### X/Twitter
|
|
284
|
+
- **Impressions:** How many times the tweet appeared in feeds
|
|
285
|
+
- **Engagements:** Likes, retweets, quote tweets, replies combined
|
|
286
|
+
- **Repost rate:** Retweets + quote tweets / impressions -- indicates content worth sharing
|
|
287
|
+
- **Link clicks:** If link in reply strategy used, track clicks via UTM parameters
|
|
288
|
+
|
|
289
|
+
### Instagram
|
|
290
|
+
- **Reach:** Unique accounts that saw the post (more meaningful than impressions for Instagram)
|
|
291
|
+
- **Saves:** The strongest content quality signal on Instagram -- saved posts indicate reference-worthy content
|
|
292
|
+
- **Carousel completion rate:** What percentage of viewers reached the last slide? Below 40% suggests weak slide structure
|
|
293
|
+
- **Profile visits:** Did the post drive curiosity about the brand? Track within 48 hours of posting
|
|
294
|
+
|
|
295
|
+
### Facebook
|
|
296
|
+
- **Reach:** Organic reach per post (Facebook's most throttled metric -- track trends, not absolutes)
|
|
297
|
+
- **Engagement rate:** (Reactions + comments + shares) / reach
|
|
298
|
+
- **Shares:** The highest-value engagement on Facebook -- shares drive exponential reach
|
|
299
|
+
- **Link clicks:** If post includes a link, track CTR via UTM parameters
|
|
300
|
+
|
|
301
|
+
### Cross-Platform
|
|
302
|
+
- **Sentiment:** Are replies positive, negative, or neutral? Track qualitative patterns across platforms
|
|
303
|
+
- **Reply quality:** Meaningful replies (2+ sentences, on-topic) vs. emoji-only reactions
|
|
304
|
+
- **Follower growth rate:** Net new followers within 48 hours of posting, per platform
|
|
305
|
+
- **Content-to-platform fit score:** Which platforms generate the highest engagement for which content types? Track to optimize channel allocation
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
---
|
|
2
|
+
discipline: youtube
|
|
3
|
+
asset_types: [video-script, thumbnail-brief, description, community-post]
|
|
4
|
+
version: "1.0"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# YouTube Discipline Playbook
|
|
8
|
+
|
|
9
|
+
This playbook extends the base playbook contract (`base.md`) with YouTube-specific production guidance, discipline gates, and format rules. It is loaded by ttm-producer during content generation and parsed by ttm-verify for gate evaluation.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Production Guidance
|
|
14
|
+
|
|
15
|
+
### Hook in the First 5 Seconds
|
|
16
|
+
|
|
17
|
+
The first 5 seconds determine whether a viewer stays or clicks away. Every video script must open with one of these hook patterns:
|
|
18
|
+
|
|
19
|
+
- **Problem statement:** Name a specific pain point the viewer recognizes ("You're losing 40% of your viewers in the first 10 seconds")
|
|
20
|
+
- **Bold claim:** Make a concrete, falsifiable promise ("This one change doubled our conversion rate")
|
|
21
|
+
- **Curiosity gap:** Tease a result without revealing the method ("Most creators get this completely wrong")
|
|
22
|
+
- **Pattern interrupt:** Open with something unexpected -- a visual, a question, or a contrarian take
|
|
23
|
+
|
|
24
|
+
Never open with a greeting ("Hey guys, welcome back"), a channel introduction, or a sponsor read before the hook. The hook comes first, always.
|
|
25
|
+
|
|
26
|
+
### Title + Thumbnail Click-Fit
|
|
27
|
+
|
|
28
|
+
Title and thumbnail are a single unit -- they must work as a complementary pair:
|
|
29
|
+
|
|
30
|
+
- **Title promises:** The title makes a specific, curiosity-driven promise. It tells the viewer WHAT they will learn or get.
|
|
31
|
+
- **Thumbnail amplifies visually:** The thumbnail shows the RESULT, EMOTION, or CONTRAST that makes the promise tangible. It does NOT repeat the title text.
|
|
32
|
+
- **Complementary, not redundant:** If the title says "I Tested 100 Hooks," the thumbnail shows the data chart or a shocked face -- not the words "100 Hooks."
|
|
33
|
+
|
|
34
|
+
Effective pairs create a "curiosity loop" -- the viewer needs to click to close the gap between what the title promises and what the thumbnail shows.
|
|
35
|
+
|
|
36
|
+
### Description SEO
|
|
37
|
+
|
|
38
|
+
YouTube descriptions are searchable. Optimize them:
|
|
39
|
+
|
|
40
|
+
- Place the target keyword in the first 2 lines (first 150 characters visible before "Show more")
|
|
41
|
+
- Include timestamps for videos over 10 minutes (YouTube uses these for chapters and key moments in search)
|
|
42
|
+
- Add 2-3 relevant links (related videos, resources mentioned, landing pages)
|
|
43
|
+
- Include 3-5 hashtags at the end (YouTube displays the first 3 above the title)
|
|
44
|
+
- Write 200+ words total -- longer descriptions improve discoverability
|
|
45
|
+
|
|
46
|
+
### End-Screen CTA Placement
|
|
47
|
+
|
|
48
|
+
Every video script must include an end-screen section in the final 20 seconds:
|
|
49
|
+
|
|
50
|
+
- Verbal CTA: Tell the viewer exactly what to do next ("Watch this video next" or "Subscribe if you want weekly breakdowns")
|
|
51
|
+
- Visual placement notes: Specify where end-screen elements appear (avoid covering important visuals)
|
|
52
|
+
- Link the CTA to a specific next video or playlist, not just "subscribe"
|
|
53
|
+
|
|
54
|
+
### Retention Curve Awareness
|
|
55
|
+
|
|
56
|
+
YouTube rewards watch time. Structure scripts to front-load value:
|
|
57
|
+
|
|
58
|
+
- Deliver the key value proposition within the first 30% of the script
|
|
59
|
+
- Use pattern interrupts every 2-3 minutes (change visual, ask a question, introduce a new sub-topic)
|
|
60
|
+
- Avoid extended tangents that pull away from the promised topic
|
|
61
|
+
- Use "open loops" -- tease upcoming sections to keep viewers watching ("In a moment I'll show you the exact template, but first...")
|
|
62
|
+
- Place the most valuable or surprising insight early, not as a "big reveal" at the end
|
|
63
|
+
|
|
64
|
+
### Community Post Strategy
|
|
65
|
+
|
|
66
|
+
Community posts maintain engagement between uploads:
|
|
67
|
+
|
|
68
|
+
- **Poll posts:** Ask binary or multiple-choice questions related to upcoming content
|
|
69
|
+
- **Text posts:** Share behind-the-scenes insights or early data from recent videos
|
|
70
|
+
- **Image posts:** Share screenshots, charts, or visual teasers for upcoming content
|
|
71
|
+
- Post 2-3 times per week between uploads to maintain algorithmic presence
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Discipline Gates
|
|
76
|
+
|
|
77
|
+
### DISC-YOUTUBE-01: Hook Strength -- Tier 1
|
|
78
|
+
|
|
79
|
+
**Checks:** First 5 seconds of video script contain a specific promise, question, or pattern interrupt
|
|
80
|
+
**Against:** Video script opening section
|
|
81
|
+
|
|
82
|
+
#### Evaluation Criteria
|
|
83
|
+
|
|
84
|
+
1. **Hook presence and quality**
|
|
85
|
+
- PASS: Script opens with a concrete hook (problem statement, bold claim, or curiosity gap) within the first 3 sentences. The hook is audience-focused and specific.
|
|
86
|
+
- WARN: Script has an opening but it is generic or brand-focused rather than audience-focused (e.g., "Today we're going to talk about...")
|
|
87
|
+
- FAIL: Script opens with an introduction, greeting, or sponsor mention before the hook
|
|
88
|
+
|
|
89
|
+
2. **Hook specificity**
|
|
90
|
+
- PASS: Hook contains a specific number, result, or named concept ("3 mistakes," "doubled our revenue," "the LinkedIn algorithm change")
|
|
91
|
+
- WARN: Hook references a general topic without a specific angle ("Let's talk about marketing")
|
|
92
|
+
- FAIL: No identifiable hook in the first 5 lines of the script
|
|
93
|
+
|
|
94
|
+
### DISC-YOUTUBE-02: Title-Thumbnail Click-Fit -- Tier 1
|
|
95
|
+
|
|
96
|
+
**Checks:** Title and thumbnail brief work as a complementary pair (title promises, thumbnail visualizes)
|
|
97
|
+
**Against:** Video title and thumbnail brief in the asset
|
|
98
|
+
|
|
99
|
+
#### Evaluation Criteria
|
|
100
|
+
|
|
101
|
+
1. **Complementary messaging**
|
|
102
|
+
- PASS: Title contains a specific promise or curiosity gap AND thumbnail brief describes a contrasting visual element that amplifies (not duplicates) the title
|
|
103
|
+
- WARN: Title and thumbnail overlap in message (both say the same thing in words and visuals)
|
|
104
|
+
- FAIL: Title is generic or clickbait with no matching thumbnail concept, OR thumbnail brief is missing
|
|
105
|
+
|
|
106
|
+
2. **Curiosity loop**
|
|
107
|
+
- PASS: Together, title and thumbnail create an information gap that requires clicking to resolve
|
|
108
|
+
- WARN: Title and thumbnail are on-topic but do not create tension or curiosity
|
|
109
|
+
- FAIL: Title and thumbnail are unrelated or contradictory
|
|
110
|
+
|
|
111
|
+
### DISC-YOUTUBE-03: Description SEO -- Tier 2
|
|
112
|
+
|
|
113
|
+
**Checks:** Description includes target keyword in first 2 lines, timestamps, and relevant links
|
|
114
|
+
**Against:** Video description content
|
|
115
|
+
|
|
116
|
+
#### Evaluation Criteria
|
|
117
|
+
|
|
118
|
+
1. **Keyword placement**
|
|
119
|
+
- PASS: Target keyword appears in the first 150 characters of the description
|
|
120
|
+
- WARN: Keyword present in the description but not in the first 150 characters
|
|
121
|
+
- FAIL: No target keyword in the description, or description is under 100 characters
|
|
122
|
+
|
|
123
|
+
2. **Structural completeness**
|
|
124
|
+
- PASS: Timestamps present for videos 10+ minutes, at least 2 links included, 3+ hashtags at the end
|
|
125
|
+
- WARN: Timestamps missing for long-form content, OR fewer than 2 links
|
|
126
|
+
- FAIL: No timestamps, no links, and no hashtags -- description is just a single sentence
|
|
127
|
+
|
|
128
|
+
### DISC-YOUTUBE-04: Retention Structure -- Tier 2
|
|
129
|
+
|
|
130
|
+
**Checks:** Script front-loads value and avoids retention killers
|
|
131
|
+
**Against:** Video script structure and pacing
|
|
132
|
+
|
|
133
|
+
#### Evaluation Criteria
|
|
134
|
+
|
|
135
|
+
1. **Value delivery timing**
|
|
136
|
+
- PASS: Key value proposition delivered within the first 30% of the script, with pattern interrupts every 2-3 minutes
|
|
137
|
+
- WARN: Value delivered but after a long preamble (more than 20% of script before any substantive content)
|
|
138
|
+
- FAIL: Script buries the main point past the halfway mark or has no structural variety
|
|
139
|
+
|
|
140
|
+
2. **Retention techniques**
|
|
141
|
+
- PASS: Script uses open loops, sub-topic transitions, or visual change notes to maintain engagement throughout
|
|
142
|
+
- WARN: Script is linear with no pacing variation but content is solid
|
|
143
|
+
- FAIL: Script is a single unbroken monologue with no engagement hooks after the opening
|
|
144
|
+
|
|
145
|
+
### DISC-YOUTUBE-05: End-Screen CTA -- Tier 2
|
|
146
|
+
|
|
147
|
+
**Checks:** Script includes a clear end-screen call-to-action
|
|
148
|
+
**Against:** Final section of the video script
|
|
149
|
+
|
|
150
|
+
#### Evaluation Criteria
|
|
151
|
+
|
|
152
|
+
1. **CTA presence and specificity**
|
|
153
|
+
- PASS: Final section includes a specific CTA (subscribe, watch next video, click link) with verbal direction and visual placement notes for end-screen elements
|
|
154
|
+
- WARN: CTA exists but is generic ("like and subscribe") with no specific next action or visual placement
|
|
155
|
+
- FAIL: No end-screen CTA in the script
|
|
156
|
+
|
|
157
|
+
### DISC-YOUTUBE-06: Thumbnail Contrast -- Tier 2
|
|
158
|
+
|
|
159
|
+
**Checks:** Thumbnail brief specifies high-contrast, low-clutter visual design
|
|
160
|
+
**Against:** Thumbnail brief content
|
|
161
|
+
|
|
162
|
+
#### Evaluation Criteria
|
|
163
|
+
|
|
164
|
+
1. **Visual clarity**
|
|
165
|
+
- PASS: Thumbnail brief specifies max 3 elements, contrasting colors, readable text at mobile size, and face/emotion if applicable
|
|
166
|
+
- WARN: Thumbnail brief exists but includes more than 3 text elements or lacks contrast specification
|
|
167
|
+
- FAIL: No thumbnail brief provided, or brief describes a busy/cluttered design with 5+ elements
|
|
168
|
+
|
|
169
|
+
2. **Mobile readability**
|
|
170
|
+
- PASS: Any text in the thumbnail is specified as large, bold, and limited to 3-4 words maximum
|
|
171
|
+
- WARN: Text is included but no size or readability specification
|
|
172
|
+
- FAIL: Thumbnail relies on small text or detailed graphics that would be illegible at mobile thumbnail size
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Base Gate Overrides
|
|
177
|
+
|
|
178
|
+
| Base Gate ID | Default Tier | Override Tier | Reason |
|
|
179
|
+
|-------------|-------------|---------------|--------|
|
|
180
|
+
| GATE-10 (Format Correctness) | Tier 2 | Tier 1 | Video scripts have strict format requirements (timestamps, shot notes, scene markers) that directly affect production workflow and cannot be fixed post-recording |
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Format Rules
|
|
185
|
+
|
|
186
|
+
### Video Script Format
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
[HOOK - 0:00-0:05]
|
|
190
|
+
{Opening hook -- problem, claim, or curiosity gap}
|
|
191
|
+
|
|
192
|
+
[INTRO - 0:05-0:30]
|
|
193
|
+
{Brief context setting -- who this is for, what they will learn}
|
|
194
|
+
|
|
195
|
+
[SECTION 1 - 0:30-3:00]
|
|
196
|
+
{Main content section}
|
|
197
|
+
[B-ROLL: {description of supporting visual}]
|
|
198
|
+
[LOWER THIRD: {text overlay content}]
|
|
199
|
+
|
|
200
|
+
[PATTERN INTERRUPT - 3:00]
|
|
201
|
+
{Re-engagement moment -- question, visual change, new angle}
|
|
202
|
+
|
|
203
|
+
[SECTION 2 - 3:00-6:00]
|
|
204
|
+
{Continued content}
|
|
205
|
+
|
|
206
|
+
[END SCREEN - final 20 seconds]
|
|
207
|
+
{Verbal CTA + visual placement notes}
|
|
208
|
+
[END CARD: {specific video/playlist to link}]
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Thumbnail Brief Format
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
Elements (max 3):
|
|
215
|
+
1. {Primary element -- face, object, or result}
|
|
216
|
+
2. {Text overlay -- 3-4 words max, bold}
|
|
217
|
+
3. {Background/contrast element}
|
|
218
|
+
|
|
219
|
+
Colors: {Primary contrast pair, e.g., "Yellow text on dark blue background"}
|
|
220
|
+
Emotion: {If face is included -- shocked, excited, skeptical, etc.}
|
|
221
|
+
Mobile test: {Confirm readability at 168x94px}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Description Template
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
{Target keyword in the first line -- what this video covers}
|
|
228
|
+
{Second line -- specific promise or key takeaway}
|
|
229
|
+
|
|
230
|
+
{Timestamps / Chapters}
|
|
231
|
+
0:00 - {Hook}
|
|
232
|
+
0:30 - {Section 1 title}
|
|
233
|
+
3:00 - {Section 2 title}
|
|
234
|
+
...
|
|
235
|
+
|
|
236
|
+
{Resources / Links}
|
|
237
|
+
- {Resource 1}: {URL}
|
|
238
|
+
- {Resource 2}: {URL}
|
|
239
|
+
|
|
240
|
+
{About section -- 2-3 sentences about the channel}
|
|
241
|
+
|
|
242
|
+
#hashtag1 #hashtag2 #hashtag3
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Community Post Format
|
|
246
|
+
|
|
247
|
+
- **Poll:** Question (under 65 characters) + 2-4 options (under 25 characters each)
|
|
248
|
+
- **Text:** 1-3 paragraphs, conversational tone, end with a question to drive comments
|
|
249
|
+
- **Image:** High-contrast image with minimal text, paired with 1-2 sentence caption
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Examples
|
|
254
|
+
|
|
255
|
+
### Good: Strong Hook + Complementary Title-Thumbnail
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
Title: "I Analyzed 1,000 YouTube Thumbnails -- Here's What Actually Works"
|
|
259
|
+
|
|
260
|
+
Thumbnail brief:
|
|
261
|
+
- Element 1: Creator's face with surprised expression
|
|
262
|
+
- Element 2: Bold text "1,000 THUMBNAILS" in yellow
|
|
263
|
+
- Element 3: Dark background with faded grid of thumbnail images
|
|
264
|
+
- Colors: Yellow text on dark charcoal
|
|
265
|
+
- Mobile test: Face and text readable at 168x94px
|
|
266
|
+
|
|
267
|
+
Script opening:
|
|
268
|
+
"The average YouTube thumbnail gets mass-ignored. Out of 1,000 thumbnails
|
|
269
|
+
I analyzed across 50 channels, only 12% followed the pattern that
|
|
270
|
+
correlates with above-average CTR. Here's what they all had in common."
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
Why it works: Title promises data-driven insight. Thumbnail shows the scale (face + "1,000") without repeating the title. Hook delivers a specific stat immediately.
|
|
274
|
+
|
|
275
|
+
### Bad: Weak Hook + Redundant Title-Thumbnail
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
Title: "YouTube Thumbnail Tips"
|
|
279
|
+
|
|
280
|
+
Thumbnail brief:
|
|
281
|
+
- Element 1: Text "Thumbnail Tips"
|
|
282
|
+
- Element 2: Stock photo of a computer screen
|
|
283
|
+
- Element 3: Channel logo
|
|
284
|
+
- Element 4: Subscribe button graphic
|
|
285
|
+
- Element 5: Arrow pointing at screen
|
|
286
|
+
|
|
287
|
+
Script opening:
|
|
288
|
+
"Hey guys, welcome back to the channel! Today we're going to be talking
|
|
289
|
+
about thumbnails. Before we get into it, a quick word from our sponsor..."
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Why it fails: Title is generic (no promise, no number, no curiosity). Thumbnail repeats the title text and has 5 elements (cluttered). Script opens with greeting + sponsor before any hook.
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Anti-Patterns
|
|
297
|
+
|
|
298
|
+
1. **Opening with "Hey guys"** -- Greetings before the hook lose viewers in the first 3 seconds. YouTube's retention graph shows the steepest drop in the first 5 seconds. The hook must come first.
|
|
299
|
+
|
|
300
|
+
2. **Burying the hook after a sponsor read** -- Sponsor integrations in the first 30 seconds kill retention. Place sponsor reads after the hook and initial value delivery (typically 2-4 minutes in).
|
|
301
|
+
|
|
302
|
+
3. **Thumbnail text duplicating the title** -- If the thumbnail says the same words as the title, you have wasted one of your two click-driving elements. The thumbnail should SHOW what the title TELLS.
|
|
303
|
+
|
|
304
|
+
4. **Description with no keywords or links** -- A one-sentence description like "New video!" wastes SEO opportunity. YouTube indexes description text for search -- treat it as a mini blog post.
|
|
305
|
+
|
|
306
|
+
5. **Scripts without retention markers** -- A script that reads as a continuous essay without scene breaks, B-roll notes, or pattern interrupts will produce a monotonous video. Mark structural variety explicitly.
|
|
307
|
+
|
|
308
|
+
6. **Generic end-screen CTA** -- "Like and subscribe" is background noise. Specific CTAs ("Watch this video next where I show the exact template") drive measurable end-screen click rates.
|
|
309
|
+
|
|
310
|
+
7. **Cluttered thumbnails** -- More than 3 visual elements compete for attention at mobile size. Thumbnails must be readable at 168x94 pixels -- the size they appear in mobile feeds.
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## Metrics
|
|
315
|
+
|
|
316
|
+
Track these indicators for YouTube content after shipping:
|
|
317
|
+
|
|
318
|
+
- **Views** -- Total views over 7/30/90 day windows. Compare against channel average.
|
|
319
|
+
- **Watch time (hours)** -- Total accumulated watch time. YouTube's primary ranking signal.
|
|
320
|
+
- **Average view duration** -- Mean watch time per view. Indicates content quality and retention. Target: above 50% of video length.
|
|
321
|
+
- **Click-through rate (CTR)** -- Impressions to views ratio from YouTube Studio. Measures title + thumbnail effectiveness. Channel benchmark: 4-10%.
|
|
322
|
+
- **Subscriber conversion** -- New subscribers attributed to the video. Measures audience growth impact.
|
|
323
|
+
- **End-screen click rate** -- Percentage of viewers who click end-screen elements. Measures CTA effectiveness.
|
|
324
|
+
- **Comments and engagement rate** -- Comments, likes, shares as a percentage of views. Measures community engagement.
|
|
325
|
+
- **Traffic sources** -- Breakdown of Browse, Search, Suggested, External. Indicates discovery path.
|