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.
Files changed (123) hide show
  1. package/.claude-plugin/plugin.json +10 -0
  2. package/LICENSE +21 -0
  3. package/README.md +419 -0
  4. package/agents/ttm-producer.md +53 -0
  5. package/bin/lib/campaign.cjs +553 -0
  6. package/bin/lib/commit.cjs +105 -0
  7. package/bin/lib/core.cjs +172 -0
  8. package/bin/lib/deviation.cjs +149 -0
  9. package/bin/lib/drift-log.cjs +219 -0
  10. package/bin/lib/health.cjs +438 -0
  11. package/bin/lib/slug.cjs +59 -0
  12. package/bin/lib/state.cjs +96 -0
  13. package/bin/ttm-tools.cjs +157 -0
  14. package/gates/base-gates.md +266 -0
  15. package/gates/discipline/.gitkeep +0 -0
  16. package/gates/gate-evaluation.md +341 -0
  17. package/gates/meta-gates.md +19 -0
  18. package/install.js +307 -0
  19. package/package.json +53 -0
  20. package/playbooks/.gitkeep +0 -0
  21. package/playbooks/aeo.md +223 -0
  22. package/playbooks/affiliate.md +272 -0
  23. package/playbooks/base.md +110 -0
  24. package/playbooks/email.md +306 -0
  25. package/playbooks/events.md +320 -0
  26. package/playbooks/linkedin.md +263 -0
  27. package/playbooks/paid-ads.md +318 -0
  28. package/playbooks/pr-media.md +296 -0
  29. package/playbooks/seo.md +284 -0
  30. package/playbooks/social.md +305 -0
  31. package/playbooks/youtube.md +325 -0
  32. package/references/context-loading.md +107 -0
  33. package/references/learnings-extraction.md +94 -0
  34. package/references/measurement-template.md +48 -0
  35. package/references/meta-gate-evaluation.md +169 -0
  36. package/references/positioning-check-report.md +197 -0
  37. package/references/review-checklist.md +78 -0
  38. package/references/ship-checklist-items.md +94 -0
  39. package/settings.json +4 -0
  40. package/skills/ttm-aeo-check/SKILL.md +20 -0
  41. package/skills/ttm-affiliate-kit/SKILL.md +19 -0
  42. package/skills/ttm-archive/SKILL.md +13 -0
  43. package/skills/ttm-brand-refresh/SKILL.md +19 -0
  44. package/skills/ttm-brief/SKILL.md +14 -0
  45. package/skills/ttm-competitor-scan/SKILL.md +19 -0
  46. package/skills/ttm-email-preflight/SKILL.md +19 -0
  47. package/skills/ttm-fix/SKILL.md +13 -0
  48. package/skills/ttm-health/SKILL.md +12 -0
  49. package/skills/ttm-icp-refresh/SKILL.md +19 -0
  50. package/skills/ttm-init/SKILL.md +12 -0
  51. package/skills/ttm-keyword-map/SKILL.md +19 -0
  52. package/skills/ttm-learn/SKILL.md +14 -0
  53. package/skills/ttm-measure/SKILL.md +14 -0
  54. package/skills/ttm-new-campaign/SKILL.md +13 -0
  55. package/skills/ttm-next/SKILL.md +12 -0
  56. package/skills/ttm-positioning-check/SKILL.md +19 -0
  57. package/skills/ttm-positioning-shift/SKILL.md +19 -0
  58. package/skills/ttm-produce/SKILL.md +14 -0
  59. package/skills/ttm-repurpose/SKILL.md +20 -0
  60. package/skills/ttm-research/SKILL.md +13 -0
  61. package/skills/ttm-resume/SKILL.md +13 -0
  62. package/skills/ttm-review/SKILL.md +13 -0
  63. package/skills/ttm-seo-audit/SKILL.md +20 -0
  64. package/skills/ttm-ship/SKILL.md +13 -0
  65. package/skills/ttm-state/SKILL.md +13 -0
  66. package/skills/ttm-verify/SKILL.md +14 -0
  67. package/templates/agents-md.md +65 -0
  68. package/templates/campaign-brief.md +74 -0
  69. package/templates/campaign-research.md +39 -0
  70. package/templates/campaign-state.md +40 -0
  71. package/templates/claude-md.md +65 -0
  72. package/templates/deviation-log.md +12 -0
  73. package/templates/drift-log.md +17 -0
  74. package/templates/fix-brief.md +59 -0
  75. package/templates/fix-log.md +22 -0
  76. package/templates/measurement-report.md +75 -0
  77. package/templates/migration-plan.md +24 -0
  78. package/templates/production-manifest.json +20 -0
  79. package/templates/reference-files/brand.md +45 -0
  80. package/templates/reference-files/calendar.md +30 -0
  81. package/templates/reference-files/channels.md +40 -0
  82. package/templates/reference-files/competitors.md +40 -0
  83. package/templates/reference-files/icp.md +50 -0
  84. package/templates/reference-files/learnings.md +40 -0
  85. package/templates/reference-files/metrics.md +42 -0
  86. package/templates/reference-files/positioning.md +38 -0
  87. package/templates/reference-files/state.md +27 -0
  88. package/templates/verification-report.md +59 -0
  89. package/workflows/discipline/.gitkeep +0 -0
  90. package/workflows/discipline/aeo-check.md +180 -0
  91. package/workflows/discipline/affiliate-kit.md +147 -0
  92. package/workflows/discipline/email-preflight.md +150 -0
  93. package/workflows/discipline/keyword-map.md +125 -0
  94. package/workflows/discipline/repurpose.md +329 -0
  95. package/workflows/discipline/seo-audit.md +169 -0
  96. package/workflows/lifecycle/.gitkeep +0 -0
  97. package/workflows/lifecycle/brief-positioning-check.md +90 -0
  98. package/workflows/lifecycle/brief.md +355 -0
  99. package/workflows/lifecycle/fix.md +495 -0
  100. package/workflows/lifecycle/learn.md +405 -0
  101. package/workflows/lifecycle/measure.md +379 -0
  102. package/workflows/lifecycle/produce.md +383 -0
  103. package/workflows/lifecycle/research.md +264 -0
  104. package/workflows/lifecycle/review.md +432 -0
  105. package/workflows/lifecycle/ship.md +521 -0
  106. package/workflows/lifecycle/verify.md +507 -0
  107. package/workflows/reference-mgmt/.gitkeep +0 -0
  108. package/workflows/reference-mgmt/brand-refresh.md +193 -0
  109. package/workflows/reference-mgmt/competitor-scan.md +228 -0
  110. package/workflows/reference-mgmt/icp-refresh.md +200 -0
  111. package/workflows/reference-mgmt/positioning-check.md +339 -0
  112. package/workflows/reference-mgmt/positioning-shift.md +368 -0
  113. package/workflows/setup/.gitkeep +0 -0
  114. package/workflows/setup/init-questions.md +225 -0
  115. package/workflows/setup/init-validation.md +155 -0
  116. package/workflows/setup/init.md +449 -0
  117. package/workflows/setup/new-campaign.md +134 -0
  118. package/workflows/utility/.gitkeep +0 -0
  119. package/workflows/utility/archive.md +334 -0
  120. package/workflows/utility/health.md +166 -0
  121. package/workflows/utility/next.md +187 -0
  122. package/workflows/utility/resume.md +249 -0
  123. package/workflows/utility/state.md +207 -0
