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.
- package/.claude-plugin/marketplace.json +4 -4
- package/.claude-plugin/plugin.json +2 -2
- package/README.md +34 -11
- package/bin/lib/campaign.cjs +12 -8
- package/bin/lib/codebase-scan.cjs +86 -0
- package/bin/lib/config.cjs +129 -0
- package/bin/lib/deploy.cjs +36 -0
- package/bin/lib/deviation.cjs +1 -1
- package/bin/lib/drift-log.cjs +4 -4
- package/bin/lib/health.cjs +32 -31
- package/bin/lib/install-detect.cjs +62 -0
- package/bin/lib/legacy-folder.cjs +100 -0
- package/bin/lib/playwright-check.cjs +26 -0
- package/bin/lib/site-location.cjs +22 -0
- package/bin/lib/state.cjs +3 -3
- package/bin/lib/svg-render.cjs +42 -0
- package/bin/ttm-tools.cjs +136 -4
- package/gates/base-gates.md +8 -8
- package/gates/gate-evaluation.md +8 -8
- package/install.js +37 -3
- package/package.json +10 -6
- package/playbooks/aeo.md +218 -114
- package/playbooks/affiliate.md +225 -160
- package/playbooks/email.md +236 -174
- package/playbooks/events.md +303 -213
- package/playbooks/landing-pages.md +305 -0
- package/playbooks/linkedin.md +264 -142
- package/playbooks/manifesto.md +322 -0
- package/playbooks/paid-ads.md +240 -189
- package/playbooks/positioning.md +340 -0
- package/playbooks/pr-media.md +308 -168
- package/playbooks/pseo.md +426 -0
- package/playbooks/seo.md +251 -158
- package/playbooks/social.md +253 -182
- package/playbooks/youtube.md +286 -181
- package/references/brand-color-theory.md +48 -0
- package/references/codex-image-gen-research.md +58 -0
- package/references/context-loading.md +6 -6
- package/references/humanizer-patterns.md +433 -0
- package/references/inline-education-blurbs.md +461 -0
- package/references/landing-page-anatomy.md +64 -0
- package/references/linkedin-post-patterns.md +174 -0
- package/references/logo-design-principles.md +55 -0
- package/references/meta-gate-evaluation.md +3 -3
- package/references/obra-superpowers-conventions.md +170 -0
- package/references/playbook-leaders.md +472 -0
- package/references/playwright-mcp-setup.md +164 -0
- package/references/positioning-check-report.md +2 -2
- package/references/pseo-page-anatomy.md +56 -0
- package/references/pseo-templates/alternative-anatomy.md +31 -0
- package/references/pseo-templates/alternative-content-playbook.md +32 -0
- package/references/pseo-templates/blog-anatomy.md +28 -0
- package/references/pseo-templates/blog-content-playbook.md +36 -0
- package/references/pseo-templates/comparison-anatomy.md +29 -0
- package/references/pseo-templates/comparison-content-playbook.md +35 -0
- package/references/pseo-templates/use-case-anatomy.md +28 -0
- package/references/pseo-templates/use-case-content-playbook.md +30 -0
- package/skills/ttm-101/SKILL.md +25 -0
- package/skills/ttm-aeo-check/SKILL.md +17 -12
- package/skills/ttm-affiliate-kit/SKILL.md +5 -0
- package/skills/ttm-archive/SKILL.md +5 -0
- package/skills/ttm-brand-refresh/SKILL.md +5 -0
- package/skills/ttm-brief/SKILL.md +5 -0
- package/skills/ttm-competitor-scan/SKILL.md +5 -0
- package/skills/ttm-deploy/SKILL.md +22 -0
- package/skills/ttm-discover/SKILL.md +17 -0
- package/skills/ttm-email-check/SKILL.md +17 -0
- package/skills/ttm-email-preflight/SKILL.md +17 -11
- package/skills/ttm-fix/SKILL.md +5 -0
- package/skills/ttm-health/SKILL.md +6 -1
- package/skills/ttm-humanize/SKILL.md +33 -0
- package/skills/ttm-icp-refresh/SKILL.md +5 -0
- package/skills/ttm-improve-skill/SKILL.md +18 -0
- package/skills/ttm-init/SKILL.md +10 -3
- package/skills/ttm-keyword-map/SKILL.md +17 -11
- package/skills/ttm-landing/SKILL.md +19 -0
- package/skills/ttm-learn/SKILL.md +5 -0
- package/skills/ttm-linkedin-post/SKILL.md +26 -0
- package/skills/ttm-measure/SKILL.md +5 -0
- package/skills/ttm-new-campaign/SKILL.md +5 -0
- package/skills/ttm-next/SKILL.md +5 -0
- package/skills/ttm-playwright-setup/SKILL.md +18 -0
- package/skills/ttm-positioning-check/SKILL.md +5 -0
- package/skills/ttm-positioning-shift/SKILL.md +5 -0
- package/skills/ttm-produce/SKILL.md +5 -0
- package/skills/ttm-pseo/SKILL.md +26 -0
- package/skills/ttm-repurpose/SKILL.md +5 -0
- package/skills/ttm-request-skill/SKILL.md +18 -0
- package/skills/ttm-research/SKILL.md +18 -6
- package/skills/ttm-resume/SKILL.md +5 -0
- package/skills/ttm-review/SKILL.md +5 -0
- package/skills/ttm-seo/SKILL.md +64 -0
- package/skills/ttm-seo-audit/SKILL.md +17 -12
- package/skills/ttm-ship/SKILL.md +5 -0
- package/skills/ttm-state/SKILL.md +5 -0
- package/skills/ttm-update/SKILL.md +152 -4
- package/skills/ttm-verify/SKILL.md +5 -0
- package/templates/agents-md.md +14 -4
- package/templates/campaign-research.md +6 -6
- package/templates/campaign-state.md +1 -1
- package/templates/claude-md.md +14 -4
- package/templates/linkedin-base-template.md +48 -0
- package/templates/next-step-footer.md +13 -0
- package/templates/production-manifest.json +4 -4
- package/templates/pseo/alternative-cms-schema.json +65 -0
- package/templates/pseo/blog-cms-schema.json +55 -0
- package/templates/pseo/comparison-cms-schema.json +56 -0
- package/templates/pseo/use-case-cms-schema.json +62 -0
- package/templates/reference-files/brand.md +51 -0
- package/templates/reference-files/product-dna.md +73 -0
- package/templates/site-scaffold/app/globals.css +2 -0
- package/templates/site-scaffold/app/layout.tsx +17 -0
- package/templates/site-scaffold/app/page.tsx +33 -0
- package/templates/site-scaffold/app/robots.ts +8 -0
- package/templates/site-scaffold/app/sitemap.ts +10 -0
- package/templates/site-scaffold/app/tokens.css +21 -0
- package/templates/site-scaffold/components/Comparison.tsx +14 -0
- package/templates/site-scaffold/components/Faq.tsx +14 -0
- package/templates/site-scaffold/components/Features.tsx +14 -0
- package/templates/site-scaffold/components/FinalCta.tsx +17 -0
- package/templates/site-scaffold/components/Footer.tsx +12 -0
- package/templates/site-scaffold/components/Hero.tsx +22 -0
- package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
- package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
- package/templates/site-scaffold/components/Problem.tsx +14 -0
- package/templates/site-scaffold/components/SocialProof.tsx +14 -0
- package/templates/site-scaffold/components/Solution.tsx +14 -0
- package/templates/site-scaffold/components/Testimonials.tsx +14 -0
- package/templates/site-scaffold/components/UseCases.tsx +14 -0
- package/templates/site-scaffold/content/.gitkeep +0 -0
- package/templates/site-scaffold/lib/.gitkeep +0 -0
- package/templates/site-scaffold/next.config.mjs +10 -0
- package/templates/site-scaffold/package.json +25 -0
- package/templates/site-scaffold/postcss.config.mjs +3 -0
- package/templates/site-scaffold/public/llms.txt +9 -0
- package/templates/site-scaffold/tsconfig.json +21 -0
- package/templates/verification-report.md +1 -1
- package/workflows/channel/linkedin-post.md +178 -0
- package/workflows/discipline/affiliate-kit.md +65 -6
- package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
- package/workflows/discipline/repurpose.md +82 -31
- package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
- package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
- package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
- package/workflows/education/ttm-101.md +114 -0
- package/workflows/lifecycle/brief-positioning-check.md +1 -1
- package/workflows/lifecycle/brief.md +64 -28
- package/workflows/lifecycle/{research.md → discover.md} +61 -19
- package/workflows/lifecycle/fix.md +72 -37
- package/workflows/lifecycle/humanize.md +280 -0
- package/workflows/lifecycle/learn.md +72 -35
- package/workflows/lifecycle/measure.md +54 -18
- package/workflows/lifecycle/produce.md +88 -37
- package/workflows/lifecycle/review.md +71 -25
- package/workflows/lifecycle/ship.md +62 -18
- package/workflows/lifecycle/verify.md +72 -26
- package/workflows/reference-mgmt/brand-refresh.md +50 -13
- package/workflows/reference-mgmt/competitor-scan.md +51 -15
- package/workflows/reference-mgmt/icp-refresh.md +48 -12
- package/workflows/reference-mgmt/positioning-check.md +55 -20
- package/workflows/reference-mgmt/positioning-shift.md +53 -17
- package/workflows/setup/init-brand-colors.md +75 -0
- package/workflows/setup/init-logo.md +113 -0
- package/workflows/setup/init-product-dna.md +83 -0
- package/workflows/setup/init-questions.md +166 -30
- package/workflows/setup/init-validation.md +22 -0
- package/workflows/setup/init.md +144 -39
- package/workflows/setup/new-campaign.md +48 -12
- package/workflows/site/deploy.md +98 -0
- package/workflows/site/landing.md +156 -0
- package/workflows/site/pseo.md +96 -0
- package/workflows/site/quality-gates.md +88 -0
- package/workflows/utility/archive.md +45 -9
- package/workflows/utility/health.md +77 -3
- package/workflows/utility/improve-skill.md +233 -0
- package/workflows/utility/next.md +38 -2
- package/workflows/utility/playwright-setup.md +128 -0
- package/workflows/utility/request-skill.md +218 -0
- package/workflows/utility/resume.md +40 -3
- 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 .
|
|
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 `.
|
|
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
|
-
- `.
|
|
58
|
-
- `.
|
|
59
|
-
- `.
|
|
60
|
-
- `.
|
|
61
|
-
- `.
|
|
62
|
-
- `.
|
|
63
|
-
- `.
|
|
64
|
-
- `.
|
|
65
|
-
- `.
|
|
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
|
-
- `.
|
|
97
|
+
- `.taketomarket/POSITIONING.md` (full -- needed for field comparison and History table)
|
|
69
98
|
|
|
70
|
-
If `.
|
|
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 `.
|
|
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: .
|
|
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
|
-
- `.
|
|
367
|
-
- `.
|
|
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.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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.
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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.
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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
|
|