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
@@ -153,3 +153,25 @@ Relevant commands for warn follow-ups:
153
153
  - Warning flag format: Add `<!-- SPECIFICITY_WARNING: [field] accepted after 2 retries -->` comment in generated file
154
154
  - After accepting with warning, continue to next question (do not block the interview)
155
155
  - Track total warnings per section; if a section has 3+ warnings, note in STATE.md for follow-up
156
+
157
+ ---
158
+
159
+ ## PRODUCT-DNA validation
160
+
161
+ After Section "PRODUCT-DNA":
162
+ - **Beliefs check:** require at least 3 distinct beliefs, each containing a specific claim (not "we care about X"). FAIL if any belief is a generic value statement.
163
+ - **Worldview check:** minimum 80 words. FAIL if shorter. FAIL if it contains marketing buzzwords ("revolutionary", "innovative", "disruptive", "best-in-class") - push for specific motivation instead.
164
+ - **JTBD check:** primary JTBD must be a verb-led, customer-centric phrase. FAIL "be the best at X" or "leader in Y".
165
+
166
+ ## Brand colors validation
167
+
168
+ After Section "Brand Colors":
169
+ - **Primary color contrast:** primary must pass WCAG AA on either light or dark backgrounds. FAIL if neither.
170
+ - **Hex validity:** all colors must be valid hex codes (3, 6, or 8 chars). FAIL invalid.
171
+
172
+ ## Logo validation
173
+
174
+ After Section "Logo":
175
+ - **File presence:** all 8 logo files must exist in .taketomarket/brand/. FAIL missing.
176
+ - **SVG validity:** each .svg file must parse as valid XML. FAIL malformed.
177
+ - **Vision-review history:** BRAND.md `## Logo` section must include a non-empty vision-review history. FAIL empty.
@@ -1,8 +1,39 @@
1
+ ## Step 0: First-run inline education
2
+
3
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
4
+
5
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-init` is not `true`, print the explainer below verbatim, then mark this skill as seen:
6
+
7
+ ```bash
8
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-init
9
+ ```
10
+
11
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-init --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-init`
14
+
15
+ `/ttm-init` is the bootstrap interview. It asks you ~30 structured questions
16
+ about your product, audience, positioning, and brand, then generates the
17
+ `.taketomarket/` reference files (POSITIONING.md, ICP.md, BRAND.md, PRODUCT-DNA.md,
18
+ plus brand colors and a logo set) and writes CLAUDE.md / AGENTS.md so the runtime
19
+ knows the rules. Think of it as `npm init` for marketing: one interactive pass
20
+ produces the config that every other `/ttm-*` skill reads.
21
+
22
+ Why it matters now: every downstream skill -- produce, verify, ship, measure --
23
+ loads these reference files as their context. If you skip init, every later
24
+ skill is operating without your positioning invariant and will drift. Run init
25
+ once per project; re-run only on a real positioning shift via `/ttm-positioning-shift`.
26
+
27
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
28
+
29
+ ---
30
+
1
31
  <purpose>
2
- Interview-driven onboarding that generates all .marketing/ reference files
32
+ Interview-driven onboarding that generates all .taketomarket/ reference files
3
33
  from structured questioning. Use when setting up takeToMarket for a new project.
4
34
  Orchestrates a 6-section interview with specificity validation, then generates
5
- 9 reference files plus CLAUDE.md and AGENTS.md instruction files.
35
+ 10 reference files (including PRODUCT-DNA) plus brand assets (colors.json + logo
36
+ set) plus CLAUDE.md and AGENTS.md instruction files.
6
37
  </purpose>
7
38
 
8
39
  <required_reading>
@@ -40,6 +71,19 @@ For multiSelect questions, instruct the user: "Type the numbers of your choices
40
71
 
41
72
  ---
42
73
 
74
+ ## YOLO Mode Detection
75
+
76
+ Read `.taketomarket/CONFIG.md` if it exists:
77
+ ```bash
78
+ node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs config read --raw 2>/dev/null
79
+ ```
80
+
81
+ If `yolo: true`: set `YOLO_MODE=true`. Throughout this workflow, when a question is tagged `priority: non-critical` in init-questions.md, skip it and use its documented `default:` value.
82
+
83
+ Critical questions (positioning, manifesto beliefs/worldview, primary brand color, logo final approval) are NEVER skipped regardless of YOLO mode.
84
+
85
+ ---
86
+
43
87
  ## Step 1: Pre-flight
44
88
 
