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
@@ -1,9 +1,38 @@
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-positioning-shift` 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-positioning-shift
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-positioning-shift --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-positioning-shift`
14
+
15
+ `/ttm-positioning-shift` is the only skill (besides init) that may modify
16
+ POSITIONING.md. It walks you through a deliberate positioning change:
17
+ documents the old position, captures the rationale, writes the new one,
18
+ and flags every existing campaign that needs re-verification under the
19
+ new invariant.
20
+
21
+ Why it matters: positioning changes are schema migrations. If you edit
22
+ POSITIONING.md ad-hoc, you've silently invalidated every shipped asset
23
+ and there's no audit trail. This skill makes the change explicit,
24
+ auditable, and propagates the consequences across active campaigns.
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
  Controlled positioning shift workflow for /ttm-positioning-shift. Requires explicit
3
32
  reasoning for the change, collects new positioning fields, generates a migration plan
4
33
  for active campaigns, sets deprecation schedule for shipped assets, presents a
5
34
  before/after diff for mandatory human approval, and atomically updates POSITIONING.md
6
- with History table archival. Logs all changes to .marketing/DRIFT-LOG.md.
35
+ with History table archival. Logs all changes to .taketomarket/DRIFT-LOG.md.
7
36
  </purpose>
8
37
 
9
38
  <required_reading>
@@ -15,7 +44,7 @@ with History table archival. Logs all changes to .marketing/DRIFT-LOG.md.
15
44
  <constraints>
16
45
  ## This Workflow WRITES to POSITIONING.md
17
46
 
18
- This is one of only two workflows authorized to modify `.marketing/POSITIONING.md`
47
+ This is one of only two workflows authorized to modify `.taketomarket/POSITIONING.md`
19
48
  (the other is `/ttm-init`). All writes are gated behind mandatory human approval
20
49
  in Step 4. Never write to POSITIONING.md without explicit "Approve" from the user.
21
50
  </constraints>
