taketomarket 2.2.0 → 2.3.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 (180) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/README.md +34 -11
  4. package/bin/lib/campaign.cjs +12 -8
  5. package/bin/lib/codebase-scan.cjs +86 -0
  6. package/bin/lib/config.cjs +129 -0
  7. package/bin/lib/deploy.cjs +36 -0
  8. package/bin/lib/deviation.cjs +1 -1
  9. package/bin/lib/drift-log.cjs +4 -4
  10. package/bin/lib/health.cjs +32 -31
  11. package/bin/lib/install-detect.cjs +62 -0
  12. package/bin/lib/legacy-folder.cjs +100 -0
  13. package/bin/lib/playwright-check.cjs +26 -0
  14. package/bin/lib/site-location.cjs +22 -0
  15. package/bin/lib/state.cjs +3 -3
  16. package/bin/lib/svg-render.cjs +42 -0
  17. package/bin/ttm-tools.cjs +136 -4
  18. package/gates/base-gates.md +8 -8
  19. package/gates/gate-evaluation.md +8 -8
  20. package/install.js +37 -3
  21. package/package.json +10 -6
  22. package/playbooks/aeo.md +218 -114
  23. package/playbooks/affiliate.md +225 -160
  24. package/playbooks/email.md +236 -174
  25. package/playbooks/events.md +303 -213
  26. package/playbooks/landing-pages.md +305 -0
  27. package/playbooks/linkedin.md +264 -142
  28. package/playbooks/manifesto.md +322 -0
  29. package/playbooks/paid-ads.md +240 -189
  30. package/playbooks/positioning.md +340 -0
  31. package/playbooks/pr-media.md +308 -168
  32. package/playbooks/pseo.md +426 -0
  33. package/playbooks/seo.md +251 -158
  34. package/playbooks/social.md +253 -182
  35. package/playbooks/youtube.md +286 -181
  36. package/references/brand-color-theory.md +48 -0
  37. package/references/codex-image-gen-research.md +58 -0
  38. package/references/context-loading.md +6 -6
  39. package/references/humanizer-patterns.md +433 -0
  40. package/references/inline-education-blurbs.md +461 -0
  41. package/references/landing-page-anatomy.md +64 -0
  42. package/references/linkedin-post-patterns.md +174 -0
  43. package/references/logo-design-principles.md +55 -0
  44. package/references/meta-gate-evaluation.md +3 -3
  45. package/references/obra-superpowers-conventions.md +170 -0
  46. package/references/playbook-leaders.md +472 -0
  47. package/references/playwright-mcp-setup.md +164 -0
  48. package/references/positioning-check-report.md +2 -2
  49. package/references/pseo-page-anatomy.md +56 -0
  50. package/references/pseo-templates/alternative-anatomy.md +31 -0
  51. package/references/pseo-templates/alternative-content-playbook.md +32 -0
  52. package/references/pseo-templates/blog-anatomy.md +28 -0
  53. package/references/pseo-templates/blog-content-playbook.md +36 -0
  54. package/references/pseo-templates/comparison-anatomy.md +29 -0
  55. package/references/pseo-templates/comparison-content-playbook.md +35 -0
  56. package/references/pseo-templates/use-case-anatomy.md +28 -0
  57. package/references/pseo-templates/use-case-content-playbook.md +30 -0
  58. package/skills/ttm-101/SKILL.md +25 -0
  59. package/skills/ttm-aeo-check/SKILL.md +17 -12
  60. package/skills/ttm-affiliate-kit/SKILL.md +5 -0
  61. package/skills/ttm-archive/SKILL.md +5 -0
  62. package/skills/ttm-brand-refresh/SKILL.md +5 -0
  63. package/skills/ttm-brief/SKILL.md +5 -0
  64. package/skills/ttm-competitor-scan/SKILL.md +5 -0
  65. package/skills/ttm-deploy/SKILL.md +22 -0
  66. package/skills/ttm-discover/SKILL.md +17 -0
  67. package/skills/ttm-email-check/SKILL.md +17 -0
  68. package/skills/ttm-email-preflight/SKILL.md +17 -11
  69. package/skills/ttm-fix/SKILL.md +5 -0
  70. package/skills/ttm-health/SKILL.md +6 -1
  71. package/skills/ttm-humanize/SKILL.md +33 -0
  72. package/skills/ttm-icp-refresh/SKILL.md +5 -0
  73. package/skills/ttm-improve-skill/SKILL.md +18 -0
  74. package/skills/ttm-init/SKILL.md +10 -3
  75. package/skills/ttm-keyword-map/SKILL.md +17 -11
  76. package/skills/ttm-landing/SKILL.md +19 -0
  77. package/skills/ttm-learn/SKILL.md +5 -0
  78. package/skills/ttm-linkedin-post/SKILL.md +26 -0
  79. package/skills/ttm-measure/SKILL.md +5 -0
  80. package/skills/ttm-new-campaign/SKILL.md +5 -0
  81. package/skills/ttm-next/SKILL.md +5 -0
  82. package/skills/ttm-playwright-setup/SKILL.md +18 -0
  83. package/skills/ttm-positioning-check/SKILL.md +5 -0
  84. package/skills/ttm-positioning-shift/SKILL.md +5 -0
  85. package/skills/ttm-produce/SKILL.md +5 -0
  86. package/skills/ttm-pseo/SKILL.md +26 -0
  87. package/skills/ttm-repurpose/SKILL.md +5 -0
  88. package/skills/ttm-request-skill/SKILL.md +18 -0
  89. package/skills/ttm-research/SKILL.md +18 -6
  90. package/skills/ttm-resume/SKILL.md +5 -0
  91. package/skills/ttm-review/SKILL.md +5 -0
  92. package/skills/ttm-seo/SKILL.md +64 -0
  93. package/skills/ttm-seo-audit/SKILL.md +17 -12
  94. package/skills/ttm-ship/SKILL.md +5 -0
  95. package/skills/ttm-state/SKILL.md +5 -0
  96. package/skills/ttm-update/SKILL.md +152 -4
  97. package/skills/ttm-verify/SKILL.md +5 -0
  98. package/templates/agents-md.md +14 -4
  99. package/templates/campaign-research.md +6 -6
  100. package/templates/campaign-state.md +1 -1
  101. package/templates/claude-md.md +14 -4
  102. package/templates/linkedin-base-template.md +48 -0
  103. package/templates/next-step-footer.md +13 -0
  104. package/templates/production-manifest.json +4 -4
  105. package/templates/pseo/alternative-cms-schema.json +65 -0
  106. package/templates/pseo/blog-cms-schema.json +55 -0
  107. package/templates/pseo/comparison-cms-schema.json +56 -0
  108. package/templates/pseo/use-case-cms-schema.json +62 -0
  109. package/templates/reference-files/brand.md +51 -0
  110. package/templates/reference-files/product-dna.md +73 -0
  111. package/templates/site-scaffold/app/globals.css +2 -0
  112. package/templates/site-scaffold/app/layout.tsx +17 -0
  113. package/templates/site-scaffold/app/page.tsx +33 -0
  114. package/templates/site-scaffold/app/robots.ts +8 -0
  115. package/templates/site-scaffold/app/sitemap.ts +10 -0
  116. package/templates/site-scaffold/app/tokens.css +21 -0
  117. package/templates/site-scaffold/components/Comparison.tsx +14 -0
  118. package/templates/site-scaffold/components/Faq.tsx +14 -0
  119. package/templates/site-scaffold/components/Features.tsx +14 -0
  120. package/templates/site-scaffold/components/FinalCta.tsx +17 -0
  121. package/templates/site-scaffold/components/Footer.tsx +12 -0
  122. package/templates/site-scaffold/components/Hero.tsx +22 -0
  123. package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
  124. package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
  125. package/templates/site-scaffold/components/Problem.tsx +14 -0
  126. package/templates/site-scaffold/components/SocialProof.tsx +14 -0
  127. package/templates/site-scaffold/components/Solution.tsx +14 -0
  128. package/templates/site-scaffold/components/Testimonials.tsx +14 -0
  129. package/templates/site-scaffold/components/UseCases.tsx +14 -0
  130. package/templates/site-scaffold/content/.gitkeep +0 -0
  131. package/templates/site-scaffold/lib/.gitkeep +0 -0
  132. package/templates/site-scaffold/next.config.mjs +10 -0
  133. package/templates/site-scaffold/package.json +25 -0
  134. package/templates/site-scaffold/postcss.config.mjs +3 -0
  135. package/templates/site-scaffold/public/llms.txt +9 -0
  136. package/templates/site-scaffold/tsconfig.json +21 -0
  137. package/templates/verification-report.md +1 -1
  138. package/workflows/channel/linkedin-post.md +178 -0
  139. package/workflows/discipline/affiliate-kit.md +65 -6
  140. package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
  141. package/workflows/discipline/repurpose.md +82 -31
  142. package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
  143. package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
  144. package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
  145. package/workflows/education/ttm-101.md +114 -0
  146. package/workflows/lifecycle/brief-positioning-check.md +1 -1
  147. package/workflows/lifecycle/brief.md +64 -28
  148. package/workflows/lifecycle/{research.md → discover.md} +61 -19
  149. package/workflows/lifecycle/fix.md +72 -37
  150. package/workflows/lifecycle/humanize.md +280 -0
  151. package/workflows/lifecycle/learn.md +72 -35
  152. package/workflows/lifecycle/measure.md +54 -18
  153. package/workflows/lifecycle/produce.md +88 -37
  154. package/workflows/lifecycle/review.md +71 -25
  155. package/workflows/lifecycle/ship.md +62 -18
  156. package/workflows/lifecycle/verify.md +72 -26
  157. package/workflows/reference-mgmt/brand-refresh.md +50 -13
  158. package/workflows/reference-mgmt/competitor-scan.md +51 -15
  159. package/workflows/reference-mgmt/icp-refresh.md +48 -12
  160. package/workflows/reference-mgmt/positioning-check.md +55 -20
  161. package/workflows/reference-mgmt/positioning-shift.md +53 -17
  162. package/workflows/setup/init-brand-colors.md +75 -0
  163. package/workflows/setup/init-logo.md +113 -0
  164. package/workflows/setup/init-product-dna.md +83 -0
  165. package/workflows/setup/init-questions.md +166 -30
  166. package/workflows/setup/init-validation.md +22 -0
  167. package/workflows/setup/init.md +144 -39
  168. package/workflows/setup/new-campaign.md +48 -12
  169. package/workflows/site/deploy.md +98 -0
  170. package/workflows/site/landing.md +156 -0
  171. package/workflows/site/pseo.md +96 -0
  172. package/workflows/site/quality-gates.md +88 -0
  173. package/workflows/utility/archive.md +45 -9
  174. package/workflows/utility/health.md +77 -3
  175. package/workflows/utility/improve-skill.md +233 -0
  176. package/workflows/utility/next.md +38 -2
  177. package/workflows/utility/playwright-setup.md +128 -0
  178. package/workflows/utility/request-skill.md +218 -0
  179. package/workflows/utility/resume.md +40 -3
  180. package/workflows/utility/state.md +42 -7
