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