@@ -54,20 +83,20 @@ takeToMarket > LOADING CONTEXT
54
83
  ```
55
84
 
56
85
  **Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
57
- - `.marketing/POSITIONING.md`
58
- - `.marketing/BRAND.md`
59
- - `.marketing/ICP.md`
60
- - `.marketing/CHANNELS.md`
61
- - `.marketing/STATE.md` (frontmatter only)
62
- - `.marketing/CALENDAR.md`
63
- - `.marketing/COMPETITORS.md`
64
- - `.marketing/METRICS.md`
65
- - `.marketing/LEARNINGS.md`
86
+ - `.taketomarket/POSITIONING.md`
87
+ - `.taketomarket/BRAND.md`
88
+ - `.taketomarket/ICP.md`
89
+ - `.taketomarket/CHANNELS.md`
90
+ - `.taketomarket/STATE.md` (frontmatter only)
91
+ - `.taketomarket/CALENDAR.md`
92
+ - `.taketomarket/COMPETITORS.md`
93
+ - `.taketomarket/METRICS.md`
94
+ - `.taketomarket/LEARNINGS.md`
66
95
 
67
96
  **Load Tier 2 (full content)** for before/after diff:
68
- - `.marketing/POSITIONING.md` (full -- needed for field comparison and History table)
97
+ - `.taketomarket/POSITIONING.md` (full -- needed for field comparison and History table)
69
98
 
70
- If `.marketing/POSITIONING.md` does not exist, error:
99
+ If `.taketomarket/POSITIONING.md` does not exist, error:
71
100
  "POSITIONING.md not found. Run /ttm-init first to set up your marketing system."
72
101
  Exit.
73
102
 
@@ -180,7 +209,7 @@ Exit.
180
209
 
181
210
  For each active campaign from `ACTIVE_JSON`:
182
211
 
183
- 1. List all assets in `.marketing/CAMPAIGNS/<slug>/ASSETS/` or from MANIFEST.json
212
+ 1. List all assets in `.taketomarket/CAMPAIGNS/<slug>/ASSETS/` or from MANIFEST.json
184
213
  2. Quick-evaluate each asset against the NEW positioning using GATE-01 3-check logic:
185
214
  - Does the asset align with the NEW differentiator?
186
215
  - Are claims backed by NEW proof points?
@@ -335,7 +364,7 @@ takeToMarket > POSITIONING SHIFT COMPLETE
335
364
  Old positioning archived in POSITIONING.md History table.
336
365
  New positioning is now active for all future campaigns.
337
366
 
338
- Changes logged: .marketing/DRIFT-LOG.md
367
+ Changes logged: .taketomarket/DRIFT-LOG.md
339
368
  Deprecation items: [count] (deadline: [DEPRECATION_DEADLINE or "N/A"])
340
369
  Active campaigns: [ACTIVE_COUNT] -- review migration plan above
341
370
 
@@ -363,6 +392,13 @@ Next steps:
363
392
  </success_criteria>
364
393
 
365
394
  <output>
366
- - `.marketing/POSITIONING.md` (updated with new positioning and History table entry)
367
- - `.marketing/DRIFT-LOG.md` (shift event appended + deprecation entries)
395
+ - `.taketomarket/POSITIONING.md` (updated with new positioning and History table entry)
396
+ - `.taketomarket/DRIFT-LOG.md` (shift event appended + deprecation entries)
368
397
  </output>
398
+
399
+ ## What if this doesn't fit?
400
+
401
+ Looks like /ttm-positioning-shift can't do that yet.
402
+
403
+ - Want a new skill? /ttm-request-skill
404
+ - Existing skill needs work? /ttm-improve-skill
@@ -0,0 +1,75 @@
1
+ # Init Sub-Workflow: Brand Colors
2
+
3
+ **Purpose:** Generate the brand color palette and append it to BRAND.md.
4
+
5
+ **Called by:** `workflows/setup/init.md` after Section 2 (Brand and Voice) base questions.
6
+
7
+ **Required reading:** `${CLAUDE_PLUGIN_ROOT}/references/brand-color-theory.md`
8
+
9
+ ---
10
+
11
+ ## Step 1: Derive constraints
12
+
13
+ Read `.taketomarket/POSITIONING.md`, `BRAND.md`, `ICP.md`. Note:
14
+ - Voice archetype (Authoritative Expert -> cooler/blues, Bold Challenger -> high-contrast/saturated, etc.).
15
+ - Category (DevTools default to dev-friendly palettes, B2B SaaS to trust-blues, DTC to category norms).
16
+ - ICP (engineering audience leans dark-mode-friendly).
17
+ - Banned colors from BRAND.md if any (e.g., "no pink - it's our biggest competitor's color").
18
+
19
+ ## Step 2: Propose 3 candidate palettes
20
+
21
+ Generate 3 palettes following references/brand-color-theory.md guidance.
22
+ For each: primary, primary variants, secondary, accent, full neutral scale, semantic colors.
23
+
24
+ For each palette, run WCAG contrast checks:
25
+ - Primary on white (light bg).
26
+ - Primary on near-black (dark bg).
27
+ - Each variant against text on both bgs.
28
+
29
+ Reject any palette where the primary fails AA contrast on at least one background.
30
+
31
+ ## Step 3: Present + pick
32
+
33
+ AskUserQuestion (priority: critical):
34
+ - header: "Palette"
35
+ - question: "Three candidate palettes proposed. Each shows primary, secondary, accent, neutral scale."
36
+ - options:
37
+ - "Palette A: [name + 3 swatches in description]"
38
+ - "Palette B: [name + 3 swatches]"
39
+ - "Palette C: [name + 3 swatches]"
40
+ - "Show me more options"
41
+ - "I'll provide my own hex codes"
42
+
43
+ If "Show me more": generate 3 new candidates, re-present.
44
+ If "I'll provide my own": freeform input - primary, secondary, accent. Auto-derive variants + neutral scale.
45
+
46
+ ## Step 4: Write to BRAND.md
47
+
48
+ Append the selected palette to BRAND.md `## Colors` section (template at `templates/reference-files/brand.md`).
49
+
50
+ Include:
51
+ - All hex values.
52
+ - WCAG contrast check results.
53
+ - One-paragraph rationale: why this palette fits the positioning + manifesto.
54
+
55
+ ## Step 5: Save to .taketomarket/brand/colors.json
56
+
57
+ Also save as JSON for landing/pSEO consumption:
58
+
59
+ ```json
60
+ {
61
+ "primary": { "DEFAULT": "#0EA5E9", "hover": "#0284C7", "active": "#075985" },
62
+ "secondary": { "DEFAULT": "#7C3AED" },
63
+ "accent": { "DEFAULT": "#F59E0B" },
64
+ "neutral": { "50": "#FAFAFA", "100": "#F4F4F5", "900": "#18181B" },
65
+ "semantic": { "success": "#22C55E", "warning": "#F59E0B", "error": "#EF4444", "info": "#3B82F6" }
66
+ }
67
+ ```
68
+
69
+ ## Step 6: Confirm
70
+
71
+ AskUserQuestion (priority: critical):
72
+ - "Colors saved to BRAND.md and .taketomarket/brand/colors.json. Confirm or revise?"
73
+ - "Confirm" / "Revise"
74
+
75
+ If revise: go back to Step 3.
@@ -0,0 +1,113 @@
1
+ # Init Sub-Workflow: Logo Generation
2
+
3
+ **Purpose:** Generate brand logo (SVG primary + PNG raster) with vision-based self-review loop.
4
+
5
+ **Called by:** `workflows/setup/init.md` after brand colors.
6
+
7
+ **Required reading:**
8
+ - `${CLAUDE_PLUGIN_ROOT}/references/logo-design-principles.md`
9
+ - `${CLAUDE_PLUGIN_ROOT}/references/codex-image-gen-research.md`
10
+
11
+ ---
12
+
13
+ ## Step 1: Choose logo type
14
+
15
+ AskUserQuestion (priority: critical):
16
+ - "What logo type fits your product?"
17
+ - options:
18
+ - "Wordmark" - brand name in distinctive typography (recommended for most)
19
+ - "Combination mark" - wordmark + small symbol
20
+ - "Lettermark" - initials only (works for long names)
21
+ - "Symbol only" - abstract mark (only if you have brand equity)
22
+ - "Help me decide" - show rationale per type
23
+
24
+ If "Help me decide": show the principles from references/logo-design-principles.md, then re-ask.
25
+
26
+ ## Step 2: Gather inspiration constraints
27
+
28
+ Freeform (non-critical, defaults to "neutral"):
29
+ - "Any logos you like as reference points? (e.g., Stripe, Linear, Anthropic)"
30
+ - "Any motifs to avoid?" (Pre-fill defaults from logo-design-principles.md: no lightbulbs, gears, brains, rockets, 3-circle clusters.)
31
+
32
+ ## Step 3: Generate Round 1 SVG
33
+
34
+ Generate 3 SVG candidates based on:
35
+ - Logo type (Step 1).
36
+ - Brand colors from BRAND.md.
37
+ - Voice archetype (cool/calm/serif vs bold/sharp/sans-serif).
38
+ - Constraints from Step 2.
39
+
40
+ Write each candidate to `.taketomarket/brand/round-1/candidate-{a,b,c}.svg`.
41
+
42
+ ## Step 4: Render to PNG
43
+
44
+ For each candidate, render to PNG at 256x256 for vision review:
45
+
46
+ ```bash
47
+ node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs svg-render .taketomarket/brand/round-1/candidate-a.svg .taketomarket/brand/round-1/candidate-a.png
48
+ ```
49
+
50
+ If `svg-render` returns `none` (no renderer installed): prompt user to install rsvg-convert:
51
+ ```
52
+ brew install librsvg
53
+ ```
54
+ (or apt, or chocolatey on Windows). Wait. Retry.
55
+
56
+ If on Codex with native image-gen path (per codex-image-gen-research.md): use that.
57
+
58
+ ## Step 5: Vision self-review
59
+
60
+ For each candidate PNG:
61
+ 1. Read the image file via the Read tool (multimodal load).
62
+ 2. Evaluate against the checklist in references/logo-design-principles.md `## Vision-review checklist`:
63
+ - Legibility at small size.
64
+ - Composition balance.
65
+ - Color matches palette.
66
+ - Originality vs cliche.
67
+ 3. Score each candidate 1-10 per dimension.
68
+ 4. Pick the best 2 candidates. Discard the rest.
69
+
70
+ ## Step 6: Iterate
71
+
72
+ For each of the top 2 candidates, propose 2 modifications that would address the lowest-scoring dimension.
73
+
74
+ Generate Round 2: 4 modified SVGs (2 per top candidate). Write to `.taketomarket/brand/round-2/`.
75
+
76
+ Render to PNG. Re-review.
77
+
78
+ Pick the best.
79
+
80
+ ## Step 7: User picks
81
+
82
+ Show user the final 2-3 candidates (PNG paths). AskUserQuestion (priority: critical):
83
+ - "Which logo do you want? You can also ask for another round."
84
+ - options: ["A", "B", "C", "Show me Round 3", "I'll provide my own SVG"]
85
+
86
+ If "Show me Round 3": iterate one more time (max 3 rounds total per session).
87
+ If "I'll provide my own": prompt for SVG paste or file path.
88
+
89
+ ## Step 8: Generate full asset set
90
+
91
+ From the selected SVG, generate:
92
+ - `.taketomarket/brand/logo.svg` (primary)
93
+ - `.taketomarket/brand/logo-mark.svg` (if combination mark; else copy)
94
+ - `.taketomarket/brand/logo-wordmark.svg` (if combination mark; else copy)
95
+ - `.taketomarket/brand/logo-mono-light.svg` (black version)
96
+ - `.taketomarket/brand/logo-mono-dark.svg` (white version)
97
+ - `.taketomarket/brand/logo-favicon.svg` (simplified for 32x32)
98
+ - `.taketomarket/brand/logo@1x.png` (PNG via svg-render)
99
+ - `.taketomarket/brand/logo@2x.png` (2x PNG)
100
+
101
+ ## Step 9: Append to BRAND.md
102
+
103
+ Fill in the `## Logo` section of BRAND.md (template at templates/reference-files/brand.md):
104
+ - File paths.
105
+ - Type.
106
+ - Rationale (3-4 sentences).
107
+ - Vision-review history (which rounds, what was critiqued, what was iterated).
108
+
109
+ ## Step 10: Confirm
110
+
111
+ AskUserQuestion (priority: critical):
112
+ - "Logo saved to .taketomarket/brand/. BRAND.md updated. Confirm or restart?"
113
+ - "Confirm" / "Start over"
@@ -0,0 +1,83 @@
1
+ # Init Sub-Workflow: PRODUCT-DNA generation
2
+
3
+ **Purpose:** Generate `.taketomarket/PRODUCT-DNA.md` combining a codebase-derived spec with a manifesto interview.
4
+
5
+ **Called by:** `workflows/setup/init.md` after positioning + brand + ICP sections.
6
+
7
+ ---
8
+
9
+ ## Step 1: Codebase scan
10
+
11
+ Run:
12
+
13
+ ```bash
14
+ node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs scan-codebase --raw > /tmp/ttm-scan.json
15
+ ```
16
+
17
+ Parse the JSON into variables `scan.stack`, `scan.monorepo`, `scan.featureCandidates`.
18
+
19
+ ## Step 2: Confirm feature areas with user
20
+
21
+ Display the auto-detected feature candidates. Use AskUserQuestion (multiSelect: true, priority: critical):
22
+ - question: "These directories look like feature areas. Which ones are real features (vs. infrastructure)?"
23
+ - options: one per detected dir, plus "Other"
24
+
25
+ User-selected features become the `### Feature areas` list. "Other" prompts a follow-up freeform.
26
+
27
+ ## Step 3: Confirm tech stack
28
+
29
+ Print detected stack. Ask user (priority: critical):
30
+ - question: "Detected stack: [list]. Add anything missing?"
31
+ - options: ["Looks complete", "Add more"]
32
+
33
+ If "Add more": freeform input.
34
+
35
+ ## Step 4: JTBD interview
36
+
37
+ Freeform questions (priority: critical):
38
+ 1. "In one sentence: when your customer hires your product, what's the ONE job they're trying to get done?"
39
+ 2. "What are 1-2 secondary jobs the same customer also uses your product for?"
40
+
41
+ ## Step 5: Stage
42
+
43
+ AskUserQuestion (priority: critical):
44
+ - options: Pre-MVP, MVP, Beta, GA, Mature.
45
+
46
+ ## Step 6: Manifesto - Beliefs
47
+
48
+ Freeform (priority: critical):
49
+ "Give me 3 to 5 things you believe about your space that most other people don't. These are your beliefs that drive product decisions. Be opinionated."
50
+
51
+ Validate: minimum 3, max 5. If user gives generic "we care about quality" beliefs, push back: "Be more specific. What do most companies in your space do that you think is wrong?"
52
+
53
+ ## Step 7: Manifesto - Anti-status-quo
54
+
55
+ Freeform (priority: critical):
56
+ "What 1-3 things in your space are you AGAINST? What conventional wisdom are you rejecting?"
57
+
58
+ ## Step 8: Manifesto - Worldview
59
+
60
+ Freeform (priority: critical):
61
+ "In 2-3 paragraphs, tell me the story of why this product exists. Not marketing copy - actual motivation. Read like a founder's letter."
62
+
63
+ Validate: minimum 80 words. Reject if user gives marketing buzz.
64
+
65
+ ## Step 9: Founding-team voice (optional)
66
+
67
+ Non-critical. AskUserQuestion:
68
+ - "Do you want to capture an authorial voice sample? (Optional, makes content more on-brand later.)"
69
+ - "Yes, paste samples now" / "Skip"
70
+
71
+ If yes: freeform "Paste 2-3 example sentences that capture how you (or a co-founder) personally write."
72
+
73
+ ## Step 10: Generate PRODUCT-DNA.md
74
+
75
+ Read `templates/reference-files/product-dna.md`. Fill in all `[bracketed placeholders]` with collected data. Write to `.taketomarket/PRODUCT-DNA.md`.
76
+
77
+ ## Step 11: Confirm
78
+
79
+ Display the generated file path + ask user to review. AskUserQuestion (priority: critical):
80
+ - "PRODUCT-DNA.md written to .taketomarket/PRODUCT-DNA.md. Review now?"
81
+ - "Open for review" / "Looks good, continue"
82
+
83
+ If "Open for review": print the file contents. Then ask if any edits needed.
@@ -8,6 +8,18 @@ The workflow orchestrates the sequence; this file provides the question content.
8
8
 