@@ -0,0 +1,263 @@
1
+ ---
2
+ discipline: linkedin
3
+ asset_types: [linkedin-post, linkedin-article, linkedin-carousel, linkedin-poll]
4
+ version: "1.0"
5
+ ---
6
+
7
+ # LinkedIn Playbook
8
+
9
+ ## Production Guidance
10
+
11
+ LinkedIn rewards content that keeps people on the platform. The algorithm actively penalizes posts with external links (~60% less reach per 2026 data). Every LinkedIn post must deliver its full value natively -- no teasers, no "read more at..." redirects. If a link is essential, place it in the first comment, not the post body.
12
+
13
+ ### Hook First
14
+
15
+ The first line is everything. It must appear before the "see more" truncation (~210 characters on mobile). The hook determines whether the reader expands the post or scrolls past.
16
+
17
+ **Do NOT start with "I".** Opening with "I was thinking...", "I recently...", or "I just..." signals a self-centered post that the reader has no reason to care about. Instead, open with:
18
+ - A question that challenges an assumption
19
+ - A bold claim or counterintuitive statement
20
+ - A specific data point or statistic
21
+ - A scene-setting scenario the reader recognizes
22
+
23
+ The hook must be complete within the first 210 characters. Do not start a thought in the hook that requires expanding the post to understand.
24
+
25
+ ### Native Content Only
26
+
27
+ LinkedIn's algorithm penalizes posts with external links. Content must stand alone without requiring a click. Apply these rules:
28
+
29
+ 1. **No URLs in the post body.** If the post references external content, summarize the key insight in the post itself.
30
+ 2. **Link in first comment** if a URL is essential. Mention "link in comments" at the end of the post if needed.
31
+ 3. **Content self-sufficiency:** A reader who never clicks any link should still get full value from the post text.
32
+
33
+ ### Visual Assets
34
+
35
+ Document/carousel posts and image posts get higher engagement than text-only. When including visual assets:
36
+ - Use 1:1 (square) or 4:5 (portrait) image ratios for maximum feed space
37
+ - Carousel documents should be PDF format with one key point per slide
38
+ - Infographics and data visualizations perform well for B2B audiences
39
+
40
+ ### Engagement Design
41
+
42
+ The algorithm rewards posts that generate meaningful replies (not just reactions). Design for conversation:
43
+ - End with a specific question or conversation prompt
44
+ - Consider what the reader would actually type as a comment
45
+ - Avoid generic prompts like "What do you think?" -- ask something specific
46
+ - Questions that invite personal experience sharing generate the best threads
47
+
48
+ ### Format for Scanning
49
+
50
+ LinkedIn posts are read on phones. Format accordingly:
51
+ - Use line breaks liberally between ideas
52
+ - Short paragraphs: 1-2 sentences maximum
53
+ - Use whitespace as a design element -- dense blocks of text get skipped
54
+ - Bullet points and numbered lists break up the visual rhythm
55
+ - Avoid long paragraphs that create walls of text on mobile
56
+
57
+ ---
58
+
59
+ ## Discipline Gates
60
+
61
+ ### DISC-LI-01: Hook Quality -- Tier 1
62
+
63
+ **Checks:** First line effectiveness and format
64
+ **Against:** Post content (first 210 characters)
65
+
66
+ #### Evaluation Criteria
67
+
68
+ 1. **Opening word**
69
+ - PASS: Post does NOT start with "I" -- opens with a question, data point, bold claim, or scene-setting statement
70
+ - WARN: Post starts with "I" but follows immediately with a surprising or counterintuitive statement (e.g., "I deleted our most successful campaign -- here's why")
71
+ - FAIL: Post starts with "I" followed by mundane context (e.g., "I was thinking about...", "I recently attended...", "I just read...")
72
+
73
+ 2. **Hook visibility**
74
+ - PASS: Hook is complete within the first 210 characters -- the reader gets the key promise or tension before "see more"
75
+ - WARN: Hook starts strong but the key payoff falls after the 210-character truncation point
76
+ - FAIL: First 210 characters are setup or context with no hook -- no reason for the reader to expand the post
77
+
78
+ ### DISC-LI-02: Native Content Format -- Tier 1
79
+
80
+ **Checks:** Absence of external links in post body and content self-sufficiency
81
+ **Against:** Post content
82
+
83
+ #### Evaluation Criteria
84
+
85
+ 1. **Link placement**
86
+ - PASS: No external URLs in the main post body
87
+ - WARN: One external link present in the post body, but the post content stands alone without it (the link is supplementary, not the point)
88
+ - FAIL: External link is the primary purpose of the post -- link-centric content (e.g., "Check out this article: [URL]" or "New blog post: [URL]")
89
+
90
+ 2. **Content self-sufficiency**
91
+ - PASS: Reader gets full value from the post text alone without clicking any link
92
+ - WARN: Post summarizes linked content but adds original perspective or insight beyond the link
93
+ - FAIL: Post is a teaser that requires clicking a link for the actual content (e.g., "5 tips for better marketing -- read them here: [URL]")
94
+
95
+ ### DISC-LI-03: Engagement Path -- Tier 2
96
+
97
+ **Checks:** Conversation prompt and reply path design
98
+ **Against:** Post content (focus on closing section)
99
+
100
+ #### Evaluation Criteria
101
+
102
+ 1. **Conversation prompt**
103
+ - PASS: Post ends with a specific question or clear invitation to respond that relates to the post's topic
104
+ - WARN: Post has an implied question or general prompt but no explicit ask (e.g., ends with a provocative statement but no question)
105
+ - FAIL: Post ends without any engagement prompt -- just a statement, a link, or a hashtag block
106
+
107
+ 2. **Reply path clarity**
108
+ - PASS: The question or prompt has a clear, easy-to-answer response path -- readers know what to type (e.g., "What's the biggest deal you almost lost to a competitor this quarter?")
109
+ - WARN: Prompt exists but is too broad or abstract (e.g., "What do you think?", "Agree or disagree?", "Thoughts?")
110
+ - FAIL: N/A -- linked to conversation prompt presence above
111
+
112
+ ### DISC-LI-04: Character/Format Limits -- Tier 2
113
+
114
+ **Checks:** Post length and formatting for optimal engagement
115
+ **Against:** LinkedIn platform limits and engagement data
116
+
117
+ #### Evaluation Criteria
118
+
119
+ 1. **Character count**
120
+ - PASS: Post is 1,200-2,100 characters (optimal engagement range based on 2026 data)
121
+ - WARN: Post is 800-1,199 or 2,101-3,000 characters (functional but outside optimal range)
122
+ - FAIL: Post exceeds 3,000 characters (LinkedIn maximum) or is under 300 characters (too thin for meaningful content)
123
+
124
+ 2. **Readability formatting**
125
+ - PASS: Line breaks between paragraphs, short paragraphs of 1-3 sentences, limited hashtags (3-5 at end of post)
126
+ - WARN: Some long paragraphs (4+ sentences) or slightly excessive hashtags (6-10)
127
+ - FAIL: Wall of text with no line breaks, or 10+ hashtags cluttering the post
128
+
129
+ ---
130
+
131
+ ## Base Gate Overrides
132
+
133
+ None -- all base gates keep default tiers.
134
+
135
+ ---
136
+
137
+ ## Format Rules
138
+
139
+ LinkedIn-specific structural requirements enforced during production:
140
+
141
+ - **Maximum post length:** 3,000 characters
142
+ - **Optimal post length:** 1,200-2,100 characters
143
+ - **Hook completion:** Must complete within first 210 characters (mobile "see more" truncation)
144
+ - **Hashtags:** 3-5 maximum, placed at end of post, not inline
145
+ - **Mentions:** Use sparingly -- only mention people who will likely engage; avoid tag-spam
146
+ - **Line breaks:** Between every paragraph; no paragraph longer than 3 sentences
147
+ - **Carousel documents:** PDF format, 1:1 or 4:5 ratio slides, one key point per slide
148
+ - **Article headline:** Under 100 characters
149
+ - **Image ratio:** 1:1 (square) or 4:5 (portrait) for maximum feed space
150
+ - **No external links in post body:** Place links in first comment if needed
151
+
152
+ ---
153
+
154
+ ## Examples
155
+
156
+ ### Good: Strong Hook, Native Content, Engagement Question
157
+
158
+ ```
159
+ We analyzed 847 B2B LinkedIn posts last quarter.
160
+
161
+ The #1 predictor of engagement wasn't the topic.
162
+ It wasn't the time of posting.
163
+ It wasn't even the visual assets.
164
+
165
+ It was the first line.
166
+
167
+ Posts that opened with a specific data point got 3.2x more comments
168
+ than posts that opened with "I".
169
+
170
+ Here's what the top-performing hooks had in common:
171
+
172
+ 1. They challenged a common assumption
173
+ 2. They included a number in the first 10 words
174
+ 3. They created a knowledge gap the reader wanted to close
175
+
176
+ The worst-performing hooks? Almost all started with:
177
+ "I'm excited to announce..."
178
+ "I was thinking about..."
179
+ "I recently had the pleasure of..."
180
+
181
+ What's the strongest opening line you've ever written for a LinkedIn post?
182
+
183
+ #B2BMarketing #ContentStrategy #LinkedInTips
184
+ ```
185
+
186
+ **Why it works:** Opens with data (not "I"), hook completes before 210 chars, no external links, specific engagement question, good formatting with line breaks, 5 hashtags at end.
187
+
188
+ ### Good: Counterintuitive Claim with Carousel
189
+
190
+ ```
191
+ Stop writing LinkedIn posts.
192
+
193
+ Seriously. If your last 10 posts got fewer than 20 comments each,
194
+ writing more of the same won't fix it.
195
+
196
+ Here's what to do instead (carousel attached):
197
+
198
+ Slide 1: Audit your last 10 posts for hook quality
199
+ Slide 2: Identify which topics generated replies vs. just likes
200
+ Slide 3: Double down on reply-generating topics
201
+ Slide 4: Rewrite your weakest hook using the data-first formula
202
+
203
+ The carousel breaks down each step with examples.
204
+
205
+ What's your current average comments per post? (Be honest -- no judgment.)
206
+
207
+ #LinkedInStrategy #ContentMarketing
208
+ ```
209
+
210
+ **Why it works:** Bold claim opener, no "I", native content (carousel provides value without external link), specific question with low barrier to answer.
211
+
212
+ ### Bad: "I" Opener with Link
213
+
214
+ ```
215
+ I'm excited to share that our team just published a new blog post
216
+ about the future of B2B marketing.
217
+
218
+ It covers some really interesting trends that I think you'll find
219
+ valuable. We spent weeks researching this.
220
+
221
+ Check it out here: https://example.com/blog/future-of-b2b
222
+
223
+ Let me know what you think!
224
+
225
+ #Marketing #B2B #Future #Trends #Innovation #Digital #Strategy #Growth #Leadership #Tech
226
+ ```
227
+
228
+ **Why it fails:** DISC-LI-01 FAIL (starts with "I'm excited"), DISC-LI-02 FAIL (link-centric post), DISC-LI-03 WARN ("Let me know what you think" is too vague), DISC-LI-04 WARN (10 hashtags).
229
+
230
+ ### Bad: Wall of Text, No Engagement
231
+
232
+ ```
233
+ The landscape of B2B marketing is rapidly evolving and companies need to adapt their strategies to stay competitive in 2026. With the rise of AI-powered tools, content marketing has become both easier to produce and harder to differentiate. Traditional approaches like gated whitepapers and webinar registrations are seeing declining conversion rates as buyers increasingly prefer ungated, freely available content that demonstrates expertise without requiring an email exchange. The companies that are winning are those that publish research, share data openly, and build trust through transparency rather than through form-fill gates. This shift requires a fundamental rethinking of how we measure marketing ROI since the traditional MQL model breaks down when your best content is freely accessible.
234
+ ```
235
+
236
+ **Why it fails:** DISC-LI-01 FAIL (no hook -- just context), DISC-LI-03 FAIL (no engagement prompt), DISC-LI-04 FAIL (wall of text, no line breaks, single paragraph).
237
+
238
+ ---
239
+
240
+ ## Anti-Patterns
241
+
242
+ 1. **Starting with "I was thinking about..." or "I recently...":** These openers signal self-focused content. The reader has no reason to care about what you were thinking -- lead with what matters to them.
243
+
244
+ 2. **Posting external links as the main content:** LinkedIn algorithm suppresses link posts by approximately 60%. If the post is just a wrapper around a URL, it will reach a fraction of your audience.
245
+
246
+ 3. **Wall of text with no line breaks:** Mobile readers see a dense block of text and scroll past. Use whitespace aggressively -- every 1-2 sentences should have a line break.
247
+
248
+ 4. **Ending with no engagement prompt:** A post that ends with a statement gives the reader no reason to comment. Always close with a specific question or invitation to share their experience.
249
+
250
+ 5. **Excessive hashtags (10+):** More than 5 hashtags looks spammy and does not improve discovery. Use 3-5 relevant hashtags at the end of the post.
251
+
252
+ ---
253
+
254
+ ## Metrics
255
+
256
+ What to measure post-ship for LinkedIn content:
257
+
258
+ - **Impressions:** Reach and distribution -- how many feeds the post appeared in. Baseline varies by follower count.
259
+ - **Engagement rate:** (Reactions + comments) / impressions. Benchmark: 2-5% is good for B2B.
260
+ - **Comment quality:** Ratio of meaningful replies (2+ sentences, on-topic) vs. emoji-only or generic reactions. High-quality comments signal content resonance and drive algorithmic distribution.
261
+ - **Profile views driven:** Awareness metric -- did the post drive people to learn more about the author/company? Track the spike in profile views within 48 hours of posting.
262
+ - **Click-through to CTA in comments:** If using the link-in-comments strategy, track click-through rate on the comment link. Note: LinkedIn does not provide native analytics for comment links, so use UTM-tagged URLs.
263
+ - **Follower growth:** Net new followers within 48 hours of posting. Sustained growth signals content-market fit.
@@ -0,0 +1,318 @@
1
+ ---
2
+ discipline: paid-ads
3
+ asset_types: [search-ad, display-ad, social-ad, video-ad, landing-page-ad]
4
+ version: "1.0"
5
+ ---
6
+
7
+ # Paid Ads Discipline Playbook
8
+
9
+ This playbook extends the base playbook contract (`base.md`) with paid advertising-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
+ ### Ad-to-Landing-Page Message Match
16
+
17
+ The single most important factor in paid ad performance is message match -- the ad copy promise must match the landing page headline and above-the-fold content exactly. When a user clicks an ad that says "Get 50% Off Your First Month," the landing page H1 must say "50% Off Your First Month" (or semantically equivalent). Any disconnect between ad promise and landing page delivery kills conversion rate and wastes ad spend.
18
+
19
+ For every ad creative, specify the landing page URL and confirm that:
20
+
21
+ - The ad headline claim appears in the landing page H1
22
+ - The ad CTA matches the landing page primary action button
23
+ - The visual style (colors, imagery, tone) is consistent between ad and landing page
24
+ - The offer terms visible in the ad are present above the fold on the landing page
25
+
26
+ ### Creative Variety
27
+
28
+ Never run a single creative. Every campaign must include multiple creative variations for A/B testing:
29
+
30
+ - Minimum 3 distinct variations per ad set
31
+ - Each variation should test a different angle: different hook, different value proposition emphasis, different visual approach
32
+ - Variations should differ meaningfully -- changing one word does not count as a variation
33
+ - Label each variation clearly (e.g., "Pain Point Hook," "Social Proof Hook," "Benefit-First Hook")
34
+
35
+ Creative variety enables performance optimization. Without it, you cannot know which message resonates and you are guessing with budget.
36
+
37
+ ### Audience-Creative Fit
38
+
39
+ Match creative angle to the target audience segment:
40
+
41
+ - Pull language directly from ICP.md customer language library -- use the words your audience uses, not internal product jargon
42
+ - Address specific pain points or jobs-to-be-done (JTBD) relevant to the audience segment
43
+ - Adjust tone for platform context: LinkedIn ads are professional, Instagram ads are visual-first, Google Search ads are intent-driven
44
+ - If targeting multiple segments, create segment-specific ad sets with tailored creative -- do not use one-size-fits-all copy
45
+
46
+ ### Bid Strategy Awareness
47
+
48
+ Creative approach must align with the campaign bid strategy and objective:
49
+
50
+ - **Awareness campaigns** (CPM/reach): Broad messaging, brand-focused, emotional appeal. Creative drives impressions and recall.
51
+ - **Consideration campaigns** (CPC/engagement): Educational, value-driven. Creative drives clicks and engagement.
52
+ - **Conversion campaigns** (CPA/ROAS): Direct response, clear CTA, urgency. Creative drives specific actions.
53
+
54
+ Mismatching creative style and bid strategy wastes budget -- brand awareness copy with aggressive "Buy Now" CTAs confuses the audience; conversion campaigns with vague brand messaging fail to drive action.
55
+
56
+ ### Platform-Specific Copy Constraints
57
+
58
+ Each platform has strict format requirements. Produce creative within these constraints from the start -- do not write long copy and then truncate:
59
+
60
+ - **Google Search Ads:** Headlines 1-3 (30 chars each), descriptions 1-2 (90 chars each)
61
+ - **Meta/Facebook:** Primary text (125 chars above fold), headline (40 chars), description (30 chars), image 1200x628px
62
+ - **LinkedIn:** Single image headline (70 chars), intro text (150 chars above fold), image 1200x627px
63
+ - **Display ads:** Varies by size (300x250, 728x90, 160x600) -- text must be legible at each size
64
+
65
+ Write to the constraint, not around it. If the headline must be 30 characters, write a 30-character headline -- do not write 50 characters and hope it fits.
66
+
67
+ ---
68
+
69
+ ## Discipline Gates
70
+
71
+ ### DISC-PAID-ADS-01: Message Match -- Tier 1
72
+
73
+ **Checks:** Ad copy promise matches the landing page headline and above-the-fold content
74
+ **Against:** Ad creative and specified landing page content
75
+
76
+ #### Evaluation Criteria
77
+
78
+ 1. **Headline-to-landing-page alignment**
79
+ - PASS: Ad headline claim appears verbatim or semantically equivalent in the landing page H1, and the CTA matches the landing page primary action
80
+ - WARN: Ad and landing page share the same topic but the specific promise differs (e.g., ad says "50% off" but LP says "save big")
81
+ - FAIL: Ad copy makes a promise not present on the landing page, or landing page URL is missing from the brief
82
+
83
+ 2. **Offer consistency**
84
+ - PASS: Any pricing, discount, or offer terms in the ad are identically present on the landing page above the fold
85
+ - WARN: Offer is present on the landing page but requires scrolling or clicking to find
86
+ - FAIL: Ad mentions an offer or price not found on the landing page
87
+
88
+ ### DISC-PAID-ADS-02: Creative Variety -- Tier 1
89
+
90
+ **Checks:** Campaign includes multiple creative variations for testing
91
+ **Against:** Ad brief creative set
92
+
93
+ #### Evaluation Criteria
94
+
95
+ 1. **Variation count**
96
+ - PASS: At least 3 distinct ad variations (different hooks, visuals, or angles) defined in the brief, each clearly labeled
97
+ - WARN: 2 variations defined
98
+ - FAIL: Single creative with no variation plan
99
+
100
+ 2. **Variation distinctiveness**
101
+ - PASS: Each variation tests a meaningfully different angle (different pain point, different value prop, different emotional appeal)
102
+ - WARN: Variations exist but differ only in minor wording changes (synonym swaps)
103
+ - FAIL: "Variations" are identical copy with only formatting changes
104
+
105
+ ### DISC-PAID-ADS-03: Audience-Creative Fit -- Tier 2
106
+
107
+ **Checks:** Creative angle matches the target audience segment's pain points and language
108
+ **Against:** ICP.md customer language library and audience segment definition
109
+
110
+ #### Evaluation Criteria
111
+
112
+ 1. **Language alignment**
113
+ - PASS: Ad copy uses language from ICP.md customer language library, addresses a specific pain point or JTBD relevant to the audience segment
114
+ - WARN: Ad copy addresses the right topic but uses generic rather than ICP-specific language
115
+ - FAIL: Ad copy uses internal/product jargon or addresses pain points not in the ICP definition
116
+
117
+ 2. **Segment specificity**
118
+ - PASS: Creative is tailored to a specific audience segment with named pain points from that segment's profile
119
+ - WARN: Creative is broadly relevant to the target market but not tailored to a specific segment
120
+ - FAIL: Creative uses one-size-fits-all messaging with no audience segment consideration
121
+
122
+ ### DISC-PAID-ADS-04: Platform Format Compliance -- Tier 2
123
+
124
+ **Checks:** Ad copy respects platform character limits and format rules
125
+ **Against:** Platform specifications (Google, Meta, LinkedIn, Display)
126
+
127
+ #### Evaluation Criteria
128
+
129
+ 1. **Character limits**
130
+ - PASS: All headlines under platform limit (Google: 30 chars, Meta: 40 chars, LinkedIn: 70 chars), descriptions under limit (Google: 90 chars, Meta: 125 chars primary text), all copy verified against the target platform
131
+ - WARN: Copy is within 10% of limits but could be tighter to avoid truncation on some devices
132
+ - FAIL: Copy exceeds platform character limits or uses formats unsupported by the target platform
133
+
134
+ 2. **Asset specifications**
135
+ - PASS: Image dimensions, video length, and file format match platform requirements (e.g., Meta: 1200x628px, Google Display: specified banner sizes)
136
+ - WARN: Specs are close but not exact (e.g., slightly off aspect ratio)
137
+ - FAIL: No image/video specs provided, or specs are incompatible with the target platform
138
+
139
+ ### DISC-PAID-ADS-05: Bid Strategy Alignment -- Tier 2
140
+
141
+ **Checks:** Creative approach aligns with the stated bid strategy and campaign objective
142
+ **Against:** Campaign brief bid strategy and objective declaration
143
+
144
+ #### Evaluation Criteria
145
+
146
+ 1. **Strategy-creative coherence**
147
+ - PASS: Awareness campaigns use broad/engagement-focused creative, conversion campaigns use direct-response creative with clear CTA, the brief explicitly states bid strategy
148
+ - WARN: Bid strategy stated but creative style does not clearly match the objective (e.g., awareness campaign with aggressive CTA)
149
+ - FAIL: No bid strategy stated in the brief, or creative contradicts the campaign objective
150
+
151
+ 2. **CTA appropriateness**
152
+ - PASS: CTA strength matches funnel stage -- soft CTAs ("Learn more") for awareness, strong CTAs ("Start free trial") for conversion
153
+ - WARN: CTA is present but mismatched to the funnel stage
154
+ - FAIL: No CTA in conversion-focused ads, or aggressive sales CTA in awareness-stage ads
155
+
156
+ ---
157
+
158
+ ## Base Gate Overrides
159
+
160
+ | Base Gate ID | Default Tier | Override Tier | Reason |
161
+ |-------------|-------------|---------------|--------|
162
+ | GATE-05 (Funnel Integrity) | Tier 2 | Tier 1 | Paid traffic with broken funnels wastes ad spend directly -- every click costs money, so the funnel must be verified before launch |
163
+ | GATE-06 (UTM Hygiene) | Tier 2 | Tier 1 | Paid channels require precise attribution to justify spend and optimize campaigns. Missing or incorrect UTMs make ROAS unmeasurable. |
164
+
165
+ ---
166
+
167
+ ## Format Rules
168
+
169
+ ### Google Search Ads
170
+
171
+ ```
172
+ Headline 1: {30 characters max -- primary keyword + value prop}
173
+ Headline 2: {30 characters max -- differentiator or benefit}
174
+ Headline 3: {30 characters max -- CTA or brand}
175
+ Description 1: {90 characters max -- expand on the promise, include keyword}
176
+ Description 2: {90 characters max -- social proof, urgency, or secondary benefit}
177
+ Display URL path: {15 chars}/{15 chars}
178
+ ```
179
+
180
+ ### Meta / Facebook Ads
181
+
182
+ ```
183
+ Primary text: {125 characters visible above fold -- hook + value prop}
184
+ Extended text: {up to 500 chars total, but only 125 visible before "See more"}
185
+ Headline: {40 characters max}
186
+ Description: {30 characters max -- appears below headline}
187
+ CTA button: {Select from platform options: Learn More, Sign Up, Shop Now, etc.}
188
+ Image: 1200x628px (1.91:1 ratio), max 20% text overlay
189
+ Video: 1:1 or 4:5 for feed, 9:16 for Stories/Reels, 15-60 seconds
190
+ ```
191
+
192
+ ### LinkedIn Ads
193
+
194
+ ```
195
+ Single Image:
196
+ Intro text: {150 characters visible above fold, up to 600 total}
197
+ Headline: {70 characters max}
198
+ Image: 1200x627px (1.91:1 ratio)
199
+ CTA button: {Platform options: Learn More, Sign Up, Download, etc.}
200
+
201
+ Carousel:
202
+ Cards: 2-10 cards
203
+ Card headline: {45 characters max}
204
+ Card image: 1080x1080px (1:1 ratio)
205
+ ```
206
+
207
+ ### Display Ad Sizes
208
+
209
+ | Size | Use Case | Text Guidelines |
210
+ |------|----------|-----------------|
211
+ | 300x250 | Medium rectangle -- sidebars and in-content | Max 2 lines of headline text, 1 line CTA |
212
+ | 728x90 | Leaderboard -- page headers | Single headline + CTA, horizontal layout |
213
+ | 160x600 | Wide skyscraper -- sidebars | Stacked layout, headline on top, CTA at bottom |
214
+ | 320x50 | Mobile banner | Ultra-short: 5-7 word headline + CTA |
215
+ | 300x600 | Half page -- high impact | More room for messaging, image-heavy |
216
+
217
+ ### Video Ad Specs
218
+
219
+ | Format | Duration | Platform | Notes |
220
+ |--------|----------|----------|-------|
221
+ | Bumper | 6 seconds | YouTube, Meta | Single message, no CTA click-through |
222
+ | Short | 15 seconds | All platforms | Hook in first 2 seconds, CTA at end |
223
+ | Standard | 30 seconds | YouTube, Meta, LinkedIn | Full structure: hook, value, CTA |
224
+ | Long-form | 60+ seconds | YouTube (skippable) | Hook in first 5 seconds before skip option |
225
+
226
+ ---
227
+
228
+ ## Examples
229
+
230
+ ### Good: Strong Message Match Pair
231
+
232
+ ```
233
+ Google Search Ad:
234
+ Headline 1: "50% Off First 3 Months" (25 chars)
235
+ Headline 2: "Marketing OS for Startups" (27 chars)
236
+ Headline 3: "Start Free Trial Today" (23 chars)
237
+ Description 1: "Ship marketing campaigns with built-in quality gates. No more guessing." (73 chars)
238
+ Description 2: "Trusted by 500+ startups. Cancel anytime. No credit card required." (68 chars)
239
+
240
+ Landing Page H1: "Get 50% Off Your First 3 Months"
241
+ Landing Page CTA: "Start Free Trial"
242
+ Above fold: Pricing table showing the 50% discount, feature highlights, "No credit card required"
243
+ ```
244
+
245
+ Why it works: Ad headline promise ("50% Off First 3 Months") matches LP H1 exactly. CTA matches. Offer terms are consistent. No surprises after the click.
246
+
247
+ ### Bad: Broken Message Match
248
+
249
+ ```
250
+ Meta Ad:
251
+ Primary text: "The #1 marketing tool for growing teams"
252
+ Headline: "Try It Free"
253
+ CTA: Sign Up
254
+
255
+ Landing Page H1: "Enterprise Marketing Platform"
256
+ Landing Page CTA: "Request a Demo"
257
+ Above fold: Enterprise features, case studies from Fortune 500 companies
258
+ ```
259
+
260
+ Why it fails: Ad targets "growing teams" but LP targets "enterprise." Ad says "Try It Free" but LP says "Request a Demo." The user who clicked expecting a free trial for a small team lands on an enterprise sales page. Conversion rate: near zero.
261
+
262
+ ### Good: Creative Variety Set
263
+
264
+ ```
265
+ Variation A - Pain Point Hook:
266
+ "Tired of marketing campaigns that ship without quality checks?"
267
+
268
+ Variation B - Social Proof Hook:
269
+ "500+ startups use this to ship marketing 3x faster"
270
+
271
+ Variation C - Benefit-First Hook:
272
+ "Ship campaigns with built-in quality gates -- no more guessing"
273
+ ```
274
+
275
+ Why it works: Each tests a fundamentally different angle (pain, proof, benefit). Clear labels. Measurable differences in CTR will reveal which angle resonates.
276
+
277
+ ### Bad: Monotone Creative Set
278
+
279
+ ```
280
+ Variation A: "Great marketing tool for your team"
281
+ Variation B: "Amazing marketing tool for your team"
282
+ Variation C: "Excellent marketing tool for your team"
283
+ ```
284
+
285
+ Why it fails: Only the adjective changes. No meaningful test. CTR differences will be noise, not signal.
286
+
287
+ ---
288
+
289
+ ## Anti-Patterns
290
+
291
+ 1. **Sending all ad traffic to the homepage** -- Homepage is not a landing page. It serves multiple audiences and purposes. Paid traffic needs a dedicated landing page with a single message and CTA that matches the ad.
292
+
293
+ 2. **Single creative with no A/B variants** -- Running one ad creative means you cannot optimize. You are paying for traffic with no ability to learn what works. Always launch with 3+ variations.
294
+
295
+ 3. **Awareness creative with conversion bid strategy** -- Running brand awareness copy ("Introducing our new platform") with a CPA bid tells the algorithm to optimize for conversions, but the creative is not designed to convert. Match creative intent to bid strategy.
296
+
297
+ 4. **Ignoring platform character limits** -- Writing 50-character headlines for Google Ads (30-char limit) means the platform truncates your message. Write to the constraint from the start.
298
+
299
+ 5. **Same copy across all platforms** -- LinkedIn professional audience, Instagram visual-first audience, and Google search-intent audience require different creative approaches. Cross-posting identical copy shows audience blindness.
300
+
301
+ 6. **Missing landing page URL in brief** -- An ad brief without a specified landing page cannot be verified for message match. The landing page is half the ad -- always include it.
302
+
303
+ 7. **No bid strategy declaration** -- If the brief does not state whether this is an awareness, consideration, or conversion campaign, the creative cannot be evaluated for strategy alignment. Always declare the objective.
304
+
305
+ ---
306
+
307
+ ## Metrics
308
+
309
+ Track these indicators for paid ad campaigns after launch:
310
+
311
+ - **Cost per click (CPC)** -- Average cost per click. Compare against industry benchmarks and historical campaign data.
312
+ - **Click-through rate (CTR)** -- Impressions to clicks. Measures ad creative effectiveness. Google Search benchmark: 3-5%. Display benchmark: 0.5-1%.
313
+ - **Conversion rate** -- Clicks to desired action (signup, purchase, download). Measures landing page effectiveness post-click.
314
+ - **Return on ad spend (ROAS)** -- Revenue generated per dollar spent. Primary efficiency metric for conversion campaigns.
315
+ - **Cost per acquisition (CPA)** -- Total spend divided by conversions. Measures efficiency of the full funnel.
316
+ - **Quality Score (Google)** -- 1-10 rating based on expected CTR, ad relevance, and landing page experience. Higher scores reduce CPC.
317
+ - **Relevance Score (Meta)** -- Ad relevance diagnostics: quality ranking, engagement rate ranking, conversion rate ranking. Low scores indicate audience-creative mismatch.
318
+ - **Impression share** -- Percentage of eligible impressions captured. Low impression share may indicate budget or bid constraints.