vibebusiness 1.2.80 → 1.2.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +31 -31
  3. package/.next/standalone/.next/app-path-routes-manifest.json +1 -1
  4. package/.next/standalone/.next/build-manifest.json +2 -2
  5. package/.next/standalone/.next/prerender-manifest.json +1 -1
  6. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  8. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  9. package/.next/standalone/.next/server/app/api/analyze/route.js.nft.json +1 -1
  10. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/api/epics/[id]/ideas/route.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/api/epics/[id]/route.js.nft.json +1 -1
  13. package/.next/standalone/.next/server/app/api/epics/route.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/api/goals/[id]/kpis/route.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
  16. package/.next/standalone/.next/server/app/api/goals/route.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/api/hypotheses/[id]/route.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/api/hypotheses/route.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/api/ideas/[id]/card/route.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/api/ideas/[id]/comments/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/ideas/[id]/implement/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/ideas/[id]/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/ideas/[id]/transition/route.js +1 -1
  24. package/.next/standalone/.next/server/app/api/ideas/[id]/transition/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/ideas/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/implementations/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/kpis/refresh/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/social/[id]/publish/route.js +1 -1
  29. package/.next/standalone/.next/server/app/api/social/[id]/publish/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/social/[id]/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/goals/page.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/goals/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/hypotheses/[id]/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/hypotheses/page.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/hypotheses/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/ideas/[id]/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/ideas/[id]/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/roadmap/[id]/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/roadmap/investors/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/roadmap/investors/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/roadmap/page.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/roadmap/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/roadmap/public/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/roadmap/public/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/sessions/page.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/settings.html +1 -1
  53. package/.next/standalone/.next/server/app/settings.rsc +1 -1
  54. package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/social.html +1 -1
  56. package/.next/standalone/.next/server/app/social.rsc +2 -2
  57. package/.next/standalone/.next/server/app/updates/[id]/page.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/updates/[id]/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/updates/new/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/updates/new.html +1 -1
  61. package/.next/standalone/.next/server/app/updates/new.rsc +2 -2
  62. package/.next/standalone/.next/server/app/updates/page.js.nft.json +1 -1
  63. package/.next/standalone/.next/server/app/updates/page_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app-paths-manifest.json +21 -21
  65. package/.next/standalone/.next/server/chunks/{3794.js → 7151.js} +27 -27
  66. package/.next/standalone/.next/server/pages/404.html +1 -1
  67. package/.next/standalone/.next/server/pages/500.html +1 -1
  68. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  69. package/.next/standalone/data/business-context.json +1 -1
  70. package/.next/standalone/data/heartbeat-sessions.json +228 -0
  71. package/.next/standalone/data/ideas.json +510 -34
  72. package/.next/standalone/data/implementations.json +129 -0
  73. package/.next/standalone/data/videos/staging/while-you-slept-demo.json +66 -0
  74. package/.next/standalone/data/videos/while-you-slept-demo-feed.mp4 +0 -0
  75. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/c99d23d3548030c8ff8de678c71eeb15/0.pack +0 -0
  76. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/c99d23d3548030c8ff8de678c71eeb15/1.pack +0 -0
  77. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/c99d23d3548030c8ff8de678c71eeb15/2.pack +0 -0
  78. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/c99d23d3548030c8ff8de678c71eeb15/index.pack +0 -0
  79. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/c99d23d3548030c8ff8de678c71eeb15/index.pack.old +0 -0
  80. package/.next/standalone/package.json +1 -1
  81. package/.next/standalone/scripts/analyze.ts +1 -15
  82. package/.next/standalone/templates/commands/build-page.md +163 -0
  83. package/.next/standalone/templates/commands/email-marketing.md +339 -0
  84. package/.next/standalone/templates/commands/growth-audit.md +85 -0
  85. package/.next/standalone/templates/commands/launch-campaign.md +84 -0
  86. package/.next/standalone/templates/commands/manage.md +147 -0
  87. package/.next/standalone/templates/commands/measure-page.md +89 -0
  88. package/.next/standalone/templates/commands/positioning.md +128 -0
  89. package/.next/standalone/templates/commands/pricing-analysis.md +91 -0
  90. package/.next/standalone/templates/commands/promo-copy.md +186 -0
  91. package/.next/standalone/templates/commands/promo-video.md +75 -0
  92. package/.next/standalone/templates/commands/research-competitors.md +124 -0
  93. package/.next/standalone/templates/commands/setup-payments.md +107 -0
  94. package/.next/standalone/templates/commands/setup-posthog.md +116 -0
  95. package/.next/standalone/templates/commands/social-media.md +47 -0
  96. package/.next/standalone/templates/commands/status-summary.md +103 -0
  97. package/.next/standalone/templates/commands/validate-idea.md +102 -0
  98. package/.next/standalone/templates/emails/__tests__/validate-templates.test.ts +147 -0
  99. package/.next/standalone/templates/emails/day3-activation-feedback.txt +14 -0
  100. package/.next/standalone/templates/emails/day30-pmf-feedback.txt +19 -0
  101. package/.next/static/chunks/429-8f4030371ebef5c3.js +1 -0
  102. package/.next/static/chunks/827-6cf4bfc10d1ff0c7.js +1 -0
  103. package/.next/static/chunks/app/goals/[id]/page-231bb4daae0f06eb.js +1 -0
  104. package/.next/static/chunks/app/ideas/[id]/page-b3dfe1e61fc656a4.js +1 -0
  105. package/.next/static/chunks/app/roadmap/[id]/page-b93a96f017c8d3dd.js +1 -0
  106. package/.next/static/chunks/app/social/page-5211c78a5f37df65.js +1 -0
  107. package/.next/static/chunks/app/updates/new/page-dcc67ffca587dcc2.js +1 -0
  108. package/.next/static/css/654766eb547c6bab.css +3 -0
  109. package/dist/scripts/analyze.js +1 -14
  110. package/dist/scripts/heartbeat.js +224 -130
  111. package/package.json +1 -1
  112. package/scripts/lib/video/compositions/DemoVideo.tsx +425 -0
  113. package/scripts/lib/video/compositions/Root.tsx +24 -1
  114. package/.next/static/chunks/429-c3cc9856a8a9d0d4.js +0 -1
  115. package/.next/static/chunks/827-d5a9d09b31d7eb1c.js +0 -1
  116. package/.next/static/chunks/app/goals/[id]/page-7a60dffb8ee860ed.js +0 -1
  117. package/.next/static/chunks/app/ideas/[id]/page-565f78e223048e74.js +0 -1
  118. package/.next/static/chunks/app/roadmap/[id]/page-54f51490662106f5.js +0 -1
  119. package/.next/static/chunks/app/social/page-574752c4e67413de.js +0 -1
  120. package/.next/static/chunks/app/updates/new/page-c5da11133140a7f4.js +0 -1
  121. package/.next/static/css/ba6f5fe78931fee2.css +0 -3
  122. /package/.next/static/{9C8sbF668J83TlKDjSvQm → wJT1h-ifHTtYVlXZG2PFS}/_buildManifest.js +0 -0
  123. /package/.next/static/{9C8sbF668J83TlKDjSvQm → wJT1h-ifHTtYVlXZG2PFS}/_ssgManifest.js +0 -0