9
9
  ---
10
10
 
11
+ ## Priority convention (v2.3.0)
12
+
13
+ Every question is tagged `priority: critical` or `priority: non-critical`.
14
+
15
+ When `.taketomarket/CONFIG.md` has `yolo: true`:
16
+ - `critical` questions are ALWAYS asked.
17
+ - `non-critical` questions are skipped and answered with the documented `default:` value.
18
+
19
+ A question becomes critical if its answer feeds the meta-gate wall (positioning drift, must-not-say, banned words, ICP boundary) OR the manifesto/identity foundation.
20
+
21
+ ---
22
+
11
23
  ## Section 1: Product and Positioning
12
24
 
13
25
  ### Structured Questions (AskUserQuestion)
@@ -15,6 +27,8 @@ The workflow orchestrates the sequence; this file provides the question content.
15
27
  **Product Category**
16
28
  - header: "Category"
17
29
  - question: "What category does your product compete in?"
30
+ - priority: critical
31
+ - default: null
18
32
  - multiSelect: false
19
33
  - options:
20
34
  - label: "SaaS / Software"
@@ -30,11 +44,30 @@ The workflow orchestrates the sequence; this file provides the question content.
30
44
 
31
45
  ### Freeform Questions
32
46
 
33
- 1. "Tell me about your product or service. What does it do, and who is it for?"
34
- 2. "What's the ONE thing your product does that competitors don't? Not a general advantage -- a specific capability or mechanism."
35
- 3. "Give me 3 proof points -- specific numbers, case studies, or benchmarks that back up your differentiator. Each needs a source."
36
- 4. "What terms or phrases should we NEVER use in our marketing? Give a reason for each."
37
- 5. "Who are you positioning against? Not just competitors -- what alternatives does your target audience use today?"
47
+ 1. **Product description**
48
+ - question: "Tell me about your product or service. What does it do, and who is it for?"
49
+ - priority: critical
50
+ - default: null
51
+
52
+ 2. **Primary differentiator**
53
+ - question: "What's the ONE thing your product does that competitors don't? Not a general advantage -- a specific capability or mechanism."
54
+ - priority: critical
55
+ - default: null
56
+
57
+ 3. **Proof points**
58
+ - question: "Give me 3 proof points -- specific numbers, case studies, or benchmarks that back up your differentiator. Each needs a source."
59
+ - priority: critical
60
+ - default: null
61
+
62
+ 4. **Must-not-say terms**
63
+ - question: "What terms or phrases should we NEVER use in our marketing? Give a reason for each."
64
+ - priority: critical
65
+ - default: null
66
+
67
+ 5. **Competitive frame**
68
+ - question: "Who are you positioning against? Not just competitors -- what alternatives does your target audience use today?"
69
+ - priority: critical
70
+ - default: null
38
71
 
