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
|
@@ -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.
|
package/workflows/setup/init.md
CHANGED
|
@@ -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 .
|
|
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
|
-
|
|
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: ".
|
|
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 .
|
|
68
|
-
**If "Update specific files":** Present file picker using AskUserQuestion with multiSelect: true listing all
|
|
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 .
|
|
74
|
-
mkdir -p .
|
|
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 .
|
|
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 `.
|
|
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: `.
|
|
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: `.
|
|
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: `.
|
|
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: `.
|
|
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: `.
|
|
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: `.
|
|
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: `.
|
|
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: `.
|
|
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: `.
|
|
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 `.
|
|
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
|
-
.
|
|
407
|
-
.
|
|
408
|
-
.
|
|
409
|
-
.
|
|
410
|
-
.
|
|
411
|
-
.
|
|
412
|
-
.
|
|
413
|
-
.
|
|
414
|
-
.
|
|
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
|
-
- [ ]
|
|
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
|
|
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
|
-
- `.
|
|
439
|
-
- `.
|
|
440
|
-
- `.
|
|
441
|
-
- `.
|
|
442
|
-
- `.
|
|
443
|
-
- `.
|
|
444
|
-
- `.
|
|
445
|
-
- `.
|
|
446
|
-
- `.
|
|
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 .
|
|
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 .
|
|
85
|
-
ls .
|
|
86
|
-
ls .
|
|
87
|
-
ls -d .
|
|
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
|
-
.
|
|
138
|
+
.taketomarket/CAMPAIGNS/${CAMPAIGN_SLUG}/
|
|
110
139
|
STATE.md (phase: created)
|
|
111
|
-
RESEARCH.md (pending -- run /ttm-
|
|
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-
|
|
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
|
-
- `.
|
|
131
|
-
- `.
|
|
132
|
-
- `.
|
|
133
|
-
- `.
|
|
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
|