@@ -0,0 +1,340 @@
1
+ ---
2
+ discipline: positioning
3
+ asset_types: [positioning-statement, homepage-copy, one-liner]
4
+ version: "1.0"
5
+ ---
6
+
7
+ # Positioning Discipline Playbook
8
+
9
+ This playbook extends the base playbook contract (`base.md`) with positioning-specific production guidance, discipline gates, and format rules. It is loaded by ttm-producer when generating positioning artifacts (one-liners, homepage copy, positioning statements, manifestos) and parsed by ttm-verify for gate evaluation.
10
+
11
+ The framework is **Homepage-First Positioning** as taught by Anthony Pierri (FletchPMM). Pierri's thesis: positioning is not a strategy deck and it is not a workshop output -- positioning is what your homepage actually says. If the homepage is generic, the positioning is generic, no matter what the internal narrative claims. For an engineer-solopreneur audience, this framing is decisive: the artifact you can ship this week is the positioning. Everything else is internal documentation.
12
+
13
+ > Why Pierri over April Dunford: Dunford's "Obviously Awesome" is the more widely cited positioning book and is the right call for enterprise category-creation work. Pierri runs 400+ B2B startup homepage repositioning engagements and his methodology is productized, fast, and built for founders who have to ship a homepage *this week*. takeToMarket's audience is the second group.
14
+
15
+ ---
16
+
17
+ ## Production Guidance
18
+
19
+ ### The Homepage Is the Strategy
20
+
21
+ If your positioning cannot fit on your homepage, it is not positioning -- it is an internal narrative. Treat every positioning artifact (one-liner, hero block, manifesto) as a candidate string for the homepage. If you would not put it on the homepage, do not ship it as positioning. This is the load-bearing rule that everything below extends.
22
+
23
+ An engineering analogy: positioning is the API contract, not the implementation notes. The homepage is the public interface -- the only surface a prospect actually calls. Internal slide decks are like inline comments: useful for the team, invisible to the user. Optimize the interface first; if the interface is wrong, no amount of internal documentation rescues the product.
24
+
25
+ ### The 4 Questions Every B2B Startup Must Answer
26
+
27
+ Pierri's homepage diagnostic. Every positioning artifact must answer all four, in plain language, above the fold:
28
+
29
+ 1. **What is it?** Name the category in words a sixth-grader understands. "AI-powered platform for X" fails this test -- it names a hype tag, not a category. "Helpdesk software", "Postgres GUI", "video transcription API" passes. Lead with the boring word.
30
+ 2. **Who is it for?** Name the role, not the company size. "Heads of customer support at SaaS companies" beats "support teams" beats "teams" beats "businesses". The more specific the role, the more the right reader self-identifies and the wrong reader bounces -- both are wins.
31
+ 3. **What problem does it solve?** Name a painful, recurring workflow -- not an aspirational outcome. "Triaging incoming tickets across 5 inboxes" beats "improving customer happiness". Pain is concrete; happiness is vapor.
32
+ 4. **What's the alternative we beat?** Name the thing the prospect uses today and explain why you win. This includes "spreadsheets", "doing it manually", "a competitor", "an in-house script". A positioning artifact with no named alternative is reading as marketing fluff.
33
+
34
+ If any of the four are missing, the positioning is incomplete. Do not ship a positioning artifact that punts on any of the four.
35
+
36
+ ### The 7-Box Homepage Canvas
37
+
38
+ Pierri's structural template. Every homepage decomposes into seven boxes, each with a job. The positioning playbook drives boxes 1, 2, 4, and 6 directly; the landing-pages playbook (Peep Laja) extends boxes 3, 5, and 7. Each box must be filled with specific content -- an empty or generic box means the page fails. The boxes:
39
+
40
+ 1. **Hero headline** -- answers "what is it?" in plain category language. Not a tagline. Not a promise. A description.
41
+ 2. **Hero subhead** -- answers "who is it for?" + "what problem does it solve?" in one sentence. The subhead does the work the headline cannot.
42
+ 3. **Social proof bar** -- specific logos with case-study substance. "Trusted by leading teams" is empty proof and fails.
43
+ 4. **Problem agitation** -- describe the current painful workflow in the prospect's own words. Mine support tickets, sales calls, and Reddit threads for the literal phrases used.
44
+ 5. **Solution / how it works** -- one screenshot + three steps maximum. If "how it works" takes more than three steps to explain, the positioning is the problem, not the explanation.
45
+ 6. **Differentiators / "why us"** -- contrast against the named alternative. Each differentiator must be a feature competitors lack -- not a feature competitors also have. "Easy to use" is not a differentiator. "Native Postgres LISTEN/NOTIFY support (alternatives poll)" is.
46
+ 7. **CTA** -- one primary action. "Start free", "See pricing", "Book demo" -- pick one. Stacked CTAs dilute intent.
47
+
48
+ Every positioning artifact you produce should route to one of these boxes. When ttm-produce generates a homepage hero, it is generating box 1 + box 2. When it generates a manifesto, it is generating the narrative that backfills boxes 4 and 6.
49
+
50
+ ### Clear Is Better Than Clever
51
+
52
+ Specificity beats cleverness, every time. A boring-but-specific tagline outperforms a clever-but-vague one. The instinct of most founders -- especially engineers who consume Apple/Stripe marketing -- is to reach for cleverness. Resist.
53
+
54
+ - Clear and specific: "Open-source error tracking for Python and JavaScript" (Sentry's early positioning).
55
+ - Clever and vague: "Software that empowers developers to build better experiences."
56
+
57
+ If the tagline could be lifted and dropped onto a competitor's homepage without anyone noticing, it is generic. The test: paste your hero headline into your two closest competitors' homepages. If it still makes sense on either of them, rewrite.
58
+
59
+ ### Use-Case Positioning Beats Category Positioning
60
+
61
+ For most early-stage startups, naming a category is the wrong move. Categories are won by incumbents with marketing budgets to define them. Use cases are won by the team that owns one painful workflow end-to-end. Pierri's rule: if you are under ~$10M ARR, position on a use case, not a category.
62
+
63
+ Use-case examples (good for early-stage):
64
+ - "Send Slack alerts when your Stripe revenue drops" -- one workflow, fully specified.
65
+ - "Generate SOC2 evidence for AWS infrastructure" -- one job, fully specified.
66
+
67
+ Category examples (good only once you can afford the category fight):
68
+ - "The data observability platform."
69
+ - "The customer experience cloud."
70
+
71
+ Engineer translation: use cases are functions; categories are modules. Ship the function first. Refactor into a module once usage proves the abstraction.
72
+
73
+ ### Champion-Centric Positioning
74
+
75
+ Write to the person closest to the pain who will become your internal advocate -- not the economic buyer, not the C-suite. The champion is the practitioner: the SRE, the support lead, the marketing ops manager, the indie dev. They feel the pain hourly. They will read your homepage twice and forward it to their team. The CFO will never read your homepage.
76
+
77
+ This is counterintuitive to founders who sell enterprise. The advice is the same: positioning copy speaks to the champion. Sales decks and pricing pages can speak to the buyer.
78
+
79
+ ### Say Something Specific (Saying-Specific Principle)
80
+
81
+ Pierri's most-quoted rule: "Say something specific." This is the operating principle for every line of positioning copy. Concrete > abstract. Named > unnamed. Numbered > qualitative. Examples:
82
+
83
+ - Abstract: "We help teams move faster." -> Specific: "Cuts incident response time from 30 minutes to 4 minutes."
84
+ - Unnamed: "Compatible with leading databases." -> Named: "Works with Postgres 13+, MySQL 8+, and SQLite."
85
+ - Qualitative: "Trusted by industry leaders." -> Numbered: "Powers 8 of the top 20 YC W24 companies."
86
+
87
+ If the copy survives a "compared to what?" or "according to whom?" interrogation, it is specific enough. If it does not, rewrite.
88
+
89
+ ### Pick a Fight
90
+
91
+ Positioning without a contrast point reads as marketing fluff. Name the alternative being beaten -- even if the alternative is "spreadsheets" or "doing it manually". Founders avoid this because it feels aggressive or because legal flinches. Do it anyway. The alternative can be:
92
+
93
+ - A direct competitor by name ("Unlike Datadog, ...").
94
+ - A category of incumbents ("Unlike legacy BI tools, ...").
95
+ - The status quo workflow ("Most teams cobble together Notion docs and Slack threads. We replace both.").
96
+ - An in-house build ("Stop maintaining your internal admin panel.").
97
+
98
+ The fight does not have to be aggressive -- it has to be named. A positioning artifact with no alternative is a positioning artifact with no edge.
99
+
100
+ ### Don't Claim Category Novelty Without Substance
101
+
102
+ "The first X for Y" is a tell that the team has nothing concrete to compare against. If you cannot articulate the alternative you are beating, you have not done positioning work -- you have written a press release. Reject the urge to claim novelty when the actual edge is "we do this one workflow better than the three tools you cobble together today." The latter is a stronger position.
103
+
104
+ ### Mine Customer Language
105
+
106
+ Positioning copy lives or dies by language match. Mine the words your prospects actually use in:
107
+ - Support tickets ("the dashboard takes forever to load")
108
+ - Sales calls ("we currently export to CSV and pivot in Excel")
109
+ - Reddit/HackerNews/X threads ("anyone know how to ___ without Zapier?")
110
+ - Onboarding chats and churn surveys
111
+
112
+ Then use those exact phrases verbatim in the hero subhead, problem agitation, and differentiators. Founder-invented phrases ("seamless orchestration", "unified workflow layer") never appear in the customer corpus and never resonate.
113
+
114
+ ---
115
+
116
+ ## Discipline Gates
117
+
118
+ ### DISC-POSITIONING-01: Four Questions Answered -- Tier 1
119
+
120
+ **Checks:** All four Pierri questions (What is it / Who is it for / What problem / What alternative) are answered above the fold in plain language.
121
+ **Against:** Asset hero block or positioning statement body.
122
+
123
+ #### Evaluation Criteria
124
+
125
+ 1. **Four-question completeness**
126
+ - PASS: All four questions (category, ICP role, problem, named alternative) are answered explicitly and unambiguously in the hero block or positioning statement.
127
+ - WARN: Three of four answered; one is implicit or buried below the fold.
128
+ - FAIL: Two or more of the four questions are unanswered, implicit-only, or buried below the fold.
129
+
130
+ 2. **Plain-language category**
131
+ - PASS: The "what is it" answer uses a category word a non-technical reader recognizes (e.g., "helpdesk software", "Postgres GUI") -- not hype-tag language ("AI-powered platform", "intelligent layer").
132
+ - WARN: Category named but wrapped in hype modifiers ("AI-powered helpdesk for ___").
133
+ - FAIL: No plain category named -- only abstract descriptors ("the platform for ___", "intelligence for ___").
134
+
135
+ ### DISC-POSITIONING-02: Named Alternative -- Tier 1
136
+
137
+ **Checks:** A specific alternative is named that the asset positions against.
138
+ **Against:** Asset content (hero, subhead, differentiators section, or body of positioning statement).
139
+
140
+ #### Evaluation Criteria
141
+
142
+ 1. **Alternative named**
143
+ - PASS: At least one named alternative appears -- a direct competitor by name, a named category of incumbents, the status quo workflow ("spreadsheets", "internal admin panel"), or "doing it manually".
144
+ - WARN: An alternative is implied but never named ("Most tools today...", "Legacy solutions...").
145
+ - FAIL: No alternative referenced anywhere -- the asset describes the product in a vacuum.
146
+
147
+ 2. **Differentiator vs alternative**
148
+ - PASS: For each named alternative, the asset states a concrete reason this product wins -- a feature, capability, or workflow the alternative does not have.
149
+ - WARN: Alternative named but the differentiation is generic ("easier to use", "more modern").
150
+ - FAIL: Alternative named but no differentiation stated, or differentiation is something the alternative also has.
151
+
152
+ ### DISC-POSITIONING-03: ICP Role Specificity -- Tier 1
153
+
154
+ **Checks:** The "who is it for" answer names a role, not a vibe.
155
+ **Against:** Asset hero subhead, ICP statement, or "who it's for" section.
156
+
157
+ #### Evaluation Criteria
158
+
159
+ 1. **Role granularity**
160
+ - PASS: A specific role is named ("Heads of customer support at SaaS companies", "Solo Postgres admins", "Marketing ops managers at Series B+ B2B companies").
161
+ - WARN: A function is named without role specificity ("support teams", "marketing teams") or a role is named without company-stage context.
162
+ - FAIL: The audience is described as "teams", "businesses", "users", "customers", "everyone", or any abstract noun.
163
+
164
+ 2. **Champion vs buyer**
165
+ - PASS: The named role is a practitioner (the person closest to the pain) -- not a generic title like "CEO", "founder", or "decision-maker".
166
+ - WARN: Both practitioner and buyer named, but buyer leads -- diluting champion focus.
167
+ - FAIL: Only buyer titles named (e.g., "for CFOs", "for VPs of Engineering") with no practitioner identified.
168
+
169
+ ### DISC-POSITIONING-04: Specificity Over Cleverness -- Tier 1
170
+
171
+ **Checks:** Concrete, named, numbered language vs abstract or clever language.
172
+ **Against:** Asset hero headline, subhead, and differentiators.
173
+
174
+ #### Evaluation Criteria
175
+
176
+ 1. **Concrete claims**
177
+ - PASS: Hero block contains at least one named tool/competitor/workflow OR at least one specific number (time saved, integrations supported, customers, etc.).
178
+ - WARN: Hero block contains qualitative claims only ("faster", "easier", "better") but is otherwise specific in category and ICP.
179
+ - FAIL: Hero block contains no named entity and no number -- relies entirely on abstract descriptors.
180
+
181
+ 2. **Competitor-swap test**
182
+ - PASS: The hero headline + subhead could NOT be lifted and dropped onto a known competitor's homepage without the swap being obvious.
183
+ - WARN: Headline is generic but subhead is specific enough to fail the swap test.
184
+ - FAIL: The entire hero block could be lifted to two or more competitor sites without anyone noticing the swap.
185
+
186
+ ### DISC-POSITIONING-05: Use-Case or Category Discipline -- Tier 2
187
+
188
+ **Checks:** Positioning is anchored on either a specific use case or a defensible category claim -- not floating between them.
189
+ **Against:** Asset hero block and brief context (company stage, ARR, funding).
190
+
191
+ #### Evaluation Criteria
192
+
193
+ 1. **Anchor choice**
194
+ - PASS: The asset commits to use-case positioning (one painful workflow named end-to-end) OR commits to category positioning (with explicit definition of the category and named incumbents).
195
+ - WARN: The asset hedges between use-case and category framing without committing to either.
196
+ - FAIL: The asset claims category leadership without defining the category, OR lists multiple disjoint use cases without anchoring on one.
197
+
198
+ 2. **Stage-appropriate anchor**
199
+ - PASS: For early-stage (under ~$10M ARR or pre-Series-B context in the brief), the anchor is use-case. For later-stage, category claims are allowed if substantiated.
200
+ - WARN: Late-stage asset uses use-case positioning where category framing is now defensible (advisory, not blocking).
201
+ - FAIL: Early-stage asset claims to be "the category leader" or "the platform for ___" without substantiated category definition.
202
+
203
+ ### DISC-POSITIONING-06: Customer Language Match -- Tier 2
204
+
205
+ **Checks:** Hero subhead and problem agitation use language that matches how prospects actually describe the problem.
206
+ **Against:** Customer language artifacts in the brief (interview quotes, support tickets, sales-call notes) if available; otherwise heuristic check against founder-jargon patterns.
207
+
208
+ #### Evaluation Criteria
209
+
210
+ 1. **Verbatim phrase usage**
211
+ - PASS: At least one phrase from the customer-language corpus appears verbatim or near-verbatim in the hero subhead or problem agitation.
212
+ - WARN: Customer-language corpus exists but no verbatim phrase is used -- copy paraphrases instead.
213
+ - FAIL: No customer-language corpus referenced AND copy contains founder-jargon flag phrases ("seamless", "unified", "next-generation", "intelligent", "orchestrate", "synergy", "empower").
214
+
215
+ 2. **Jargon flag count**
216
+ - PASS: Zero or one founder-jargon flag phrase in the hero block.
217
+ - WARN: Two founder-jargon flag phrases in the hero block.
218
+ - FAIL: Three or more founder-jargon flag phrases in the hero block.
219
+
220
+ ---
221
+
222
+ ## Base Gate Overrides
223
+
224
+ | Base Gate ID | Default Tier | Override Tier | Reason |
225
+ |-------------|-------------|---------------|--------|
226
+ | GATE-01 | Tier 1 (blocking) | Tier 1 (blocking) | Positioning IS the positioning invariant -- this gate carries existential weight here. Override is identity, not tier change. |
227
+ | GATE-10 | Tier 2 (advisory) | Tier 1 (blocking) | Format errors in positioning (missing hero block, malformed headline/subhead pairing, no CTA box) prevent the artifact from functioning as homepage copy at all. |
228
+
229
+ ---
230
+
231
+ ## Format Rules
232
+
233
+ - **One-liner / tagline:** Maximum 12 words. Must contain category word (what it is). No hype modifiers ("AI-powered", "next-generation", "intelligent") in the one-liner.
234
+ - **Hero headline:** Maximum 12 words. Plain-language category required. Answers "what is it?" -- not a promise, not a tagline.
235
+ - **Hero subhead:** Maximum 25 words. Answers "who is it for?" + "what problem does it solve?" in one sentence. Must name a role and a workflow.
236
+ - **Problem agitation paragraph:** 40-80 words. Must use at least one verbatim phrase from the customer-language corpus when available.
237
+ - **Differentiators:** 3-5 bullet points. Each must reference (explicitly or implicitly) the named alternative. Each must be a feature the alternative lacks, not a feature both have.
238
+ - **Positioning statement (long-form):** 60-200 words. Must answer all 4 Pierri questions and name at least one alternative. Structured as: category sentence + ICP sentence + problem sentence + alternative-contrast sentence + outcome sentence.
239
+ - **Manifesto:** 200-600 words. Must lead with the named alternative being beaten (the "fight") in the first paragraph. Backstory, values, and vision follow.
240
+ - **CTA:** Exactly one primary CTA in any positioning artifact that includes a CTA box. Stacked CTAs ("Start free OR Book a demo") fail this rule.
241
+ - **Banned phrases (auto-flag):** "seamless", "unified platform", "next-generation", "intelligent", "AI-powered" (as the lead category descriptor), "orchestrate", "synergy", "empower", "leading", "world-class", "best-in-class", "industry-leading", "the platform for ___" (without category specification), "the first X for Y" (without proof).
242
+
243
+ ---
244
+
245
+ ## Examples
246
+
247
+ ### Good: Use-Case-Anchored Hero (early-stage)
248
+
249
+ ```
250
+ Headline: Send Slack alerts when your Stripe revenue drops
251
+ Subhead: For solo founders running paid products on Stripe -- catch
252
+ churn-driven revenue dips in minutes, not at end-of-month reconciliation.
253
+ Alternative named: "Most founders find out from their accountant 30 days later."
254
+ Differentiators: Webhook-native (no polling). Sub-60-second latency.
255
+ Free for under $10K MRR.
256
+ CTA: Start free
257
+ ```
258
+
259
+ Why it passes: Category implicit-but-clear (Stripe monitoring tool). ICP named (solo founders running paid products on Stripe). Problem named (end-of-month surprise). Alternative named (the accountant / status quo). Differentiators contrast against the alternative.
260
+
261
+ ### Good: Category-Anchored Positioning Statement (later-stage)
262
+
263
+ ```
264
+ Sentry is open-source application monitoring software for software
265
+ engineering teams. Unlike legacy APM tools (Datadog, New Relic) built
266
+ for ops teams to monitor infrastructure, Sentry is built for the
267
+ engineers who write the code -- exposing the exact line, commit, and
268
+ deploy that caused each error. 4 million developers at 100,000+
269
+ organizations ship faster because Sentry tells them what broke and who
270
+ broke it within seconds of deploy.
271
+ ```
272
+
273
+ Why it passes: Category named ("open-source application monitoring software"). ICP named ("software engineering teams" -- then refined to "engineers who write the code"). Alternatives named (Datadog, New Relic). Differentiator stated (built for engineers, not ops). Specificity present (line/commit/deploy; 4M devs, 100K orgs).
274
+
275
+ ### Bad: Generic "Leading Platform" Hero
276
+
277
+ ```
278
+ Headline: The AI-powered platform for modern teams.
279
+ Subhead: Empower your organization with seamless workflows and
280
+ next-generation intelligence.
281
+ CTA: Get started | Book a demo | Learn more
282
+ ```
283
+
284
+ Why it fails: No category named (DISC-POSITIONING-01 FAIL). No ICP role (DISC-POSITIONING-03 FAIL -- "modern teams" is a vibe). No alternative (DISC-POSITIONING-02 FAIL). Banned phrases stacked: "AI-powered", "seamless", "next-generation". Three stacked CTAs (format rule violation). The competitor-swap test fails immediately -- this could be on any of 10,000 SaaS homepages.
285
+
286
+ ### Bad: Clever-But-Vague Tagline
287
+
288
+ ```
289
+ One-liner: "Where work happens."
290
+ ```
291
+
292
+ Why it fails: Clever, memorable, completely uninterpretable. Could belong to Slack, Notion, Asana, Monday, Linear, ClickUp, Coda, Airtable, or your toaster's firmware update screen. Fails DISC-POSITIONING-01 (no category), DISC-POSITIONING-03 (no ICP), DISC-POSITIONING-04 (zero specificity).
293
+
294
+ ---
295
+
296
+ ## Anti-Patterns
297
+
298
+ 1. **Category vagueness via hype modifier.** Hiding the actual category behind "AI-powered ___", "intelligent ___", "next-generation ___". The hype tag is doing the work the category word should do. Drop the modifier and see if the sentence still makes sense -- if it doesn't, the category was never named.
299
+
300
+ 2. **ICP as vibe.** Writing for "teams", "businesses", "modern companies", or "everyone who cares about ___". Pierri's rule: if you cannot name the role and the company stage in five words, the ICP is wrong. The right ICP makes 90% of readers bounce immediately -- and that is the point.
301
+
302
+ 3. **"We help X do Y" with no how.** "We help support teams resolve tickets faster" is a sentence that survives no scrutiny. Replace with the specific mechanism: "We auto-route tickets to the right agent based on past resolution history." Specificity > formula.
303
+
304
+ 4. **First-X-for-Y without proof.** "The first AI-native CRM for ___" is a flag for clichéd novelty-claiming. If the actual edge is "we do this one workflow better than the three tools you cobble together today", say that instead -- it's a stronger position.
305
+
306
+ 5. **Founder writing for the founder.** Copy that uses internal product vocabulary ("our orchestration layer", "the unified data plane") because that's how the team talks. The champion buyer does not use those words. Mine the customer corpus, not the internal Slack.
307
+
308
+ 6. **Strategy decks that don't survive the homepage.** A 47-slide positioning deck that says one thing while the homepage says another. The homepage wins -- always. If the deck disagrees with the homepage, the deck is wrong. Rewrite the deck.
309
+
310
+ 7. **Generic social proof.** "Trusted by leading teams" with no logos, no quotes, no customer names. Replace with specific logos AND a one-sentence outcome quote per logo when possible.
311
+
312
+ 8. **No named alternative.** Positioning the product in a vacuum, as if nothing else exists. Even if the alternative is "spreadsheets" or "doing it manually" or "an internal Python script someone wrote in 2019", name it. The fight defines the edge.
313
+
314
+ 9. **Stacked CTAs.** "Start free OR Book a demo OR Read docs OR Watch the keynote" -- the reader picks none. One primary CTA per page, per artifact. The rest go in the nav.
315
+
316
+ 10. **Differentiator that's actually table stakes.** Listing "easy to use" or "modern UI" or "fast" as a differentiator when every competitor also claims those. A real differentiator is a feature competitors verifiably lack -- check before you ship.
317
+
318
+ ---
319
+
320
+ ## Metrics
321
+
322
+ Track these post-ship to verify the positioning artifact is doing its job:
323
+
324
+ - **5-second test pass rate** -- Show the homepage to 5+ target-ICP testers for 5 seconds each. Ask: "What is this? Who is it for? What problem does it solve?" Target: 4 of 5 correctly identify all three. Measure via UserTesting, Wynter, or in-network DM.
325
+ - **Homepage clarity score (Wynter or equivalent)** -- 1-5 Likert per Pierri's 4 questions, scored by 20+ target-ICP respondents. Target: average ≥ 4.0 per question.
326
+ - **Brand search lift** -- Google Search Console queries that include your brand name, measured 30 / 60 / 90 days after positioning ship. Rising brand search = positioning is sticky and shareable. Target: +20% in 90 days for early-stage products.
327
+ - **Inbound demo/signup conversion rate from organic homepage traffic** -- The down-funnel proof that the positioning attracts the right reader and converts them. Compare 30-day cohort pre-ship vs post-ship.
328
+ - **Sales-call qualification rate** -- Percentage of inbound demos that match the named ICP role. Rising rate = positioning is filtering correctly. Falling rate = positioning is attracting the wrong audience.
329
+ - **"What do you do?" elevator-test response** -- Ask 5 customers to describe what you do in one sentence, unprompted. Compare to your positioning statement. Match = positioning has propagated. Drift = positioning has not landed.
330
+ - **Time-to-first-meaningful-paint on homepage clarity** -- Heatmap and scroll-depth data on the hero block. If users scroll past the hero in under 3 seconds without engaging, the headline-subhead pair is failing the 4-question test.
331
+
332
+ ---
333
+
334
+ ## Sources
335
+
336
+ - [Anthony Pierri / FletchPMM -- agency homepage](https://www.fletchpmm.com/) -- The canonical home of Homepage-First Positioning and the 7-box canvas.
337
+ - [Leah Tharin podcast with Anthony Pierri -- "Positioning your product"](https://www.leahtharin.com/p/54-anthony-pierri-positioning-your) -- Long-form interview covering the 4 questions, champion-centric positioning, and the use-case vs category decision.
338
+ - [Exit Five -- "B2B positioning: a guide to saying specific"](https://www.exitfive.com/articles/b2b-positioning-guide-to-saying-specific) -- The "saying-specific" principle in Pierri's own words.
339
+ - [Userpilot / Medium -- "How to rewrite your homepage with sharper positioning"](https://userpilot.medium.com/how-to-rewrite-your-homepage-with-sharper-positioning-messaging-by-anthony-pierri-78d65eac5ff9) -- The 7-box canvas walkthrough.
340
+ - [The B2B Playbook podcast Ep.192 -- "Why most B2B positioning fails"](https://podscan.fm/podcasts/the-b2b-playbook/episodes/192-why-most-b2b-positioning-fails-and-how-to-fix-yours-anthony-pierri) -- The 4 questions in interview form.