39
72
  ### Template Fields Collected
40
73
 
@@ -49,6 +82,8 @@ positioning.md: Category, Target audience, Primary differentiator, Proof points
49
82
  **Voice Archetype**
50
83
  - header: "Voice"
51
84
  - question: "Which voice archetype best describes your brand?"
85
+ - priority: critical
86
+ - default: null
52
87
  - multiSelect: false
53
88
  - options:
54
89
  - label: "Authoritative Expert"
@@ -67,6 +102,8 @@ positioning.md: Category, Target audience, Primary differentiator, Proof points
67
102
  **Formality Level**
68
103
  - header: "Formality"
69
104
  - question: "How formal is your brand's communication?"
105
+ - priority: non-critical
106
+ - default: "Conversational"
70
107
  - multiSelect: false
71
108
  - options:
72
109
  - label: "Very formal"
@@ -82,10 +119,25 @@ positioning.md: Category, Target audience, Primary differentiator, Proof points
82
119
 
83
120
  ### Freeform Questions
84
121
 
85
- 1. "Describe your brand's personality in 2-3 sentences. How should your content sound?"
86
- 2. "Give me an example of a sentence that sounds exactly like your brand. Then give me one that sounds nothing like it."
87
- 3. "What words or phrases are absolutely banned from your marketing? Why?"
88
- 4. "How should your tone shift between blog posts, social media, email, and landing pages?"
122
+ 1. **Brand personality**
123
+ - question: "Describe your brand's personality in 2-3 sentences. How should your content sound?"
124
+ - priority: critical
125
+ - default: null
126
+
127
+ 2. **Example sentences**
128
+ - question: "Give me an example of a sentence that sounds exactly like your brand. Then give me one that sounds nothing like it."
129
+ - priority: non-critical
130
+ - default: null
131
+
132
+ 3. **Banned words**
133
+ - question: "What words or phrases are absolutely banned from your marketing? Why?"
134
+ - priority: critical
135
+ - default: null
136
+
137
+ 4. **Tone shift per channel**
138
+ - question: "How should your tone shift between blog posts, social media, email, and landing pages?"
139
+ - priority: non-critical
140
+ - default: "Match section 2 voice archetype across all channels"
89
141
 