45
89
  ```
@@ -55,7 +99,7 @@ node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs init --raw
55
99
 
56
100
  Use AskUserQuestion:
57
101
  - header: "Existing Setup"
58
- - question: ".marketing/ already contains reference files. What would you like to do?"
102
+ - question: ".taketomarket/ already contains reference files. What would you like to do?"
59
103
  - options:
60
104
  - label: "Start fresh"
61
105
  description: "Delete existing files and re-run the full interview"
@@ -64,14 +108,14 @@ Use AskUserQuestion:
64
108
  - label: "Cancel"
65
109
  description: "Exit without changes"
66
110
 
67
- **If "Start fresh":** Delete .marketing/ contents (except CAMPAIGNS/ and PLAYBOOKS/) and continue to Step 2.
68
- **If "Update specific files":** Present file picker using AskUserQuestion with multiSelect: true listing all 9 reference files. Run only the interview sections that map to selected files (see Question-to-Template Mapping in init-questions.md). Skip unselected sections and jump to Step 9 for generation.
111
+ **If "Start fresh":** Delete .taketomarket/ contents (except CAMPAIGNS/ and PLAYBOOKS/) and continue to Step 2.
112
+ **If "Update specific files":** Present file picker using AskUserQuestion with multiSelect: true listing all 10 reference files (POSITIONING, BRAND, ICP, CHANNELS, COMPETITORS, METRICS, CALENDAR, STATE, LEARNINGS, PRODUCT-DNA). Run only the interview sections that map to selected files (see Question-to-Template Mapping in init-questions.md). If PRODUCT-DNA is selected, re-run the sub-workflow at `${CLAUDE_PLUGIN_ROOT}/workflows/setup/init-product-dna.md`. Skip unselected sections and jump to Step 9 for generation.
69
113
  **If "Cancel":** Exit with message "No changes made."
70
114
 
71
115
  **If result is "not initialized":**
72
116
  ```bash
73
- mkdir -p .marketing/CAMPAIGNS
74
- mkdir -p .marketing/PLAYBOOKS
117
+ mkdir -p .taketomarket/CAMPAIGNS
118
+ mkdir -p .taketomarket/PLAYBOOKS
75
119
  ```
76
120
  Continue to Step 2.
77
121
 
@@ -176,6 +220,42 @@ On WARN: "Your customer language could be more detailed, but I'll accept it for
176
220
 
177
221
  ---
178
222
 
223
+ ## Step 4b: PRODUCT-DNA Generation
224
+
225
+ ```
226
+ takeToMarket > PRODUCT-DNA (WHAT + WHY)
227
+ ```
228
+
229
+ Read and follow `${CLAUDE_PLUGIN_ROOT}/workflows/setup/init-product-dna.md`.
230
+
231
+ This sub-workflow scans the codebase (WHAT) and interviews the user for manifesto + worldview (WHY), then writes `.taketomarket/PRODUCT-DNA.md`. It depends on POSITIONING + BRAND + ICP for context coherence and must run before brand colors + logo (which use PRODUCT-DNA's worldview for rationale generation).
232
+
233
+ ---
234
+
235
+ ## Step 4c: Brand Colors
236
+
237
+ ```
238
+ takeToMarket > BRAND COLORS
239
+ ```
240
+
241
+ Read and follow `${CLAUDE_PLUGIN_ROOT}/workflows/setup/init-brand-colors.md`.
242
+
243
+ This sub-workflow proposes 3 WCAG-checked palettes, lets the user pick, then appends colors to BRAND.md and saves `.taketomarket/brand/colors.json` for landing/pSEO consumption.
244
+
245
+ ---
246
+
247
+ ## Step 4d: Logo
248
+
249
+ ```
250
+ takeToMarket > LOGO
251
+ ```
252
+
253
+ Read and follow `${CLAUDE_PLUGIN_ROOT}/workflows/setup/init-logo.md`.
254
+
255
+ This sub-workflow generates SVG candidates with vision self-review (up to 3 rounds), produces a full asset set under `.taketomarket/brand/`, and appends a Logo section to BRAND.md.
256
+
257
+ ---
258
+
179
259
  ## Step 5: Interview -- Section 4: Channels
180
260
 
181
261
  ```
@@ -261,7 +341,7 @@ Use AskUserQuestion:
261
341
  - question: "Here's what I'll use to generate your reference files. Ready to proceed?"
262
342
  - options:
263
343
  - label: "Generate files"
