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,164 @@
1
+ # Playwright MCP Setup — Reference
2
+
3
+ **Purpose:** Step-by-step install of the official Microsoft Playwright MCP server plus the Chrome/Edge extension bridge for takeToMarket skills (competitor scan fallback, LinkedIn/Twitter author scraping, landing/pSEO verification).
4
+
5
+ **Verified:** 2026-05-18 against `@playwright/mcp@0.0.75` and "Playwright Extension" v0.2.1 in the Chrome Web Store.
6
+
7
+ ## What is Playwright MCP
8
+
9
+ Playwright is a browser automation library. The Playwright MCP server (Model Context Protocol) wraps it so AI agents can drive a real browser. Key capabilities:
10
+ - Visit any URL and read the rendered DOM as a structured accessibility snapshot (no vision model required).
11
+ - Take screenshots at any viewport size.
12
+ - Interact: click, type, scroll, hover, drag, switch tabs, press keys.
13
+ - **Connect to the user's already-running Chrome/Edge browser** via the Playwright Extension — critical for auth-gated sites like LinkedIn, X/Twitter, and any site behind SSO/2FA. The LLM never sees your credentials; it reuses an existing logged-in tab you pick.
14
+
15
+ Source of truth: <https://github.com/microsoft/playwright-mcp> and <https://playwright.dev/mcp/configuration/browser-extension>.
16
+
17
+ ## Prerequisites
18
+
19
+ - **Node.js 18 or newer** (required by `@playwright/mcp`, enforced via `engines.node`).
20
+ - **Chrome or Edge** (the extension bridge is Chromium-only — Firefox and WebKit work for headless mode but not for the logged-in browser bridge).
21
+ - An MCP-aware runtime: Claude Code, Codex CLI, or Cursor.
22
+
23
+ ## Installation
24
+
25
+ ### 1. Install the MCP server
26
+
27
+ The server is the npm package `@playwright/mcp`. You normally do **not** install it globally — runtimes invoke it via `npx`, which fetches and caches it on first run. To pre-warm the cache and confirm Node finds it:
28
+
29
+ ```bash
30
+ node -v # must print v18.x or higher
31
+ npm view @playwright/mcp version # should print 0.0.75 (or later)
32
+ npx -y @playwright/mcp@0.0.75 --help # pre-warm cache + confirm version pin resolves
33
+ ```
34
+
35
+ ### 2. Install the Chrome extension bridge
36
+
37
+ The extension is published in the Chrome Web Store as **"Playwright Extension"** (publisher: Playwright Team / Microsoft, ID `mmlmfjhmonkocbjadbfplnigmagldckm`). Note: third-party listings sometimes call it "Playwright MCP Bridge" — the official name is just **Playwright Extension**.
38
+
39
+ Install path (recommended):
40
+
41
+ 1. Open <https://chromewebstore.google.com/detail/playwright-extension/mmlmfjhmonkocbjadbfplnigmagldckm> in Chrome or Edge.
42
+ 2. Click **Add to Chrome** (or **Add to Edge**).
43
+ 3. Pin it to the toolbar so the connection prompt is visible.
44
+ 4. Log into the sites you plan to scrape (e.g., LinkedIn, X/Twitter) in normal tabs — the bridge reuses those sessions.
45
+
46
+ Sideload path (corporate machines with Chrome Web Store blocked):
47
+
48
+ 1. Clone or download the latest tag from <https://github.com/microsoft/playwright-mcp>.
49
+ 2. Build the extension per the repo's `extension/` directory README, or grab the prebuilt `.zip` from the GitHub release matching your `@playwright/mcp` version.
50
+ 3. Open `chrome://extensions`, toggle **Developer mode** on, click **Load unpacked**, and select the unzipped extension directory.
51
+
52
+ Either way, the extension only does anything when an MCP server is launched with `--extension` (see Step 3).
53
+
54
+ ### 3. Configure runtime MCP settings
55
+
56
+ The flag that connects the MCP server to the extension is `--extension`. Without it, the server spawns its own headless browser and ignores your logged-in sessions.
57
+
58
+ **Claude Code (recommended: CLI command):**
59
+
60
+ ```bash
61
+ claude mcp add playwright -- npx -y @playwright/mcp@0.0.75 --extension
62
+ ```
63
+
64
+ This writes the entry to `~/.claude.json` (or `~/.claude/settings.json` depending on Claude Code version). Equivalent manual JSON if you prefer to edit by hand:
65
+
66
+ ```json
67
+ {
68
+ "mcpServers": {
69
+ "playwright": {
70
+ "command": "npx",
71
+ "args": ["-y", "@playwright/mcp@0.0.75", "--extension"]
72
+ }
73
+ }
74
+ }
75
+ ```
76
+
77
+ Drop `--extension` from `args` if you want headless mode only (faster for non-auth-gated work like landing/pSEO Lighthouse checks).
78
+
79
+ **Codex CLI (`~/.codex/config.toml`):**
80
+
81
+ ```toml
82
+ [mcp_servers.playwright]
83
+ command = "npx"
84
+ args = ["-y", "@playwright/mcp@0.0.75", "--extension"]
85
+ ```
86
+
87
+ Or via Codex CLI:
88
+
89
+ ```bash
90
+ codex mcp add playwright npx -- -y "@playwright/mcp@0.0.75" --extension
91
+ ```
92
+
93
+ **Cursor (`~/.cursor/mcp.json` for global, or `.cursor/mcp.json` per-project):**
94
+
95
+ ```json
96
+ {
97
+ "mcpServers": {
98
+ "playwright": {
99
+ "command": "npx",
100
+ "args": ["-y", "@playwright/mcp@0.0.75", "--extension"]
101
+ }
102
+ }
103
+ }
104
+ ```
105
+
106
+ Cursor also supports a one-click install deeplink from the Playwright MCP README (`cursor://anysphere.cursor-deeplink/mcp/install?...`) — use it if you prefer not to hand-edit JSON.
107
+
108
+ ### 4. Test connection
109
+
110
+ Restart the runtime so it picks up the new MCP server, then in a takeToMarket-enabled session run:
111
+
112
+ ```
113
+ /ttm-playwright-setup
114
+ ```
115
+
116
+ The skill performs a sanity test: opens `https://example.com`, takes a screenshot, and reports the page title. First run with `--extension` will pop up a Playwright Extension prompt in your browser asking which tab to connect to — pick one, and the server proceeds.
117
+
118
+ Manual sanity check without the skill:
119
+
120
+ ```bash
121
+ npx -y @playwright/mcp@0.0.75 --extension --port 8931
122
+ # Server prints: "Listening on http://localhost:8931/sse"
123
+ # Then in the MCP runtime call the `browser_navigate` tool with url=https://example.com
124
+ ```
125
+
126
+ ## Capabilities unlocked
127
+
128
+ After setup, the following skills can use Playwright:
129
+ - `/ttm-linkedin-post` — scrape author profiles for mimic style (requires `--extension` + logged-in LinkedIn tab).
130
+ - `/ttm-competitor-scan` — render JS-heavy competitor sites that block plain `fetch`.
131
+ - `/ttm-landing` and `/ttm-pseo` quality gates — Lighthouse audits, mobile screenshots, visual diff (works in headless mode; `--extension` not required).
132
+ - (Future v2.4.0) `/ttm-twitter-post`, `/ttm-linkedin-engage` — both will require `--extension`.
133
+
134
+ ## Useful flags
135
+
136
+ | Flag | Purpose |
137
+ |------|---------|
138
+ | `--extension` | Connect to a running Chrome/Edge instance via the Playwright Extension. Required for auth-gated scraping. |
139
+ | `--headless` | Run with no visible window (faster, no extension support). |
140
+ | `--browser <chrome\|firefox\|webkit\|msedge>` | Pick the browser engine. Only `chrome` and `msedge` work with `--extension`. |
141
+ | `--isolated` | Use a throwaway profile per session; storage state is discarded on close. |
142
+ | `--user-data-dir <path>` | Use a persistent profile directory. Different workspaces auto-namespace via hash. |
143
+ | `--port <n>` | Run as a standalone SSE/HTTP server instead of stdio (useful for debugging). |
144
+
145
+ Full flag list: `npx -y @playwright/mcp@0.0.75 --help`.
146
+
147
+ ## Troubleshooting
148
+
149
+ - **"No tab selected" or extension popup never appears.** Make sure the Playwright Extension is enabled in `chrome://extensions` and pinned. The MCP server must be started with `--extension`; without that flag, the extension stays idle.
150
+ - **`Cannot find module '@playwright/mcp'` or `npx` hangs.** Node version is too old. Run `node -v` — must be `v18.x` or newer. Upgrade via `nvm install 20` and retry.
151
+ - **MCP server doesn't show up in Claude Code.** Confirm the entry exists: `claude mcp list`. If you edited JSON directly, fully quit and relaunch Claude Code — settings are read once at startup.
152
+ - **Codex doesn't load `~/.codex/config.toml`.** Confirm the file path with `codex mcp list`. Some Codex builds use `~/.config/codex/config.toml` on Linux.
153
+ - **Cursor "MCP server failed to start".** Cursor needs an absolute path to `node`/`npx` on macOS if launched from the Dock. Replace `"command": "npx"` with the full output of `which npx` (e.g., `/Users/you/.nvm/versions/node/v20.10.0/bin/npx`).
154
+ - **Logged-in scrape returns the login page anyway.** The bridge connects to the **tab you picked**, not all tabs. Pick a tab that's already authenticated on the target domain. Refresh that tab once before reconnecting if cookies feel stale.
155
+ - **LinkedIn / X rate-limits or shows a CAPTCHA.** You're driving the user's real session — the same rate limits and bot-detection apply. Slow down requests, throttle to one profile every few seconds, and never run unattended against these sites.
156
+ - **Headless mode works but `--extension` doesn't.** Firefox/WebKit don't support the extension bridge. Force Chrome with `--browser chrome` or `--browser msedge`.
157
+
158
+ ## References
159
+
160
+ - Playwright MCP repo: <https://github.com/microsoft/playwright-mcp>
161
+ - Browser extension docs: <https://playwright.dev/mcp/configuration/browser-extension>
162
+ - Chrome Web Store listing: <https://chromewebstore.google.com/detail/playwright-extension/mmlmfjhmonkocbjadbfplnigmagldckm>
163
+ - npm package: <https://www.npmjs.com/package/@playwright/mcp>
164
+ - Logged-in scraping walkthrough (Debbie O'Brien, Microsoft): <https://dev.to/debs_obrien/testing-in-a-logged-in-state-with-the-playwright-mcp-browser-extension-4cmg>
@@ -69,7 +69,7 @@ Example: 5 assets, 3 WARN findings, 1 FAIL finding = 4 / 15 * 100 = 26.7% aggreg
69
69
 
70
70
  ## Trend Comparison Logic
71
71
 
72
- When a prior audit entry exists in `.marketing/DRIFT-LOG.md`:
72
+ When a prior audit entry exists in `.taketomarket/DRIFT-LOG.md`:
73
73
 
74
74
  1. Find the most recent row in the Audit Trail table where Event = `audit`
75
75
  2. Parse the Details column to extract the prior aggregate drift percentage
@@ -89,7 +89,7 @@ If no prior audit entry exists: display "First audit -- no trend data available.
89
89
 
90
90
  For each campaign in the audit window:
91
91
 
92
- 1. Read `.marketing/CAMPAIGNS/<slug>/DEVIATIONS.md` if it exists
92
+ 1. Read `.taketomarket/CAMPAIGNS/<slug>/DEVIATIONS.md` if it exists
93
93
  2. Filter for rows where Gate = `positioning_drift` (GATE-01 deviations)
94
94
  3. These are assets where drift was previously detected but explicitly accepted by the user
95
95
  4. Include in the "Accepted Deviations" section of the report
@@ -0,0 +1,56 @@
1
+ # pSEO Page Anatomy — Reference (Shared)
2
+
3
+ **Purpose:** Optimal structure shared by all pSEO templates (blog, use-case, comparison, alternative). Per-template anatomy + content playbook files extend this.
4
+
5
+ ## Universal pSEO structure
6
+
7
+ ### Above the fold
8
+ 1. **Breadcrumbs** — visible + Schema.org `BreadcrumbList`.
9
+ 2. **H1** — descriptive, includes target keyword, NOT clickbait.
10
+ 3. **TL;DR / Answer block** — 2-3 sentence direct answer (this is what gets quoted by AI engines).
11
+ 4. **Author + date + read-time** — trust signals.
12
+
13
+ ### Body
14
+ 5. **Table of contents** — for posts >800 words. Anchor links to H2s.
15
+ 6. **Hierarchical H2/H3 sections** — one H1, multiple H2s, optional H3s.
16
+ 7. **Inline definitions** — first mention of a term: `<dfn>` wrapped or bold + definition.
17
+ 8. **Citations** — link to authoritative sources, include `cite=""` on quotes.
18
+ 9. **Visual aids** — screenshots, diagrams, tables. Each has `<figure>` + `<figcaption>`.
19
+
20
+ ### Conversion + related
21
+ 10. **CTA block** — mid-content, contextually relevant to the article topic.
22
+ 11. **FAQ section** — 4-8 questions with Schema.org `FAQPage` markup.
23
+ 12. **Related pages** — links to 3-5 same-template or cross-template pages.
24
+
25
+ ### Footer block (page-specific)
26
+ 13. **About the author** (Person Schema if used).
27
+ 14. **Updated-at** stamp.
28
+ 15. **Comment count** if engagement is part of the funnel.
29
+
30
+ ## AI citability signals
31
+
32
+ 1. **Answer-first** — TL;DR block is the most quotable; AI engines extract this.
33
+ 2. **Structured data** — Article + FAQPage + BreadcrumbList Schema.org per page.
34
+ 3. **Definitions** — `<dfn>` and structured "X is Y" sentences.
35
+ 4. **Lists, not prose dumps** — AI engines prefer parseable lists for enumerable facts.
36
+ 5. **Citations + sources** — pages with sources get cited more.
37
+ 6. **Update frequency** — pages updated more recently get cited more often.
38
+
39
+ ## SEO signals
40
+
41
+ - `<title>` ≤ 60 chars, includes target keyword.
42
+ - `<meta description>` 140-160 chars, written for SERP click-through.
43
+ - One H1.
44
+ - URL slug matches keyword (lowercase, hyphenated).
45
+ - Internal links: minimum 3 outbound to related pSEO pages.
46
+ - External links: minimum 1-2 authoritative outbound for "linked authority" signal.
47
+
48
+ ## llms.txt
49
+
50
+ Site root must have `/llms.txt` listing all pSEO routes with brief descriptions. Generated by `/ttm-pseo` and updated on each new route.
51
+
52
+ ## Performance
53
+
54
+ - LCP < 2.5s (server-rendered HTML helps; SSG even better).
55
+ - CLS < 0.1 (reserve image dimensions, no layout-shifting ads).
56
+ - INP < 200ms.
@@ -0,0 +1,31 @@
1
+ # Alternative Anatomy
2
+
3
+ For pages at `/alternatives/[product-slug]` (e.g., `/alternatives/competitor-a`). Targets users explicitly searching for alternatives.
4
+
5
+ ## Section structure
6
+ 1. Hero: H1 "Looking for an alternative to [Competitor]?"
7
+ 2. TL;DR: 2-3 sentences naming this product as the alternative.
8
+ 3. Why people leave [Competitor] (3-5 bullets — customer-derived if possible).
9
+ 4. Why [Product] is the alternative (3-5 pillars).
10
+ 5. Feature parity table.
11
+ 6. Pricing comparison.
12
+ 7. Migration guide (concrete steps).
13
+ 8. Customer quotes from switchers.
14
+ 9. FAQ.
15
+ 10. CTA.
16
+
17
+ ## URL pattern
18
+ `/alternatives/[product-slug]`
19
+
20
+ ## Schema.org
21
+ - `WebPage` schema.
22
+ - `Product` schemas.
23
+ - `FAQPage`.
24
+
25
+ ## Length
26
+ 800-1500 words.
27
+
28
+ ## Difference from comparison page
29
+ - Alternative pages target intent "alternatives to X". Direct funnel.
30
+ - Comparison pages target intent "X vs Y". Research funnel.
31
+ - Alternative pages can be more opinionated. Comparison pages must be balanced.
@@ -0,0 +1,32 @@
1
+ # Alternative Content Playbook
2
+
3
+ ## Hero
4
+
5
+ Direct: "Looking for an alternative to [Competitor]? [Product] is built for [specific JTBD]."
6
+
7
+ ## Why people leave [Competitor]
8
+
9
+ 3-5 reasons. Source from:
10
+ - G2/Capterra negative reviews of competitor.
11
+ - Reddit/HN threads.
12
+ - ICP.md customer-language library entries that complain about competitor.
13
+
14
+ Be specific. "Pricing got too expensive" is OK. "Bad product" is not.
15
+
16
+ ## Migration guide
17
+
18
+ Step 1: Export from [Competitor].
19
+ Step 2: Import to [Product].
20
+ Step 3: Verify [specific things].
21
+ Step 4: Cancel [Competitor].
22
+
23
+ Include code snippets, screenshots, links to docs.
24
+
25
+ ## Customer quotes
26
+
27
+ Switchers' words are gold. Highest-converting content on these pages.
28
+
29
+ ## CTAs
30
+
31
+ Primary: "Migrate to [Product] free for 30 days".
32
+ Secondary: "Read migration docs".
@@ -0,0 +1,28 @@
1
+ # Blog Anatomy
2
+
3
+ Extends `references/pseo-page-anatomy.md`. Specific structure for blog posts under `/blog/[slug]`.
4
+
5
+ ## Section structure
6
+ 1. Hero with H1 (keyword-rich descriptive title).
7
+ 2. TL;DR (2-3 sentences).
8
+ 3. Author + date + tags.
9
+ 4. Intro paragraph (hook + promise + scope).
10
+ 5. Section H2s — typically 4-7 sections.
11
+ 6. Code examples or visuals where applicable.
12
+ 7. Conclusion with key takeaways (3-5 bullets).
13
+ 8. FAQ section (4-6 questions).
14
+ 9. Related posts (3-5 cards).
15
+
16
+ ## URL pattern
17
+ `/blog/[slug]` — slug derived from H1 lowercased + hyphenated.
18
+
19
+ ## Schema.org
20
+ - `Article` schema on page.
21
+ - `BreadcrumbList`.
22
+ - `FAQPage` on FAQ section.
23
+ - `Person` for author (links to author profile page).
24
+
25
+ ## Length
26
+ - Default: 1200-2000 words.
27
+ - Short-form OK if topic warrants (e.g., changelog notes): 400-800.
28
+ - Long-form OK for definitive guides: 3000-5000.
@@ -0,0 +1,36 @@
1
+ # Blog Content Playbook
2
+
3
+ How to WRITE a blog post that the AI engines will cite and humans will read.
4
+
5
+ ## Hook (first 50 words)
6
+
7
+ Three patterns:
8
+ 1. **Surprising fact:** "X is 10x faster than Y. Here's why nobody talks about it."
9
+ 2. **Problem framing:** "Every time I tried to do X, I hit the same wall. Here's what fixed it."
10
+ 3. **Counter-intuitive claim:** "You should not use [common tool]. Use [alternative]. Here's the reasoning."
11
+
12
+ Avoid: "In today's fast-paced world…" / "Have you ever wondered…" — both flagged by humanizer.
13
+
14
+ ## TL;DR
15
+
16
+ 2-3 sentences that, if extracted alone, would answer the implicit question. The AI engines will quote this verbatim.
17
+
18
+ ## Body
19
+
20
+ Per H2 section:
21
+ - One sentence stating the claim.
22
+ - 1-3 paragraphs supporting it.
23
+ - One example, code snippet, or visual.
24
+ - Optional: counter-example or anti-pattern.
25
+
26
+ ## Closing
27
+
28
+ - "Key takeaways:" bullet list (3-5 items).
29
+ - One paragraph synthesizing the post's perspective.
30
+ - CTA: link to product OR link to related post.
31
+
32
+ ## Banned moves
33
+ - Generic intros ("Let's dive into…").
34
+ - Padding sentences ("As we've seen, X is important.").
35
+ - Em-dash overuse (max 1 per paragraph).
36
+ - Tricolons ("X, Y, and Z" structure used more than once per post — see humanizer-patterns.md rule of three).
@@ -0,0 +1,29 @@
1
+ # Comparison Anatomy
2
+
3
+ For pages at `/vs/[competitor-slug]` (e.g., `/vs/competitor-a`).
4
+
5
+ ## Section structure
6
+ 1. Hero: H1 "[Product] vs [Competitor]" + neutral subhead + primary CTA.
7
+ 2. TL;DR: 2-3 sentences fair summary.
8
+ 3. At-a-glance comparison table (10-15 rows of feature comparisons).
9
+ 4. When [Product] wins (use cases where you're better).
10
+ 5. When [Competitor] wins (use cases where they're better — honesty wins).
11
+ 6. Pricing comparison.
12
+ 7. Migration guide (1-2 paragraphs if relevant).
13
+ 8. Customer quotes (if you have any from switchers).
14
+ 9. FAQ comparing the two.
15
+ 10. Final CTA: try [Product] free.
16
+
17
+ ## URL pattern
18
+ `/vs/[competitor-slug]`
19
+
20
+ ## Schema.org
21
+ - `WebPage` schema.
22
+ - `Product` schema for both products.
23
+ - `FAQPage` on FAQ.
24
+
25
+ ## Length
26
+ 800-1500 words.
27
+
28
+ ## Honesty principle
29
+ Comparison pages that are ONE-SIDED don't rank or convert. Be honest about competitor strengths. Trust signal.
@@ -0,0 +1,35 @@
1
+ # Comparison Content Playbook
2
+
3
+ ## Hero
4
+
5
+ H1: "[Product] vs [Competitor]" — keep it neutral, no superlatives.
6
+
7
+ ## TL;DR
8
+
9
+ 3 sentences:
10
+ 1. Who [Product] is best for.
11
+ 2. Who [Competitor] is best for.
12
+ 3. The single biggest differentiator.
13
+
14
+ ## Table
15
+
16
+ Rows: pricing, features, integrations, support, ICP fit, ease of use, deploy time.
17
+ Columns: [Product] | [Competitor].
18
+ Use ✓ / ✗ / partial / context.
19
+
20
+ ## When [Product] wins
21
+
22
+ 3-5 bullets. Specific use cases tied to differentiator from POSITIONING.md.
23
+
24
+ ## When [Competitor] wins
25
+
26
+ 3-5 bullets. HONEST. If they have a feature you don't, say so. Trust > vanity.
27
+
28
+ ## FAQ
29
+
30
+ Common questions: "Should I migrate?" "Can I use both?" "Is pricing comparable?"
31
+
32
+ ## Banned moves
33
+ - Calling competitor "outdated" or "legacy" unless factually true with citation.
34
+ - Loaded language.
35
+ - Inventing competitor weaknesses.
@@ -0,0 +1,28 @@
1
+ # Use-Case Anatomy
2
+
3
+ Extends pseo-page-anatomy.md. For pages at `/use-cases/[slug]` (e.g., `/use-cases/onboarding-emails`, `/use-cases/api-monitoring`).
4
+
5
+ ## Section structure
6
+ 1. Hero: H1 ("[Product] for [Use Case]"), tagline, primary CTA, hero visual showing the use case.
7
+ 2. TL;DR: who this is for + what they'll get.
8
+ 3. The problem (1-2 paragraphs).
9
+ 4. Why typical solutions fail (1-2 paragraphs).
10
+ 5. How [Product] solves it (3-5 features, screenshots).
11
+ 6. Step-by-step walkthrough (numbered, with screenshots).
12
+ 7. Customer proof (1-2 testimonials specific to this use case).
13
+ 8. ROI / outcome (specific numbers if available).
14
+ 9. Pricing CTA + linked alternatives.
15
+ 10. FAQ (use-case-specific questions).
16
+ 11. Related use cases (3-4 cards).
17
+
18
+ ## URL pattern
19
+ `/use-cases/[slug]`
20
+
21
+ ## Schema.org
22
+ - `Article` or `WebPage` schema.
23
+ - `Product` schema if pricing shown.
24
+ - `FAQPage` on FAQ.
25
+ - `BreadcrumbList`.
26
+
27
+ ## Length
28
+ 600-1200 words. Use case pages convert; they don't need to be long.
@@ -0,0 +1,30 @@
1
+ # Use-Case Content Playbook
2
+
3
+ ## Hero
4
+
5
+ H1 pattern: "[Product] for [Use Case]" — e.g., "Linear for product roadmaps".
6
+ Subhead: outcome promise. "Ship better roadmaps in 30 minutes per week."
7
+
8
+ ## Problem section
9
+
10
+ Use customer language verbatim from ICP.md customer-language library if available. Engineers respond to specific pain, not abstract pain. "Your team forgets what shipped last sprint" beats "Lack of organizational visibility".
11
+
12
+ ## Why typical solutions fail
13
+
14
+ Name the typical alternatives (1-3) and the specific failure mode of each. This is implicit comparison without trash-talking.
15
+
16
+ ## How [Product] solves it
17
+
18
+ 3-5 feature pillars. Each pillar: H3, one paragraph, one screenshot/animation.
19
+
20
+ ## Walkthrough
21
+
22
+ Numbered list with screenshots. Engineers want to see the actual UI before signing up. 5-7 steps maximum.
23
+
24
+ ## Outcome / ROI
25
+
26
+ Specific number from a customer if you have it. Otherwise, a frame: "[Workflow X] used to take [Y]. Now it takes [Z]."
27
+
28
+ ## CTAs
29
+
30
+ Primary in hero + final. Secondary as inline links to /pricing or /docs.
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: ttm-101
3
+ description: >
4
+ Marketing fundamentals for engineers and developerneurs. Engineer-analogy-heavy
5
+ tour: positioning, ICP, channels, funnels, AEO, lifecycle. Run once to get
6
+ oriented. Section-by-section runnable with /ttm-101 --section <name>.
7
+ disable-model-invocation: true
8
+ allowed-tools: Read AskUserQuestion
9
+ ---
10
+
11
+ # /ttm-101
12
+
13
+ Read and follow the workflow at `${CLAUDE_PLUGIN_ROOT}/workflows/education/ttm-101.md`.
14
+
15
+ ## Flags
16
+
17
+ - `--section <name>` — show one section only.
18
+ - `--all` — print all sections (default).
19
+
20
+ Sections: positioning, icp, channels, funnel, aeo-vs-seo, lifecycle, invariants.
21
+
22
+ ## Next steps
23
+
24
+ See `${CLAUDE_PLUGIN_ROOT}/templates/next-step-footer.md`.
25
+ <!-- next-step-footer -->
@@ -1,20 +1,25 @@
1
1
  ---
2
2
  name: ttm-aeo-check
3
3
  description: >
4
- Check citation status across AI engines for a query. Use to assess how
5
- your content appears in AI-generated answers.
6
- argument-hint: "[query]"
4
+ [DEPRECATED v2.3.0 -> removed v2.4.0] Merged into /ttm-seo aeo.
7
5
  disable-model-invocation: true
8
- allowed-tools: Read Write Bash Glob Grep
6
+ allowed-tools: Read
9
7
  ---
10
8
 
11
- # /ttm-aeo-check
9
+ # /ttm-aeo-check (DEPRECATED)
12
10
 
13
- Read and follow the workflow at `${CLAUDE_PLUGIN_ROOT}/workflows/discipline/aeo-check.md`
11
+ Merged into `/ttm-seo aeo` in v2.3.0.
14
12
 
15
- This command will:
16
- - Check how AI engines cite your content for the given query
17
- - Analyze citation quality and positioning accuracy
18
- - Compare against competitor citations
19
- - Report AEO (Answer Engine Optimization) score
20
- - Suggest content improvements for better AI engine visibility
13
+ Print:
14
+
15
+ ```
16
+ ⚠️ /ttm-aeo-check is deprecated.
17
+ Use /ttm-seo aeo <query> instead. Running /ttm-seo aeo now...
18
+ ```
19
+
20
+ Invoke `Skill` tool with `skill: ttm-seo`, args: `aeo` plus any user-passed args.
21
+
22
+ ## Next steps
23
+
24
+ See `${CLAUDE_PLUGIN_ROOT}/templates/next-step-footer.md`.
25
+ <!-- next-step-footer -->
@@ -17,3 +17,8 @@ This command will:
17
17
  - Include approved proof points and claims from BRAND.md
18
18
  - Package UTM-tagged links and tracking guidelines
19
19
  - Produce a complete creative kit document
20
+
21
+ ## Next steps
22
+
23
+ See `${CLAUDE_PLUGIN_ROOT}/templates/next-step-footer.md`.
24
+ <!-- next-step-footer -->
@@ -11,3 +11,8 @@ allowed-tools: Read Write Bash Glob AskUserQuestion
11
11
  # /ttm-archive
12
12
 
13
13
  Read and follow the workflow at `${CLAUDE_PLUGIN_ROOT}/workflows/utility/archive.md`
14
+
15
+ ## Next steps
16
+
17
+ See `${CLAUDE_PLUGIN_ROOT}/templates/next-step-footer.md`.
18
+ <!-- next-step-footer -->
@@ -17,3 +17,8 @@ This command will:
17
17
  - Deprecate expired or outdated brand claims
18
18
  - Update voice and tone guidelines if needed
19
19
  - Validate changes against POSITIONING.md invariant
20
+
21
+ ## Next steps
22
+
23
+ See `${CLAUDE_PLUGIN_ROOT}/templates/next-step-footer.md`.
24
+ <!-- next-step-footer -->
@@ -12,3 +12,8 @@ allowed-tools: Read Write Bash Glob Grep AskUserQuestion
12
12
  # /ttm-brief
13
13
 
14
14
  Read and follow the workflow at `${CLAUDE_PLUGIN_ROOT}/workflows/lifecycle/brief.md`
15
+
16
+ ## Next steps
17
+
18
+ See `${CLAUDE_PLUGIN_ROOT}/templates/next-step-footer.md`.
19
+ <!-- next-step-footer -->
@@ -17,3 +17,8 @@ This command will:
17
17
  - Update COMPETITORS.md with fresh intelligence
18
18
  - Flag competitive threats and opportunities
19
19
  - Inform upcoming campaign briefs with competitive context
20
+
21
+ ## Next steps
22
+
23
+ See `${CLAUDE_PLUGIN_ROOT}/templates/next-step-footer.md`.
24
+ <!-- next-step-footer -->
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: ttm-deploy
3
+ description: >
4
+ Deploy your /ttm-landing site to Vercel. Auto-detects best path: git-push to
5
+ Vercel-connected repo (preferred), vercel CLI, or VERCEL_TOKEN env. Walks
6
+ you through setup if no path is configured.
7
+ disable-model-invocation: true
8
+ allowed-tools: Read Write Bash AskUserQuestion
9
+ ---
10
+
11
+ # /ttm-deploy
12
+
13
+ Read and follow the workflow at `${CLAUDE_PLUGIN_ROOT}/workflows/site/deploy.md`.
14
+
15
+ ## Flags
16
+
17
+ - `--prod` — deploy to production. Default is preview.
18
+
19
+ ## Next steps
20
+
21
+ See `${CLAUDE_PLUGIN_ROOT}/templates/next-step-footer.md`.
22
+ <!-- next-step-footer -->
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: ttm-discover
3
+ description: >
4
+ Discover phase: perform market and audience research including SERP analysis,
5
+ competitor content audit, and ambient narrative mapping. Use after creating a campaign.
6
+ disable-model-invocation: true
7
+ allowed-tools: Read Write Bash Glob Grep AskUserQuestion WebSearch WebFetch
8
+ ---
9
+
10
+ # /ttm-discover
11
+
12
+ Read and follow the workflow at `${CLAUDE_PLUGIN_ROOT}/workflows/lifecycle/discover.md`.
13
+
14
+ ## Next steps
15
+
16
+ See `${CLAUDE_PLUGIN_ROOT}/templates/next-step-footer.md`.
17
+ <!-- next-step-footer -->