90
142
  ### Template Fields Collected
91
143
 
@@ -101,12 +153,35 @@ None -- this section is entirely freeform to capture rich qualitative data.
101
153
 
102
154
  ### Freeform Questions
103
155
 
104
- 1. "Describe your ideal customer. Include their role, company size, industry, and any geographic focus."
105
- 2. "What is the main job your customer is trying to get done when they find your product?"
106
- 3. "What are the top 3 pain points that drive them to look for a solution like yours? How severe and frequent is each?"
107
- 4. "What events or situations trigger them to start looking for a solution?"
108
- 5. "Who should we explicitly NOT target? Describe your anti-ICP and why they are a bad fit."
109
- 6. "Share 3-5 exact phrases your customers use to describe their problems. These can come from support tickets, reviews, sales calls, or interviews."
156
+ 1. **Ideal customer description**
157
+ - question: "Describe your ideal customer. Include their role, company size, industry, and any geographic focus."
158
+ - priority: critical
159
+ - default: null
160
+
161
+ 2. **Jobs to be done**
162
+ - question: "What is the main job your customer is trying to get done when they find your product?"
163
+ - priority: critical
164
+ - default: null
165
+
166
+ 3. **Pain points**
167
+ - question: "What are the top 3 pain points that drive them to look for a solution like yours? How severe and frequent is each?"
168
+ - priority: critical
169
+ - default: null
170
+
171
+ 4. **Buying triggers**
172
+ - question: "What events or situations trigger them to start looking for a solution?"
173
+ - priority: non-critical
174
+ - default: null
175
+
176
+ 5. **Anti-ICP**
177
+ - question: "Who should we explicitly NOT target? Describe your anti-ICP and why they are a bad fit."
178
+ - priority: critical
179
+ - default: null
180
+
181
+ 6. **Customer language**
182
+ - question: "Share 3-5 exact phrases your customers use to describe their problems. These can come from support tickets, reviews, sales calls, or interviews."
183
+ - priority: non-critical
184
+ - default: null
110
185
 