264
- description: "Create all .marketing/ reference files"
344
+ description: "Create all .taketomarket/ reference files"
265
345
  - label: "Revise a section"
266
346
  description: "Go back and update specific answers"
267
347
 
@@ -286,44 +366,44 @@ For each reference file, follow this pattern:
286
366
  - Summary section must be under 200 words
287
367
  - Preserve all table structures from the template
288
368
  - For dates, use: `node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs timestamp date --raw`
289
- 4. Write to `.marketing/{FILENAME}.md`
369
+ 4. Write to `.taketomarket/{FILENAME}.md`
290
370
 
291
371
  **Generate files in this order:**
292
372
 
293
373
  ### 1. POSITIONING.md (from Section 1 data)
294
374
  Read template: `${CLAUDE_PLUGIN_ROOT}/templates/reference-files/positioning.md`
295
375
  Fill: Category, Target audience, Primary differentiator, Proof points, Must-not-say, Competitive frame, Positioning History date.
296
- Write to: `.marketing/POSITIONING.md`
376
+ Write to: `.taketomarket/POSITIONING.md`
297
377
 
298
378
  ### 2. BRAND.md (from Section 2 data)
299
379
  Read template: `${CLAUDE_PLUGIN_ROOT}/templates/reference-files/brand.md`
300
380
  Fill: Voice archetype, Voice attributes, Tone per context, Banned words with reasoning, Proof points, Good and bad examples.
301
- Write to: `.marketing/BRAND.md`
381
+ Write to: `.taketomarket/BRAND.md`
302
382
 
303
383
  ### 3. ICP.md (from Section 3 data)
304
384
  Read template: `${CLAUDE_PLUGIN_ROOT}/templates/reference-files/icp.md`
305
385
  Fill: Primary segment, Demographics, Psychographics, JTBD, Pain points with severity and frequency, Buying triggers, Anti-ICP, Customer language library.
306
- Write to: `.marketing/ICP.md`
386
+ Write to: `.taketomarket/ICP.md`
307
387
 
308
388
  ### 4. CHANNELS.md (from Section 4 data)
309
389
  Read template: `${CLAUDE_PLUGIN_ROOT}/templates/reference-files/channels.md`
310
390
  Fill: Active channels with baselines, Primary channel, Dormant channels with reasons, Banned channels with reasons, Budget allocation, Channel-specific rules.
311
- Write to: `.marketing/CHANNELS.md`
391
+ Write to: `.taketomarket/CHANNELS.md`
312
392
 
313
393
  ### 5. COMPETITORS.md (from Section 5 data)
314
394
  Read template: `${CLAUDE_PLUGIN_ROOT}/templates/reference-files/competitors.md`
315
395
  Fill: Direct competitors (positioning, strength, weakness), Positioning map axes and positions, Share of voice baseline.
316
- Write to: `.marketing/COMPETITORS.md`
396
+ Write to: `.taketomarket/COMPETITORS.md`
317
397
 
318
398
  ### 6. METRICS.md (from Section 6 data -- metrics portion)
319
399
  Read template: `${CLAUDE_PLUGIN_ROOT}/templates/reference-files/metrics.md`
320
400
  Fill: Primary outcome metric (metric/target/window/source), Secondary metrics, Leading indicators, Baselines, Attribution model.
321
- Write to: `.marketing/METRICS.md`
401
+ Write to: `.taketomarket/METRICS.md`
322
402
 
323
403
  ### 7. CALENDAR.md (from Section 6 data -- calendar portion)
324
404
  Read template: `${CLAUDE_PLUGIN_ROOT}/templates/reference-files/calendar.md`
325
405
  Fill: Quarterly themes, Launch calendar, Always-on cadence, Blackout dates.
326
- Write to: `.marketing/CALENDAR.md`
406
+ Write to: `.taketomarket/CALENDAR.md`
327
407
 
328
408
  ### 8. STATE.md (template copy with timestamp)
329
409
  Read template: `${CLAUDE_PLUGIN_ROOT}/templates/reference-files/state.md`
@@ -332,7 +412,7 @@ Read template: `${CLAUDE_PLUGIN_ROOT}/templates/reference-files/state.md`
332
412
  node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs timestamp date --raw