@@ -0,0 +1,89 @@
1
+ # /measure-page — Page Performance Check
2
+
3
+ ## Usage
4
+ ```
5
+ /measure-page /landing # Measure by URL path
6
+ /measure-page page-001 # Measure by page ID
7
+ /measure-page all # Measure all tracked pages
8
+ ```
9
+
10
+ ## Input
11
+ - `$ARGUMENTS` — **required**: page URL path, page ID, or "all"
12
+
13
+ ## Process
14
+
15
+ ### Step 1: Identify Page
16
+ 1. Read `data/pages.json`
17
+ 2. Find the page by:
18
+ - URL path match (e.g., `/landing`)
19
+ - Page ID match (e.g., `page-001`)
20
+ - If "all", process all pages with status "live"
21
+ 3. If page not found, list available pages and exit
22
+
23
+ ### Step 2: Gather Metrics
24
+ Check for analytics integration:
25
+
26
+ 1. **KPI Adapters** — check `data/business-context.json` for configured analytics adapters
27
+ 2. **Manual Input** — if no adapter, ask the user for metrics:
28
+ - Bounce rate (%)
29
+ - Conversion rate (%)
30
+ - Average time on page (seconds)
31
+ - Total visitors (in measurement period)
32
+
33
+ ### Step 3: Benchmark Comparison
34
+ Compare metrics against:
35
+
36
+ 1. **Industry benchmarks** (use WebSearch if needed):
37
+ - Landing page average bounce rate: 40-60%
38
+ - Landing page average conversion rate: 2-5%
39
+ - Good time on page: >60 seconds
40
+
41
+ 2. **Competitor pages** — if competitor data exists in `data/competitors.json`, compare:
42
+ - Our CTA clarity vs. theirs
43
+ - Our social proof depth vs. theirs
44
+ - Our headline specificity vs. theirs
45
+
46
+ ### Step 4: Identify Improvements
47
+ Based on metrics and benchmarks, identify specific improvement opportunities:
48
+
49
+ - **High bounce rate (>60%)** → headline mismatch, slow load, unclear value prop
50
+ - **Low conversion (<2%)** → weak CTA, missing social proof, too many options
51
+ - **Low time on page (<30s)** → content not engaging, poor above-the-fold
52
+ - **Good metrics** → consider A/B test variations for further optimization
53
+
54
+ For each issue, provide:
55
+ - The specific problem
56
+ - Evidence from the metrics
57
+ - Recommended fix (referencing positioning data)
58
+ - Expected impact
59
+
60
+ ### Step 5: Update Pages Data
61
+ Update `data/pages.json` with the measurements:
62
+ ```json
63
+ {
64
+ "metrics": {
65
+ "bounce_rate": 45.2,
66
+ "conversion_rate": 3.1,
67
+ "avg_time_on_page": 87,
68
+ "visitors": 1250
69
+ }
70
+ }
71
+ ```
72
+
73
+ ### Step 6: Generate Optimization Ideas
74
+ If metrics are below benchmarks, generate improvement ideas in `data/ideas.json`:
75
+ - Category: "growth" or "ux_design"
76
+ - Tag with page ID
77
+ - Include specific, actionable implementation plan
78
+ - Reference positioning data for copy improvements
79
+
80
+ ### Step 7: Output
81
+ Print:
82
+ - Current metrics vs. benchmarks (table format)
83
+ - Performance grade (A/B/C/D/F)
84
+ - Top 3 improvement recommendations
85
+ - Ideas generated (if any)
86
+
87
+ ## Output Files
88
+ - `data/pages.json` — updated metrics
89
+ - `data/ideas.json` — new optimization ideas (if applicable)
@@ -0,0 +1,128 @@
1
+ # /positioning — Positioning & Copy Framework
2
+
3
+ ## Usage
4
+ ```
5
+ /positioning # Full analysis (default)
6
+ /positioning copy-bank # Regenerate copy variations using existing positioning
7
+ /positioning refresh # Re-analyze after new competitor data
8
+ ```
9
+
10
+ ## Input
11
+ - `$ARGUMENTS` — optional: "copy-bank" or "refresh"
12
+
13
+ ## Process
14
+
15
+ ### Step 1: Load Context
16
+ 1. Read `data/competitors.json` — all competitor profiles
17
+ 2. Read `data/business-context.json` — product info, funnels, monetization
18
+ 3. Read `data/positioning.json` — existing positioning (if any)
19
+ 4. Determine mode:
20
+ - Empty → full analysis
21
+ - `"copy-bank"` → skip positioning analysis, regenerate copy only
22
+ - `"refresh"` → full re-analysis treating existing positioning as draft
23
+
24
+ ### Step 2: Market Landscape Analysis
25
+ **Skip if mode is "copy-bank".**
26
+
27
+ If no competitor data exists, run lightweight WebSearch queries:
28
+ - `"[product category] market landscape [year]"`
29
+ - `"[product category] comparison"`
30
+
31
+ Map all competitors on these axes:
32
+ - **Price vs. Features** — who's premium vs. budget?
33
+ - **Audience segments** — developers, SMBs, enterprise, specific verticals?
34
+ - **Positioning angles** — speed, simplicity, power, price, trust?
35
+
36
+ Identify:
37
+ - Which quadrants are crowded vs. empty?
38
+ - Which audience segments are underserved?
39
+ - What messaging angles are overused?
40
+
41
+ ### Step 3: Positioning Definition
42
+ Define or refine:
43
+
44
+ 1. **Ideal Customer Profile (ICP)**:
45
+ - Primary audience: who benefits most?
46
+ - Secondary audiences: who else uses this?
47
+ - Anti-personas: who is NOT our customer? (important for focus)
48
+
49
+ 2. **Value Proposition**: One clear sentence — what do we do, for whom, and why is it better?
50
+
51
+ 3. **Differentiators**: 3-5 specific things that make us different. Each must be:
52
+ - True (we actually do this)
53
+ - Relevant (customers care about this)
54
+ - Unique (competitors don't do this or do it worse)
55
+
56
+ 4. **Messaging Pillars**: 3-4 themes that all our messaging reinforces. For each:
57
+ - Pillar name (e.g., "Simplicity", "Speed", "Trust")
58
+ - Proof points (specific evidence)
59
+ - Counter-objections (how to respond when challenged)
60
+
61
+ ### Step 4: Generate Copy Bank
62
+ Generate copy variations segmented by funnel stage (TOFU/MOFU/BOFU) and audience:
63
+
64
+ 1. **Headlines** (5+ variations):
65
+ - TOFU: awareness/education focused
66
+ - MOFU: consideration/comparison focused
67
+ - BOFU: decision/urgency focused
68
+
69
+ 2. **Subheadlines** (3+ variations): support the headline with specifics
70
+
71
+ 3. **CTAs** (5+ variations):
72
+ - Primary: main action (e.g., "Start Free Trial")
73
+ - Secondary: lower commitment (e.g., "See Demo")
74
+ - Micro: in-content (e.g., "Learn More")
75
+
76
+ 4. **Social Proof** snippets: stats, testimonials, logos, case studies
77
+
78
+ 5. **Objection Handlers**: for each common objection, a concise response
79
+ - "Too expensive" → ...
80
+ - "I already use X" → ...
81
+ - "Is it secure?" → ...
82
+
83
+ 6. **Pain Points**: ranked by intensity and audience segment
84
+
85
+ ### Step 5: Write Output
86
+ Write to `data/positioning.json`:
87
+ ```json
88
+ {
89
+ "last_updated": "YYYY-MM-DD",
90
+ "current": {
91
+ "tagline": "...",
92
+ "value_proposition": "...",
93
+ "target_audience": {
94
+ "primary": "...",
95
+ "secondary": ["..."],
96
+ "anti_personas": ["..."]
97
+ },
98
+ "differentiators": ["..."],
99
+ "messaging_pillars": [
100
+ {
101
+ "pillar": "...",
102
+ "proof_points": ["..."],
103
+ "counter_objections": ["..."]
104
+ }
105
+ ]
106
+ },
107
+ "copy_bank": {
108
+ "headlines": [{ "text": "...", "audience": "...", "funnel_stage": "tofu" }],
109
+ "subheadlines": [{ "text": "...", "audience": "...", "funnel_stage": "tofu" }],
110
+ "ctas": [{ "text": "...", "context": "...", "conversion_rate": null }],
111
+ "social_proof": [{ "text": "...", "type": "stat" }],
112
+ "objection_handlers": [{ "objection": "...", "response": "..." }],
113
+ "pain_points": [{ "pain": "...", "audience": "...", "intensity": "high" }]
114
+ }
115
+ }
116
+ ```
117
+
118
+ ### Step 6: Print Summary
119
+ Print a positioning canvas:
120
+ - Tagline and value proposition
121
+ - ICP summary
122
+ - Top 3 differentiators
123
+ - Messaging pillars overview
124
+ - Copy bank stats (N headlines, N CTAs, etc.)
125
+ - Recommendation for next step (usually: run `/build-page`)
126
+
127
+ ## Output Files
128
+ - `data/positioning.json` — positioning framework and copy bank
@@ -0,0 +1,91 @@
1
+ # /pricing-analysis — Pricing Strategy Analysis
2
+
3
+ ## Usage
4
+ ```
5
+ /pricing-analysis # Full pricing analysis (default)
6
+ /pricing-analysis benchmark # Just benchmark against competitors
7
+ /pricing-analysis optimize # Suggest optimizations for current pricing
8
+ ```
9
+
10
+ ## Input
11
+ - `$ARGUMENTS` — optional: "benchmark" or "optimize"
12
+
13
+ ## Process
14
+
15
+ ### Step 1: Load Context
16
+ 1. Read `data/competitors.json` — all competitor pricing data
17
+ 2. Read `data/business-context.json` — our current pricing and monetization
18
+ 3. Read `data/positioning.json` — our target audience and differentiators
19
+ 4. Read `data/hypotheses.json` — existing pricing hypotheses
20
+
21
+ ### Step 2: Gather Pricing Data
22
+ If competitor pricing data is incomplete, run WebSearch:
23
+ - `"[product category] pricing [year]"`
24
+ - `"how much does [similar product] cost"`
25
+ - `"[product category] pricing benchmarks SaaS"`
26
+ - For each competitor missing pricing: `"[competitor name] pricing"`
27
+
28
+ ### Step 3: Value Metric Analysis
29
+ Identify what customers pay for in this market:
30
+ - Per seat/user?
31
+ - Per usage (API calls, messages, etc.)?
32
+ - Per feature tier?
33
+ - Flat rate?
34
+
35
+ Map value metrics across all competitors:
36
+
37
+ | Competitor | Model | Entry Price | Mid Tier | Enterprise | Free Tier |
38
+ |-----------|-------|------------|----------|------------|-----------|
39
+ | ... | per seat | $X/mo | $Y/mo | Custom | Yes/No |
40
+
41
+ ### Step 4: Pricing Gap Analysis
42
+ Identify:
43
+ 1. **Underpriced features** — things we offer that competitors charge more for
44
+ 2. **Missing tiers** — market segments we're not addressing
45
+ 3. **Anchoring opportunities** — how to frame our pricing against competitors
46
+ 4. **Value perception** — is our pricing aligned with our positioning?
47
+
48
+ ### Step 5: Pricing Psychology
49
+ Apply pricing psychology principles:
50
+ - **Anchoring**: should we add a decoy tier?
51
+ - **Charm pricing**: $99 vs $100 effects
52
+ - **Tier naming**: does our naming match our audience?
53
+ - **Feature gating**: what features should gate each tier?
54
+ - **Annual vs monthly**: optimal discount for annual billing
55
+
56
+ If needed, WebSearch for:
57
+ - `"SaaS pricing psychology best practices [year]"`
58
+ - `"pricing page conversion optimization"`
59
+
60
+ ### Step 6: Generate Recommendations
61
+ Create specific pricing recommendations:
62
+
63
+ 1. **Quick wins** — changes we can make immediately
64
+ 2. **Tier restructuring** — if current tiers are suboptimal
65
+ 3. **New pricing page** — if the pricing page needs redesign
66
+ 4. **A/B test hypotheses** — experiments to validate pricing changes
67
+
68
+ ### Step 7: Create Hypothesis
69
+ If pricing changes are recommended, create a hypothesis in `data/hypotheses.json`:
70
+ ```json
71
+ {
72
+ "title": "Pricing change: [specific change]",
73
+ "statement": "If we [change], then [metric] will [improve] because [reason]",
74
+ "funnel_stage": "monetization",
75
+ "priority": "high",
76
+ "effort_to_test": "s",
77
+ "tags": ["pricing"]
78
+ }
79
+ ```
80
+
81
+ ### Step 8: Output
82
+ Print:
83
+ - Competitive pricing comparison table
84
+ - Value metric analysis
85
+ - Current pricing assessment (underpriced / overpriced / well-positioned)
86
+ - Top 3 pricing recommendations with rationale
87
+ - Expected revenue impact
88
+ - A/B test hypothesis (if generated)
89
+
90
+ ## Output Files
91
+ - `data/hypotheses.json` — pricing test hypotheses (if applicable)
@@ -0,0 +1,186 @@
1
+ # /promo-copy — Positioning-Driven Promotional Copy Generator
2
+
3
+ ## Usage
4
+ ```
5
+ /promo-copy tweet-ship # Ship announcement tweet (≤280 chars)
6
+ /promo-copy tweet-milestone # KPI milestone tweet
7
+ /promo-copy tweet-update # Product update tweet
8
+ /promo-copy tweet-thread # Multi-tweet thread (3-5 tweets)
9
+ /promo-copy ad-google {keyword} # Google Ads copy (3 headlines + 2 descriptions)
10
+ /promo-copy ad-meta {audience} # Meta/Instagram ad copy
11
+ /promo-copy linkedin # LinkedIn post (≤3000 chars)
12
+ /promo-copy landing {slug} # Landing page copy block
13
+ /promo-copy email-subject {campaign} # 5 email subject line variations
14
+ ```
15
+
16
+ ## Input
17
+ - `$ARGUMENTS` — required: copy type and optional parameters
18
+
19
+ ## Process
20
+
21
+ Parse `$ARGUMENTS` to determine the copy type. The first token is the type, the rest are parameters.
22
+
23
+ ## Positioning Integration (Required)
24
+
25
+ Before writing ANY copy, load `data/positioning.json` and extract:
26
+ - **Pain points** — Lead with the most relevant one for this channel/audience
27
+ - **Messaging pillars** — Weave 1-2 into the copy naturally
28
+ - **Objection handlers** — Preempt 1 relevant objection where appropriate
29
+ - **Social proof** — Include 1 credibility anchor (user count, shipped features, market validation)
30
+ - **CTA bank** — Pull CTAs from positioning rather than inventing generic ones
31
+ - **Headlines/Tagline** — Use copy_bank headlines as inspiration
32
+ - **Tone** — Match the founder's voice from positioning (confident, technical, direct)
33
+
34
+ Also load:
35
+ - `data/ideas.json` — For ship/milestone tweets, get specific feature details
36
+ - `data/goals.json` — For milestone copy, get KPI data
37
+ - `data/business-context.json` — Product info, audience, value proposition
38
+
39
+ ## Copy Quality Rules
40
+
41
+ These rules apply to ALL copy types. They override generic instincts.
42
+
43
+ ### Tone & Voice
44
+ - **Founder voice** — Write as a person, not a brand or marketing department
45
+ - **Confident, not hype** — "This changes how you work" not "We're SO excited!!!"
46
+ - **Technical credibility** — Don't dumb things down for developers
47
+ - **Respect the reader** — If it can be said in fewer words, do it
48
+ - **No corporate speak** — No "leverage", "synergy", "ecosystem", "revolutionize"
49
+
50
+ ### CTA Rules
51
+ - First-person verbs: "Start my analysis" not "Get started"
52
+ - Be specific: "Run your first analysis" not "Learn more"
53
+ - One CTA per copy piece (except threads/landing pages)
54
+
55
+ ### Banned Phrases
56
+ - "Game-changer", "Revolutionize", "Disrupt"
57
+ - "We're excited to announce"
58
+ - "Stay tuned", "Watch this space"
59
+ - "It's that simple" (if it takes more than 1 step, it's not)
60
+ - Generic hashtags like #startup #entrepreneur (use specific ones)
61
+
62
+ ---
63
+
64
+ ### Type: `tweet-ship`
65
+
66
+ Generate a "just shipped" tweet for the most recently shipped idea.
67
+
68
+ 1. Load the most recently shipped idea from `data/ideas.json`
69
+ 2. Write 3 tweet variations (pick the best one):
70
+ - **Hook-first**: Lead with the problem it solves, then reveal the feature
71
+ - **Result-first**: Lead with the outcome, then explain what shipped
72
+ - **Story-first**: Brief build narrative → what shipped → result
73
+ 3. Include: the feature name, what it does for users, 1-2 relevant hashtags
74
+ 4. Must be ≤280 characters
75
+ 5. Tone: excited but authentic, build-in-public energy
76
+
77
+ ### Type: `tweet-milestone`
78
+
79
+ Generate a milestone celebration tweet.
80
+
81
+ 1. Load KPI data from `data/goals.json` — find KPIs at or above target
82
+ 2. Write the tweet: metric + achievement + what it means + hashtag
83
+ 3. Include a forward-looking hook: "Next target: ..."
84
+ 4. Must be ≤280 characters
85
+
86
+ ### Type: `tweet-update`
87
+
88
+ Generate a product update tweet from positioning data.
89
+
90
+ 1. Lead with tagline or value proposition hook
91
+ 2. Include 1 specific differentiator
92
+ 3. End with CTA or hashtag
93
+ 4. Must be ≤280 characters
94
+
95
+ ### Type: `tweet-thread`
96
+
97
+ Generate a 3-5 tweet thread on a positioning topic.
98
+
99
+ 1. Tweet 1: Hook (pain point or bold claim)
100
+ 2. Tweet 2-3: Evidence/story (what you built, why it's different)
101
+ 3. Tweet 4: Social proof or result
102
+ 4. Tweet 5: CTA
103
+ 5. Each tweet ≤280 characters, numbered with emoji (1/, 2/, etc.)
104
+
105
+ ### Type: `ad-google {keyword}`
106
+
107
+ Generate Google Ads copy for a target keyword.
108
+
109
+ 1. **3 Headlines** (max 30 characters each):
110
+ - H1: Keyword + core benefit
111
+ - H2: Differentiator
112
+ - H3: Social proof or urgency
113
+ 2. **2 Descriptions** (max 90 characters each):
114
+ - D1: Expand on benefit, address pain point
115
+ - D2: CTA + differentiator
116
+ 3. Include the keyword naturally (no keyword stuffing)
117
+
118
+ ### Type: `ad-meta {audience}`
119
+
120
+ Generate Meta/Instagram ad copy.
121
+
122
+ 1. **Primary text** (125 chars ideal, 250 max): Hook + benefit + CTA
123
+ 2. **Headline** (40 chars max): Core value proposition
124
+ 3. **Description** (30 chars max): Supporting detail
125
+ 4. **CTA button**: Choose from (Learn More, Sign Up, Get Started, Try Free)
126
+ 5. Write for the specified audience segment
127
+
128
+ ### Type: `linkedin`
129
+
130
+ Generate a LinkedIn post for professional audience.
131
+
132
+ 1. **Hook line** (first line visible before "see more"): Bold claim or question
133
+ 2. **Body** (500-1500 chars): Problem → solution → proof → insight
134
+ 3. **CTA**: Engagement prompt ("What's your take?" or link to product)
135
+ 4. Format: Short paragraphs, line breaks between thoughts, 1-2 emoji max
136
+ 5. Total ≤3000 characters
137
+
138
+ ### Type: `landing {slug}`
139
+
140
+ Generate a landing page copy block.
141
+
142
+ 1. **Headline** (8-12 words): Outcome-focused, addresses primary pain point
143
+ 2. **Subheadline** (15-25 words): How the product delivers that outcome
144
+ 3. **3 Benefits**: Icon-worthy phrases (3-8 words each) with 1-sentence descriptions
145
+ 4. **CTA button text**: First-person, specific action
146
+ 5. **Social proof line**: One credibility statement
147
+
148
+ ### Type: `email-subject {campaign}`
149
+
150
+ Generate 5 email subject line variations for a campaign type.
151
+
152
+ 1. Load campaign context from `data/email-campaigns/` if available
153
+ 2. Generate 5 variations using these formulas:
154
+ - Curiosity + outcome
155
+ - Specific benefit + number
156
+ - Pattern interrupt
157
+ - Question format
158
+ - FOMO / urgency (authentic, not fake)
159
+ 3. Each under 50 characters
160
+ 4. Include preview text for each (50-90 chars)
161
+
162
+ ---
163
+
164
+ ## Output
165
+
166
+ Save the generated copy to `data/copy/{type}-{slug}-{YYYY-MM-DD}.md`:
167
+
168
+ ```markdown
169
+ # {Type} Copy — {Date}
170
+
171
+ ## Metadata
172
+ - Type: {type}
173
+ - Generated: {date}
174
+ - Positioning version: {last_updated from positioning.json}
175
+ - Parameters: {any extra params}
176
+
177
+ ## Copy
178
+
179
+ {The generated copy, clearly formatted}
180
+
181
+ ## Variations
182
+
183
+ {Alternative versions if applicable}
184
+ ```
185
+
186
+ Print a summary: copy preview, character count, file path.
@@ -0,0 +1,75 @@
1
+ # /promo-video — Promotional Video Generator (ContentFlow-AI Bridge)
2
+
3
+ ## Usage
4
+ ```
5
+ /promo-video ship {ideaId} # Generate ship announcement video from a shipped idea
6
+ /promo-video ad {topic} # Generate AI ad video (PAS/AIDA carousel → MP4)
7
+ /promo-video status # Check ContentFlow availability and list rendered videos
8
+ ```
9
+
10
+ ## Input
11
+ - `$ARGUMENTS` — required: video type and parameters
12
+
13
+ ## Process
14
+
15
+ Parse `$ARGUMENTS` to determine the video type. The first token is the type, the rest are parameters.
16
+
17
+ ---
18
+
19
+ ### Type: `ship {ideaId}`
20
+
21
+ Generate a ship announcement video from idea data.
22
+
23
+ 1. Load the idea from `data/ideas.json` by ID (or use the most recently shipped idea if no ID given)
24
+ 2. Generate carousel JSON with slides: cover → problem → solution → key changes → CTA
25
+ 3. Stage the carousel at `data/videos/staging/{ideaId}-ship.json`
26
+ 4. Call ContentFlow-AI Remotion bridge to render MP4
27
+ 5. Output saved to `data/videos/{ideaId}-ship.mp4`
28
+
29
+ Requires `contentflow.repo_path` configured in `data/business-context.json`.
30
+
31
+ ### Type: `ad {topic}`
32
+
33
+ Generate an AI ad video for a topic.
34
+
35
+ 1. Build a 5-slide carousel: cover → problem → solution → statistic → CTA
36
+ 2. Stage the carousel at `data/videos/staging/ad-{topic}.json`
37
+ 3. Render via ContentFlow
38
+ 4. Output saved to `data/videos/`
39
+
40
+ ### Type: `status`
41
+
42
+ Check the video pipeline status:
43
+ - Is ContentFlow-AI repo available?
44
+ - How many rendered videos exist?
45
+ - List recent videos with file sizes
46
+ - List staging carousel JSONs
47
+
48
+ ---
49
+
50
+ ## Prerequisites
51
+
52
+ - **ContentFlow-AI** repo must be cloned and its path set in `data/business-context.json`:
53
+ ```json
54
+ { "contentflow": { "repo_path": "/path/to/contentflow-ai" } }
55
+ ```
56
+ - ContentFlow must have Remotion installed (`npx remotion render` must work)
57
+
58
+ ## Instructions
59
+
60
+ Execute the video task by calling the skill:
61
+
62
+ ```typescript
63
+ import { executePromoVideoTask } from './scripts/skills/promo-video';
64
+
65
+ // Ship video
66
+ await executePromoVideoTask('video-render-ship-{ideaId}', description, businessContext);
67
+
68
+ // Ad video
69
+ await executePromoVideoTask('video-render-ad-{topic}', description, businessContext);
70
+
71
+ // Status check
72
+ await executePromoVideoTask('video-check-status', '', businessContext);
73
+ ```
74
+
75
+ Report the result back to the user. If ContentFlow is not configured, explain the setup steps.
@@ -0,0 +1,124 @@
1
+ # /research-competitors — Competitor Discovery & Intelligence
2
+
3
+ ## Usage
4
+ ```
5
+ /research-competitors # Discover + deep-research all (default)
6
+ /research-competitors discover # Only discover new competitors
7
+ /research-competitors refresh # Re-research all existing competitors
8
+ /research-competitors "CompetitorName" # Deep-dive on a single competitor
9
+ ```
10
+
11
+ ## Input
12
+ - `$ARGUMENTS` — optional: "discover", "refresh", or a competitor name
13
+
14
+ ## Process
15
+
16
+ ### Step 1: Load Context
17
+ 1. Read `data/business-context.json` — extract `product.name`, `product.summary`, and `competitors[]`
18
+ 2. Read `data/competitors.json` — check existing competitor profiles
19
+ 3. Determine mode from `$ARGUMENTS`:
20
+ - Empty or no args → full discovery + research
21
+ - `"discover"` → discovery only, skip deep research
22
+ - `"refresh"` → re-research all existing competitors
23
+ - Any other string → treat as competitor name for single deep-dive
24
+
25
+ ### Step 2: Discovery Phase
26
+ **Skip if mode is "refresh" or single competitor.**
27
+
28
+ Use WebSearch to discover competitors. Run these searches:
29
+ 1. `"[product category] competitors [year]"` — e.g., "legal tech platform competitors 2026"
30
+ 2. `"[product category] alternatives"` — e.g., "legal tech platform alternatives"
31
+ 3. `"best [product category] tools"` — e.g., "best legal tech tools"
32
+ 4. Product-specific queries based on `product.summary` — e.g., "AI lawyer tools brazil", "legal tech SaaS"
33
+
34
+ From search results, identify 5-10 relevant competitors. For each, extract:
35
+ - Company name
36
+ - URL
37
+ - Brief description of what they do
38
+
39
+ Merge with any competitors already listed in `business-context.json` or `competitors.json`.
40
+
41
+ ### Step 3: Deep Research Phase
42
+ For each competitor (or just the specified one in single mode):
43
+
44
+ 1. **WebFetch** their homepage → extract:
45
+ - Headline / tagline
46
+ - Value proposition
47
+ - CTA texts
48
+ - Social proof (testimonials, logos, stats)
49
+ - Target audience signals
50
+
51
+ 2. **WebSearch** for:
52
+ - `"[competitor name] pricing"` → pricing tiers, free tier
53
+ - `"[competitor name] reviews"` → strengths/weaknesses from users
54
+ - `"[competitor name] vs"` → how they position against alternatives
55
+
56
+ 3. **Analyze** and structure:
57
+ - Positioning: tagline, value proposition, target audience, differentiators
58
+ - Copy: homepage headline, CTAs, social proof, objection handling
59
+ - Growth: channels used (SEO, paid, content, social), content types
60
+ - Product: key features, pricing tiers, free tier details
61
+ - SWOT: strengths, weaknesses, opportunities for us
62
+
63
+ ### Step 4: Comparative Analysis
64
+ After researching all competitors:
65
+ 1. Build a strengths/weaknesses comparison matrix
66
+ 2. Identify positioning gaps — where is no competitor strong?
67
+ 3. Identify underserved audience segments
68
+ 4. Note opportunities for differentiation
69
+
70
+ ### Step 5: Write Output
71
+ Write structured profiles to `data/competitors.json`. Use this schema:
72
+ ```json
73
+ {
74
+ "last_updated": "YYYY-MM-DD",
75
+ "competitors": [
76
+ {
77
+ "id": "comp-001",
78
+ "name": "CompetitorX",
79
+ "url": "https://competitorx.com",
80
+ "last_researched": "YYYY-MM-DD",
81
+ "positioning": {
82
+ "tagline": "...",
83
+ "value_proposition": "...",
84
+ "target_audience": "...",
85
+ "differentiators": ["..."]
86
+ },
87
+ "copy": {
88
+ "homepage_headline": "...",
89
+ "cta_texts": ["..."],
90
+ "social_proof": ["..."],
91
+ "objection_handling": ["..."]
92
+ },
93
+ "growth": {
94
+ "channels": ["seo", "paid_search", "content"],
95
+ "content_types": ["blog", "ebook"],
96
+ "seo_keywords": ["..."]
97
+ },
98
+ "product": {
99
+ "features": ["..."],
100
+ "pricing_tiers": [{ "name": "...", "price": "...", "features": ["..."] }],
101
+ "free_tier": "..."
102
+ },
103
+ "strengths": ["..."],
104
+ "weaknesses": ["..."],
105
+ "opportunities_for_us": ["..."]
106
+ }
107
+ ]
108
+ }
109
+ ```
110
+
111
+ **Merge rules:**
112
+ - If a competitor already exists (match by name, case-insensitive), UPDATE their profile but preserve any manually added notes
113
+ - Generate sequential IDs: `comp-001`, `comp-002`, etc.
114
+ - Set `last_researched` to today's date
115
+
116
+ ### Step 6: Print Summary
117
+ Print a competitive landscape summary:
118
+ - Number of competitors discovered/updated
119
+ - Key findings: who's strongest, where the gaps are
120
+ - Top 3 opportunities for differentiation
121
+ - Recommendation for next step (usually: run `/positioning`)
122
+
123
+ ## Output Files
124
+ - `data/competitors.json` — structured competitor profiles