111
186
  ### Template Fields Collected
112
187
 
@@ -121,6 +196,8 @@ icp.md: Primary segment, Demographics, Psychographics, JTBD, Pain points (severi
121
196
  **Primary Channel**
122
197
  - header: "Channel"
123
198
  - question: "What is your primary marketing channel?"
199
+ - priority: critical
200
+ - default: null
124
201
  - multiSelect: false
125
202
  - options:
126
203
  - label: "Organic Search / SEO"
@@ -144,10 +221,25 @@ icp.md: Primary segment, Demographics, Psychographics, JTBD, Pain points (severi
144
221
 
145
222
  ### Freeform Questions
146
223
 
147
- 1. "List all your active marketing channels with their current performance baselines (traffic, engagement, conversion rate)."
148
- 2. "Are there channels you tried and paused? Which ones and why?"
149
- 3. "Are there channels you will never use? Which ones and why?"
150
- 4. "How is your marketing budget split across channels? Approximate percentages are fine."
224
+ 1. **Active channels baselines**
225
+ - question: "List all your active marketing channels with their current performance baselines (traffic, engagement, conversion rate)."
226
+ - priority: non-critical
227
+ - default: null
228
+
229
+ 2. **Paused channels**
230
+ - question: "Are there channels you tried and paused? Which ones and why?"
231
+ - priority: non-critical
232
+ - default: null
233
+
234
+ 3. **Banned channels**
235
+ - question: "Are there channels you will never use? Which ones and why?"
236
+ - priority: non-critical
237
+ - default: null
238
+
239
+ 4. **Budget split**
240
+ - question: "How is your marketing budget split across channels? Approximate percentages are fine."
241
+ - priority: non-critical
242
+ - default: null
151
243
 
152
244
  ### Template Fields Collected
153
245
 
@@ -163,10 +255,25 @@ None -- competitor analysis requires nuanced freeform answers.
163
255
 
164
256
  ### Freeform Questions
165
257
 
166
- 1. "Name your top 3 direct competitors. For each: what is their positioning, key strength, and key weakness?"
167
- 2. "If you drew a 2x2 positioning map for your category, what would the two axes be? Where do you and your competitors fall on it?"
168
- 3. "Estimate share of voice: who dominates the conversation in your space? On which channels?"
169
- 4. "What content do your competitors publish? Which formats and channels do they focus on, and what seems to work for them?"
258
+ 1. **Top 3 competitors**
259
+ - question: "Name your top 3 direct competitors. For each: what is their positioning, key strength, and key weakness?"
260
+ - priority: critical
261
+ - default: null
262
+
263
+ 2. **2x2 positioning map**
264
+ - question: "If you drew a 2x2 positioning map for your category, what would the two axes be? Where do you and your competitors fall on it?"
265
+ - priority: non-critical
266
+ - default: null
267
+
268
+ 3. **Share of voice**
269
+ - question: "Estimate share of voice: who dominates the conversation in your space? On which channels?"
270
+ - priority: non-critical
271
+ - default: null
272
+
273
+ 4. **Competitor content**
274
+ - question: "What content do your competitors publish? Which formats and channels do they focus on, and what seems to work for them?"
275
+ - priority: non-critical
276
+ - default: null
170
277
 
171
278
  ### Template Fields Collected
172
279
 
@@ -181,6 +288,8 @@ competitors.md: Direct competitors (positioning, strength, weakness), Positionin
181
288
  **Attribution Model**
182
289
  - header: "Attribution"
183
290
  - question: "Which attribution model do you use (or want to use)?"
291
+ - priority: non-critical
292
+ - default: "Last-touch"
184
293
  - multiSelect: false
185
294
  - options:
186
295
  - label: "Last-touch"
@@ -198,13 +307,40 @@ competitors.md: Direct competitors (positioning, strength, weakness), Positionin
198
307
 
199
308
  ### Freeform Questions
200
309
 
201
- 1. "What is your primary outcome metric for marketing? (e.g., qualified pipeline, revenue, signups). What is your target?"
202
- 2. "What secondary metrics do you track? What leading indicators help you predict outcomes?"
203
- 3. "What are your current baselines for key metrics? (Include metric name, current value, and date measured.)"
204
- 4. "What is your theme or key initiative for this quarter?"
205
- 5. "Do you have any upcoming launches or campaigns already planned? Dates and descriptions."
206
- 6. "What is your content publishing cadence per channel? (e.g., blog 2x/week, email weekly)"
207
- 7. "Are there any blackout dates -- holidays, company events, industry events where you should not publish?"
310
+ 1. **Primary outcome metric**
311
+ - question: "What is your primary outcome metric for marketing? (e.g., qualified pipeline, revenue, signups). What is your target?"
312
+ - priority: critical
313
+ - default: null
314
+
315
+ 2. **Secondary metrics**
316
+ - question: "What secondary metrics do you track? What leading indicators help you predict outcomes?"
317
+ - priority: non-critical
318
+ - default: null
319
+
320
+ 3. **Current baselines**
321
+ - question: "What are your current baselines for key metrics? (Include metric name, current value, and date measured.)"
322
+ - priority: non-critical
323
+ - default: null
324
+
325
+ 4. **Quarterly theme**
326
+ - question: "What is your theme or key initiative for this quarter?"
327
+ - priority: non-critical
328
+ - default: null
329
+
330
+ 5. **Upcoming launches**
331
+ - question: "Do you have any upcoming launches or campaigns already planned? Dates and descriptions."
332
+ - priority: non-critical
333
+ - default: null
334
+
335
+ 6. **Publishing cadence**
336
+ - question: "What is your content publishing cadence per channel? (e.g., blog 2x/week, email weekly)"
337
+ - priority: non-critical
338
+ - default: null
339
+
340
+ 7. **Blackout dates**
341
+ - question: "Are there any blackout dates -- holidays, company events, industry events where you should not publish?"
342
+ - priority: non-critical
343
+ - default: null
208
344
 
209
345
  ### Template Fields Collected
210
346