333
413
  ```
334
414
  Do NOT fill interview data into STATE.md -- it is initialized with default values.
335
- Write to: `.marketing/STATE.md`
415
+ Write to: `.taketomarket/STATE.md`
336
416
 
337
417
  ### 9. LEARNINGS.md (template copy with zeroed counters)
338
418
  Read template: `${CLAUDE_PLUGIN_ROOT}/templates/reference-files/learnings.md`
@@ -341,7 +421,7 @@ Read template: `${CLAUDE_PLUGIN_ROOT}/templates/reference-files/learnings.md`
341
421
  - Last lesson date: none
342
422
  - Top pattern: none
343
423
  Do NOT fill interview data -- learnings are populated during campaign Learn phases.
344
- Write to: `.marketing/LEARNINGS.md`
424
+ Write to: `.taketomarket/LEARNINGS.md`
345
425
 
346
426
  ---
347
427
 
@@ -384,7 +464,7 @@ node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs state update status initialized
384
464
  ```
385
465
 
386
466
  **Warning tracking:** If any interview section accumulated 3 or more SPECIFICITY_WARNING flags
387
- during the interview, append to `.marketing/STATE.md` under a `## Follow-up Needed` heading:
467
+ during the interview, append to `.taketomarket/STATE.md` under a `## Follow-up Needed` heading:
388
468
  - Section [N] ([name]): [count] specificity warnings -- recommend re-running with [relevant /ttm-* command]
389
469
 
390
470
  Use these commands per section:
@@ -403,15 +483,27 @@ Use these commands per section:
403
483
  takeToMarket > INITIALIZED
404
484
 
405
485
  Reference files created:
406
- .marketing/POSITIONING.md
407
- .marketing/BRAND.md
408
- .marketing/ICP.md
409
- .marketing/CHANNELS.md
410
- .marketing/STATE.md
411
- .marketing/METRICS.md
412
- .marketing/COMPETITORS.md
413
- .marketing/CALENDAR.md
414
- .marketing/LEARNINGS.md
486
+ .taketomarket/POSITIONING.md
487
+ .taketomarket/BRAND.md
488
+ .taketomarket/ICP.md
489
+ .taketomarket/CHANNELS.md
490
+ .taketomarket/STATE.md
491
+ .taketomarket/METRICS.md
492
+ .taketomarket/COMPETITORS.md
493
+ .taketomarket/CALENDAR.md
494
+ .taketomarket/LEARNINGS.md
495
+ .taketomarket/PRODUCT-DNA.md
496
+
497
+ Brand assets created:
498
+ .taketomarket/brand/colors.json
499
+ .taketomarket/brand/logo.svg
500
+ .taketomarket/brand/logo-mark.svg
501
+ .taketomarket/brand/logo-wordmark.svg
502
+ .taketomarket/brand/logo-mono-light.svg
503
+ .taketomarket/brand/logo-mono-dark.svg
504
+ .taketomarket/brand/logo-favicon.svg
505
+ .taketomarket/brand/logo@1x.png
506
+ .taketomarket/brand/logo@2x.png
415
507
 
416
508
  Instruction files created:
417
509
  CLAUDE.md
@@ -427,23 +519,36 @@ Next step: Run /ttm-new-campaign to create your first campaign.
427
519
  <success_criteria>
428
520
  - [ ] Pre-flight check completed (existing init detected or directories created)
429
521
  - [ ] All 6 interview sections completed with specificity validation
522
+ - [ ] PRODUCT-DNA sub-workflow run; `.taketomarket/PRODUCT-DNA.md` written
523
+ - [ ] Brand-colors sub-workflow run; BRAND.md `## Colors` section filled + `.taketomarket/brand/colors.json` written
524
+ - [ ] Logo sub-workflow run; `.taketomarket/brand/` asset set produced + BRAND.md `## Logo` section filled
430
525
  - [ ] Confirmation gate passed
431
- - [ ] 9 reference files generated in .marketing/ with _SUMMARY/END_SUMMARY preserved
526
+ - [ ] 10 reference files generated in .taketomarket/ with _SUMMARY/END_SUMMARY preserved
432
527
  - [ ] CLAUDE.md and AGENTS.md copied to project root
433
- - [ ] Health check passes (all 11 checks: marketing_dir + campaigns_dir + 9 files)
528
+ - [ ] Health check passes (all 12 checks: taketomarket_dir + campaigns_dir + 10 files)
434
529
  - [ ] STATE.md status set to "initialized"
435
530
  </success_criteria>
436
531
 
437
532
  <output>
438
- - `.marketing/POSITIONING.md`
439
- - `.marketing/BRAND.md`
440
- - `.marketing/ICP.md`
441
- - `.marketing/CHANNELS.md`
442
- - `.marketing/STATE.md`
443
- - `.marketing/METRICS.md`
444
- - `.marketing/COMPETITORS.md`
445
- - `.marketing/CALENDAR.md`
446
- - `.marketing/LEARNINGS.md`
533
+ - `.taketomarket/POSITIONING.md`
534
+ - `.taketomarket/BRAND.md`
535
+ - `.taketomarket/ICP.md`
536
+ - `.taketomarket/CHANNELS.md`
537
+ - `.taketomarket/STATE.md`
538
+ - `.taketomarket/METRICS.md`
539
+ - `.taketomarket/COMPETITORS.md`
540
+ - `.taketomarket/CALENDAR.md`
541
+ - `.taketomarket/LEARNINGS.md`
542
+ - `.taketomarket/PRODUCT-DNA.md`
543
+ - `.taketomarket/brand/colors.json`
544
+ - `.taketomarket/brand/logo.svg` (plus mark/wordmark/mono/favicon variants and PNG raster)
447
545
  - `CLAUDE.md`
448
546
  - `AGENTS.md`
449
547
  </output>
548
+
549
+ ## What if this doesn't fit?
550
+
551
+ Looks like /ttm-init can't do that yet.
552
+
553
+ - Want a new skill? /ttm-request-skill
554
+ - Existing skill needs work? /ttm-improve-skill
@@ -1,3 +1,32 @@
1
+ ## Step 0: First-run inline education
2
+
3
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
4
+
5
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-new-campaign` is not `true`, print the explainer below verbatim, then mark this skill as seen:
6
+
7
+ ```bash
8
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-new-campaign
9
+ ```
10
+
11
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-new-campaign --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-new-campaign`
14
+
15
+ `/ttm-new-campaign` creates an isolated workspace under `.taketomarket/campaigns/<slug>/`
16
+ with its own STATE.md, brief slot, and asset directory. It's the marketing
17
+ equivalent of `git checkout -b feature/X`: campaigns are independent units that
18
+ can be at different lifecycle phases simultaneously, and the state machine
19
+ tracks each one separately.
20
+
21
+ Why it matters: takeToMarket is multi-campaign by design. Without a campaign
22
+ slug, briefs, assets, and verification results have no home and bleed into
23
+ each other. Run this before `/ttm-brief` for any new initiative -- it locks in
24
+ the campaign id that subsequent skills route work into.
25
+
26
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
27
+
28
+ ---
29
+
1
30
  <purpose>
2
31
  Campaign scaffolding workflow that creates a CAMPAIGNS/<slug>/ directory with
3
32
  initialized STATE.md, empty RESEARCH.md, empty BRIEF.md, and ASSETS/ directory.
@@ -52,7 +81,7 @@ Display: `Campaign slug: ${CAMPAIGN_SLUG}`
52
81
  ## Step 3: Check for Existing Campaign
53
82
 
54
83
  ```bash
55
- ls .marketing/CAMPAIGNS/${CAMPAIGN_SLUG}/ 2>/dev/null && echo "exists" || echo "new"
84
+ ls .taketomarket/CAMPAIGNS/${CAMPAIGN_SLUG}/ 2>/dev/null && echo "exists" || echo "new"
56
85
  ```
57
86
 
58
87
  **If "exists":**
@@ -81,10 +110,10 @@ This creates:
81
110
 
82
111
  Verify all 4 items exist:
83
112
  ```bash
84
- ls .marketing/CAMPAIGNS/${CAMPAIGN_SLUG}/STATE.md && \
85
- ls .marketing/CAMPAIGNS/${CAMPAIGN_SLUG}/RESEARCH.md && \
86
- ls .marketing/CAMPAIGNS/${CAMPAIGN_SLUG}/BRIEF.md && \
87
- ls -d .marketing/CAMPAIGNS/${CAMPAIGN_SLUG}/ASSETS/ && \
113
+ ls .taketomarket/CAMPAIGNS/${CAMPAIGN_SLUG}/STATE.md && \
114
+ ls .taketomarket/CAMPAIGNS/${CAMPAIGN_SLUG}/RESEARCH.md && \
115
+ ls .taketomarket/CAMPAIGNS/${CAMPAIGN_SLUG}/BRIEF.md && \
116
+ ls -d .taketomarket/CAMPAIGNS/${CAMPAIGN_SLUG}/ASSETS/ && \
88
117
  echo "scaffold complete"
89
118
  ```
90
119
 
@@ -106,13 +135,13 @@ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" state update current_campaign "${
106
135
  ```
107
136
  takeToMarket > CAMPAIGN CREATED: ${CAMPAIGN_SLUG}
108
137
 
109
- .marketing/CAMPAIGNS/${CAMPAIGN_SLUG}/
138
+ .taketomarket/CAMPAIGNS/${CAMPAIGN_SLUG}/
110
139
  STATE.md (phase: created)
111
- RESEARCH.md (pending -- run /ttm-research)
140
+ RESEARCH.md (pending -- run /ttm-discover)
112
141
  BRIEF.md (pending -- run /ttm-brief)
113
142
  ASSETS/ (empty -- populated by /ttm-produce)
114
143
 
115
- Next: Run /ttm-research ${CAMPAIGN_SLUG}
144
+ Next: Run /ttm-discover ${CAMPAIGN_SLUG}
116
145
  ```
117
146
 
118
147
  </process>
@@ -127,8 +156,15 @@ Next: Run /ttm-research ${CAMPAIGN_SLUG}
127
156
  </success_criteria>
128
157
 
129
158
  <output>
130
- - `.marketing/CAMPAIGNS/<slug>/STATE.md`
131
- - `.marketing/CAMPAIGNS/<slug>/RESEARCH.md`
132
- - `.marketing/CAMPAIGNS/<slug>/BRIEF.md`
133
- - `.marketing/CAMPAIGNS/<slug>/ASSETS/` (empty directory)
159
+ - `.taketomarket/CAMPAIGNS/<slug>/STATE.md`
160
+ - `.taketomarket/CAMPAIGNS/<slug>/RESEARCH.md`
161
+ - `.taketomarket/CAMPAIGNS/<slug>/BRIEF.md`
162
+ - `.taketomarket/CAMPAIGNS/<slug>/ASSETS/` (empty directory)
134
163
  </output>
164
+
165
+ ## What if this doesn't fit?
166
+
167
+ Looks like /ttm-new-campaign can't do that yet.
168
+
169
+ - Want a new skill? /ttm-request-skill
170
+ - Existing skill needs work? /ttm-improve-skill
@@ -0,0 +1,98 @@
1
+ # Deploy Workflow
2
+
3
+ ## Step 0: First-run inline education
4
+
5
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
6
+
7
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-deploy` is not `true`, print the explainer below verbatim, then mark this skill as seen:
8
+
9
+ ```bash
10
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-deploy
11
+ ```
12
+
13
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-deploy --raw` -- the JSON `seen` field is `true` once the explainer has run before.
14
+
15
+ ### Explainer for `/ttm-deploy`
16
+
17
+ `/ttm-deploy` ships your generated site (landing + pSEO + any static
18
+ assets) to the deploy target detected from your project (Vercel,
19
+ Netlify, Cloudflare Pages, etc.) or guides manual deployment if no
20
+ target is detected. It does not bypass the gate wall -- only verified,
21
+ reviewed assets are pushed.
22
+
23
+ Why it matters: a verified asset that isn't deployed is functionally
24
+ equivalent to no asset. This skill is the bridge between the
25
+ spec-driven pipeline and the live URL, and it preserves the audit trail
26
+ so you can correlate a deployed page back to its brief and gate results.
27
+
28
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
29
+
30
+ ---
31
+
32
+ ## Step 1: Read landing path
33
+
34
+ ```bash
35
+ node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs config read --raw
36
+ ```
37
+
38
+ Extract `landing_path`. If missing: print "Run /ttm-landing first" and exit.
39
+
40
+ ## Step 2: Detect deploy path
41
+
42
+ ```bash
43
+ cd <landing_path> && node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs deploy detect --raw
44
+ ```
45
+
46
+ Parse JSON. Branch on `preferred`:
47
+
48
+ ### preferred = "git-push"
49
+
50
+ Inside landing path:
51
+ 1. `git add . && git commit -m "deploy: takeToMarket landing update"` (if changes).
52
+ 2. `git push origin <current-branch>`.
53
+ 3. Print Vercel dashboard URL and "Deploy in progress — check dashboard."
54
+
55
+ ### preferred = "cli"
56
+
57
+ Inside landing path:
58
+ 1. `vercel deploy [--prod]` (depending on flag).
59
+ 2. CLI outputs deploy URL. Print it.
60
+
61
+ ### preferred = "api-token"
62
+
63
+ Print: "API-token deploy not yet implemented for v2.3.0. Either install vercel CLI or connect this repo to Vercel and use git-push."
64
+
65
+ ### preferred = null (nothing available)
66
+
67
+ Walk user through setup:
68
+ 1. AskUserQuestion: "No Vercel deploy path detected. Which would you like to set up?"
69
+ - "Connect repo to Vercel dashboard (recommended)" — print instructions.
70
+ - "Install Vercel CLI" — `npm i -g vercel && vercel login`.
71
+ - "Skip — I'll deploy manually."
72
+
73
+ ## Step 3: Verify deploy URL responds
74
+
75
+ If a deploy URL was produced, fetch the homepage:
76
+ ```bash
77
+ curl -sI <url> | head -1
78
+ ```
79
+ Expected: `HTTP/2 200`.
80
+
81
+ If non-200: print warning + URL.
82
+
83
+ ## Step 4: Update CONFIG.md
84
+
85
+ Append:
86
+ ```
87
+ last_deploy_url: <url>
88
+ last_deploy_at: <timestamp>
89
+ ```
90
+
91
+ ## Step 5: Print next steps
92
+
93
+ ## What if this doesn't fit?
94
+
95
+ Looks like /ttm-deploy can't do that yet.
96
+
97
+ - Want a new skill? /ttm-request-skill
98
+ - Existing skill needs work? /ttm-improve-skill
@@ -0,0 +1,156 @@
1
+ # Landing Page Workflow
2
+
3
+ ## Step 0: First-run inline education
4
+
5
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
6
+
7
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-landing` is not `true`, print the explainer below verbatim, then mark this skill as seen:
8
+
9
+ ```bash
10
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-landing
11
+ ```
12
+
13
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-landing --raw` -- the JSON `seen` field is `true` once the explainer has run before.
14
+
15
+ ### Explainer for `/ttm-landing`
16
+
17
+ `/ttm-landing` produces a landing page from your positioning, brand,
18
+ ICP, and a brief. It generates the HTML, applies the brand tokens,
19
+ writes the page into your site directory, and queues the four landing
20
+ quality gates (positioning, copy clarity, conversion fundamentals,
21
+ visual review via Playwright).
22
+
23
+ Why it matters: landing pages are the highest-leverage marketing
24
+ asset for developerneurs because they're the conversion surface for
25
+ every other campaign. Treating them as one-off prose vs. spec-driven
26
+ generation is the difference between A/B testing your way upward
27
+ and rewriting from scratch every two months.
28
+
29
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
30
+
31
+ ---
32
+
33
+ **Required reading:**
34
+ - `.taketomarket/POSITIONING.md`
35
+ - `.taketomarket/BRAND.md`
36
+ - `.taketomarket/PRODUCT-DNA.md`
37
+ - `.taketomarket/ICP.md`
38
+ - `${CLAUDE_PLUGIN_ROOT}/references/landing-page-anatomy.md`
39
+ - `${CLAUDE_PLUGIN_ROOT}/playbooks/landing-pages.md` (delivered in P6)
40
+
41
+ ---
42
+
43
+ ## Step 0: Prerequisite check
44
+
45
+ Verify `/ttm-init` (P3) has run by reading `.taketomarket/brand/colors.json`. If the file is missing:
46
+
47
+ ```
48
+ Run /ttm-init first to generate POSITIONING, BRAND, PRODUCT-DNA, ICP and brand colors.
49
+ ```
50
+
51
+ Exit. Do not proceed — without `colors.json`, the `{{COLOR_*}}` placeholders in `app/tokens.css` will not substitute and the scaffolded site will render unstyled.
52
+
53
+ ## Step 1: Choose site location
54
+
55
+ Run:
56
+ ```bash
57
+ node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs site-location --raw
58
+ ```
59
+
60
+ Parse the JSON. Use AskUserQuestion (priority: critical):
61
+ - question: "Where should the landing site live?"
62
+ - options:
63
+ - "Default: [result.default]"
64
+ - "Custom path"
65
+ - "Cancel"
66
+
67
+ If "Custom path": freeform input.
68
+
69
+ Save chosen path to `.taketomarket/CONFIG.md` `landing_path: <path>`.
70
+
71
+ ## Step 2: Copy scaffold
72
+
73
+ Copy `${CLAUDE_PLUGIN_ROOT}/templates/site-scaffold/` to chosen landing path. Use `cp -R` or fs equivalent.
74
+
75
+ Skip if landing path already exists with a `package.json` (preserve user work).
76
+
77
+ ## Step 3: Template substitution
78
+
79
+ Read `.taketomarket/brand/colors.json`. Replace `{{COLOR_*}}` placeholders in `app/tokens.css`.
80
+
81
+ Read POSITIONING.md, BRAND.md. Replace `{{SITE_TITLE}}`, `{{SITE_DESCRIPTION}}`, `{{SITE_NAME}}` in `app/layout.tsx`, `package.json`, `public/llms.txt`.
82
+
83
+ ## Step 4: Generate copy for each section
84
+
85
+ For each of 13 sections in `app/page.tsx`, generate content following references/landing-page-anatomy.md guidance. Load positioning differentiator, brand voice, PRODUCT-DNA worldview for context.
86
+
87
+ Fill in component placeholders (`{{HERO_HEADLINE}}` etc.) with generated copy.
88
+
89
+ ## Step 4b: Inject Schema.org JSON-LD into each page
90
+
91
+ Quality Gate 2 (`workflows/site/quality-gates.md`) requires a `<script type="application/ld+json">` block on every page. The scaffold ships without one — add it here.
92
+
93
+ For each page generated under `app/`, inject a JSON-LD `<script>` into the page's JSX (top of the return tree is fine; Next.js will render it into the document head/body). Schema type to use per page (from `references/landing-page-anatomy.md`):
94
+
95
+ - `app/page.tsx` (home): `Organization` + `WebSite` (combined in a single `@graph` array if both are needed).
96
+ - `app/product/page.tsx`: `Product`.
97
+ - `app/pricing/page.tsx`: `Product` with `offers` (or `Service` if SaaS).
98
+ - `app/about/page.tsx`: `Organization` (extended with `founder`, `foundingDate`).
99
+ - Every page with an FAQ section: add a `FAQPage` entry next to the page-type entry.
100
+
101
+ Use values from POSITIONING.md (name, description, differentiator → about/description), BRAND.md (logo URL, social profiles → `sameAs`), and the generated copy itself (FAQ questions/answers → `FAQPage.mainEntity`).
102
+
103
+ JSON-LD must be valid JSON. Render via `<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }} />`.
104
+
105
+ ## Step 5: Generate /product, /pricing, /about pages
106
+
107
+ Use AskUserQuestion (priority: non-critical) for which pages to scaffold:
108
+ - "Which top-level pages do you want now?"
109
+ - multiSelect: ["Home (always)", "Product", "Pricing", "About / Manifesto"]
110
+
111
+ For each selected page: scaffold + generate copy following references/landing-page-anatomy.md.
112
+
113
+ ## Step 6: Mandatory humanize
114
+
115
+ For every generated copy file, invoke `/ttm-humanize` via Skill tool. Replace original with humanized version.
116
+
117
+ ## Step 7: Initial commit in the landing project
118
+
119
+ First detect whether the landing path is already inside a git work tree:
120
+
121
+ ```bash
122
+ cd <landing_path> && git rev-parse --is-inside-work-tree 2>/dev/null
123
+ ```
124
+
125
+ - If the command prints `true`: the landing path is inside an existing repo (parent project). Do NOT `git init` — that would nest repositories. Just `git add . && git commit -m "feat: takeToMarket landing scaffold + initial copy"` at the parent repo level.
126
+ - If the command exits non-zero (not a repo): initialize a fresh repo:
127
+
128
+ ```bash
129
+ cd <landing_path> && git init && git add . && git commit -m "feat: takeToMarket landing scaffold + initial copy"
130
+ ```
131
+
132
+ ## Step 8: Quality gates
133
+
134
+ Run quality gates from `${CLAUDE_PLUGIN_ROOT}/workflows/site/quality-gates.md`:
135
+ - Positioning integrity (parse rendered HTML, verify differentiator + must-not-say compliance).
136
+ - Banned words check.
137
+ - (Playwright visual + perf — soft until P5 ships Playwright setup.)
138
+
139
+ If gates fail: route to /ttm-fix.
140
+
141
+ ## Step 9: Print next steps
142
+
143
+ ```
144
+ ✓ Landing site scaffolded at [path].
145
+ Next:
146
+ - Run npm install && npm run dev in [path] to preview.
147
+ - Run /ttm-deploy when ready to ship.
148
+ - Run /ttm-pseo to add blog/use-case/comparison/alternative routes.
149
+ ```
150
+
151
+ ## What if this doesn't fit?
152
+
153
+ Looks like /ttm-landing can't do that yet.
154
+
155
+ - Want a new skill? /ttm-request-skill
156
+ - Existing skill needs work? /ttm-improve-skill