vibebusiness 1.2.87 → 1.2.89

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 (277) hide show
  1. package/.next/standalone/.env +27 -14
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/app-build-manifest.json +89 -72
  4. package/.next/standalone/.next/app-path-routes-manifest.json +1 -1
  5. package/.next/standalone/.next/build-manifest.json +8 -8
  6. package/.next/standalone/.next/prerender-manifest.json +1 -1
  7. package/.next/standalone/.next/required-server-files.json +1 -1
  8. package/.next/standalone/.next/routes-manifest.json +1 -1
  9. package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
  10. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  12. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  13. package/.next/standalone/.next/server/app/api/analyze/route.js +1 -1
  14. package/.next/standalone/.next/server/app/api/analyze/route.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/api/briefing/route.js +1 -0
  16. package/.next/standalone/.next/server/app/api/briefing/route.js.nft.json +1 -0
  17. package/.next/standalone/.next/server/app/api/checkout/route.js +1 -1
  18. package/.next/standalone/.next/server/app/api/config/detect-repos/route.js +1 -1
  19. package/.next/standalone/.next/server/app/api/config/route.js +1 -1
  20. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/epics/[id]/ideas/route.js +1 -1
  22. package/.next/standalone/.next/server/app/api/epics/[id]/ideas/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/epics/[id]/route.js +1 -1
  24. package/.next/standalone/.next/server/app/api/epics/[id]/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/epics/route.js +1 -1
  26. package/.next/standalone/.next/server/app/api/epics/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/goals/[id]/kpis/route.js +1 -1
  28. package/.next/standalone/.next/server/app/api/goals/[id]/kpis/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/goals/[id]/route.js +1 -1
  30. package/.next/standalone/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/goals/route.js +1 -1
  32. package/.next/standalone/.next/server/app/api/goals/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/health/route.js +1 -1
  34. package/.next/standalone/.next/server/app/api/hypotheses/[id]/route.js +1 -1
  35. package/.next/standalone/.next/server/app/api/hypotheses/[id]/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/hypotheses/route.js +1 -1
  37. package/.next/standalone/.next/server/app/api/hypotheses/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/ideas/[id]/card/route.js +1 -1
  39. package/.next/standalone/.next/server/app/api/ideas/[id]/card/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/ideas/[id]/comments/route.js +1 -1
  41. package/.next/standalone/.next/server/app/api/ideas/[id]/comments/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/ideas/[id]/implement/route.js +1 -1
  43. package/.next/standalone/.next/server/app/api/ideas/[id]/implement/route.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/api/ideas/[id]/route.js +1 -1
  45. package/.next/standalone/.next/server/app/api/ideas/[id]/route.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/api/ideas/[id]/transition/route.js +1 -1
  47. package/.next/standalone/.next/server/app/api/ideas/[id]/transition/route.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/api/ideas/route.js +1 -1
  49. package/.next/standalone/.next/server/app/api/ideas/route.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/api/implementations/route.js +1 -1
  51. package/.next/standalone/.next/server/app/api/implementations/route.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/api/investor-updates/generate/route.js +1 -1
  53. package/.next/standalone/.next/server/app/api/kpis/refresh/route.js +1 -1
  54. package/.next/standalone/.next/server/app/api/kpis/refresh/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/api/license/route.js +1 -1
  56. package/.next/standalone/.next/server/app/api/portal/route.js +1 -1
  57. package/.next/standalone/.next/server/app/api/provider-status/route.js +1 -1
  58. package/.next/standalone/.next/server/app/api/social/[id]/publish/route.js +1 -1
  59. package/.next/standalone/.next/server/app/api/social/[id]/publish/route.js.nft.json +1 -1
  60. package/.next/standalone/.next/server/app/api/social/[id]/route.js +1 -1
  61. package/.next/standalone/.next/server/app/api/social/[id]/route.js.nft.json +1 -1
  62. package/.next/standalone/.next/server/app/api/social/route.js +1 -1
  63. package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/api/webhook/route.js +1 -1
  65. package/.next/standalone/.next/server/app/briefing/page.js +1 -0
  66. package/.next/standalone/.next/server/app/briefing/page.js.nft.json +1 -0
  67. package/.next/standalone/.next/server/app/briefing/page_client-reference-manifest.js +1 -0
  68. package/.next/standalone/.next/server/app/goals/[id]/page.js +1 -1
  69. package/.next/standalone/.next/server/app/goals/[id]/page.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/goals/page.js +1 -1
  72. package/.next/standalone/.next/server/app/goals/page.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/goals/page_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/hypotheses/[id]/page.js +1 -1
  75. package/.next/standalone/.next/server/app/hypotheses/[id]/page.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/hypotheses/[id]/page_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/hypotheses/page.js +1 -1
  78. package/.next/standalone/.next/server/app/hypotheses/page.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/hypotheses/page_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/ideas/[id]/page.js +1 -1
  81. package/.next/standalone/.next/server/app/ideas/[id]/page.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/ideas/[id]/page_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/index.html +1 -0
  84. package/.next/standalone/.next/server/app/index.meta +6 -0
  85. package/.next/standalone/.next/server/app/index.rsc +6 -0
  86. package/.next/standalone/.next/server/app/kanban/page.js +1 -0
  87. package/.next/standalone/.next/server/app/kanban/page.js.nft.json +1 -0
  88. package/.next/standalone/.next/server/app/kanban/page_client-reference-manifest.js +1 -0
  89. package/.next/standalone/.next/server/app/page.js +1 -1
  90. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/roadmap/[id]/page.js +1 -1
  93. package/.next/standalone/.next/server/app/roadmap/[id]/page.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/roadmap/[id]/page_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/roadmap/investors/page.js +1 -1
  96. package/.next/standalone/.next/server/app/roadmap/investors/page.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/roadmap/investors/page_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/roadmap/page.js +1 -1
  99. package/.next/standalone/.next/server/app/roadmap/page.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/roadmap/page_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/roadmap/public/page.js +1 -1
  102. package/.next/standalone/.next/server/app/roadmap/public/page.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/roadmap/public/page_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/sessions/page.js +1 -1
  105. package/.next/standalone/.next/server/app/sessions/page.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/settings/page.js +1 -1
  108. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/settings.html +1 -1
  111. package/.next/standalone/.next/server/app/settings.rsc +3 -3
  112. package/.next/standalone/.next/server/app/social/page.js +1 -1
  113. package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/social.html +1 -1
  116. package/.next/standalone/.next/server/app/social.rsc +3 -3
  117. package/.next/standalone/.next/server/app/updates/[id]/page.js +1 -1
  118. package/.next/standalone/.next/server/app/updates/[id]/page.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/updates/[id]/page_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/updates/new/page.js +1 -1
  121. package/.next/standalone/.next/server/app/updates/new/page_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/updates/new.html +1 -1
  123. package/.next/standalone/.next/server/app/updates/new.rsc +3 -3
  124. package/.next/standalone/.next/server/app/updates/page.js +1 -1
  125. package/.next/standalone/.next/server/app/updates/page.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/updates/page_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app-paths-manifest.json +18 -15
  128. package/.next/standalone/.next/server/chunks/3098.js +1 -0
  129. package/.next/standalone/.next/server/chunks/3871.js +1 -1
  130. package/.next/standalone/.next/server/chunks/4355.js +1 -0
  131. package/.next/standalone/.next/server/chunks/4471.js +2 -2
  132. package/.next/standalone/.next/server/chunks/7151.js +10 -10
  133. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  134. package/.next/standalone/.next/server/pages/404.html +1 -1
  135. package/.next/standalone/.next/server/pages/500.html +1 -1
  136. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  138. package/.next/standalone/data/business-context.json +31 -181
  139. package/.next/standalone/data/codebase-snapshot.json +64 -42
  140. package/.next/standalone/data/competitors.json +39 -559
  141. package/.next/standalone/data/config.json +16 -40
  142. package/.next/standalone/data/goals.json +35 -410
  143. package/.next/standalone/data/positioning.json +10 -127
  144. package/.next/standalone/data/sessions.json +84 -299
  145. package/.next/standalone/node_modules/@esbuild/{darwin-arm64 → darwin-x64}/bin/esbuild +0 -0
  146. package/.next/standalone/node_modules/@esbuild/{darwin-arm64 → darwin-x64}/package.json +3 -3
  147. package/.next/standalone/package.json +3 -2
  148. package/.next/standalone/scripts/analyze.ts +70 -21
  149. package/.next/standalone/scripts/implement.ts +67 -17
  150. package/.next/standalone/server.js +1 -1
  151. package/.next/standalone/templates/commands/distribution-google-ads.md +86 -0
  152. package/.next/standalone/templates/commands/distribution-meta-ads.md +106 -0
  153. package/.next/standalone/templates/commands/distribution-repurpose.md +121 -0
  154. package/.next/standalone/templates/commands/distribution-seo-content.md +115 -0
  155. package/.next/standalone/templates/commands/distribution-social-expansion.md +128 -0
  156. package/.next/static/chunks/147-b00f2ac2bbec93ae.js +1 -0
  157. package/.next/static/chunks/159-4ce492ccac6de8f7.js +1 -0
  158. package/.next/static/chunks/47-eba0f8b4f9b17641.js +1 -0
  159. package/.next/static/chunks/547-921898871311cd72.js +1 -0
  160. package/.next/static/chunks/619-2b2ff3b9eaef112c.js +1 -0
  161. package/.next/static/chunks/735-b33805b2b19d17ad.js +1 -0
  162. package/.next/static/chunks/879-7fbd95e93ddc4636.js +1 -0
  163. package/.next/static/chunks/930-330300153dfcbfc0.js +1 -0
  164. package/.next/static/chunks/app/briefing/page-683aba0c52e910d7.js +1 -0
  165. package/.next/static/chunks/app/goals/[id]/page-40818dc7e710eeda.js +1 -0
  166. package/.next/static/chunks/app/goals/page-f80a64a68854e357.js +1 -0
  167. package/.next/static/chunks/app/hypotheses/[id]/page-023c882fa395f3ed.js +1 -0
  168. package/.next/static/chunks/app/hypotheses/page-168748bde00e7d90.js +1 -0
  169. package/.next/static/chunks/app/ideas/[id]/page-5f33e0ecf590ddec.js +1 -0
  170. package/.next/static/chunks/app/kanban/page-4f18f1e4f56948a5.js +1 -0
  171. package/.next/static/chunks/app/layout-cd1571ba4ed4a0fa.js +1 -0
  172. package/.next/static/chunks/app/page-0a8b9a7b052e6eac.js +1 -0
  173. package/.next/static/chunks/app/roadmap/[id]/page-9ba8a537e30c633c.js +1 -0
  174. package/.next/static/chunks/app/roadmap/investors/{page-0095ea5695573796.js → page-a914223623f56df3.js} +1 -1
  175. package/.next/static/chunks/app/roadmap/page-30de1fdc304eb572.js +1 -0
  176. package/.next/static/chunks/app/roadmap/public/page-c481b3f9217919ac.js +1 -0
  177. package/.next/static/chunks/app/sessions/page-d7eefd2fd42b4d55.js +1 -0
  178. package/.next/static/chunks/app/settings/{page-3afa908a96ce4e51.js → page-caf6daf930e4f2c6.js} +1 -1
  179. package/.next/static/chunks/app/social/page-21daeca0cf8af46b.js +1 -0
  180. package/.next/static/chunks/app/updates/[id]/page-2807cd17ae4938d0.js +1 -0
  181. package/.next/static/chunks/app/updates/new/{page-dcc67ffca587dcc2.js → page-ac5b966024ce0ddc.js} +1 -1
  182. package/.next/static/chunks/app/updates/page-b6efcdaae7f4f6d2.js +1 -0
  183. package/.next/static/chunks/{main-6ee938c5db2d5eb4.js → main-3eb11800bc19ca7f.js} +1 -1
  184. package/.next/static/chunks/{main-app-f42d9aa726a818bf.js → main-app-06ab73909d2a44c7.js} +1 -1
  185. package/.next/static/chunks/webpack-616e068a201ad621.js +1 -0
  186. package/.next/static/css/ff70d16171b1c02c.css +3 -0
  187. package/dist/bin/vibebusiness.js +1 -8
  188. package/dist/scripts/analyze.js +161 -19
  189. package/dist/scripts/heartbeat.js +24 -129
  190. package/dist/scripts/implement.js +77 -15
  191. package/dist/scripts/scan.js +0 -3
  192. package/dist/scripts/social-routine.js +0 -3
  193. package/package.json +3 -2
  194. package/scripts/lib/video/compositions/DemoVideo.tsx +50 -134
  195. package/scripts/lib/video/compositions/Root.tsx +2 -21
  196. package/templates/commands/distribution-google-ads.md +86 -0
  197. package/templates/commands/distribution-meta-ads.md +106 -0
  198. package/templates/commands/distribution-repurpose.md +121 -0
  199. package/templates/commands/distribution-seo-content.md +115 -0
  200. package/templates/commands/distribution-social-expansion.md +128 -0
  201. package/.next/standalone/.next/server/chunks/6299.js +0 -1
  202. package/.next/standalone/.next/server/chunks/995.js +0 -1
  203. package/.next/standalone/data/.analysis-prompt.txt +0 -170
  204. package/.next/standalone/data/copy/landing-improvements-2026-02-20.md +0 -111
  205. package/.next/standalone/data/copy/landing-landing-page-2026-02-20.md +0 -68
  206. package/.next/standalone/data/email-campaigns/sequences/onboarding.md +0 -183
  207. package/.next/standalone/data/email-campaigns/welcome-2026-02-20.md +0 -42
  208. package/.next/standalone/data/heartbeat-sessions.json +0 -7550
  209. package/.next/standalone/data/hypotheses.json +0 -269
  210. package/.next/standalone/data/ideas.json +0 -10764
  211. package/.next/standalone/data/implementations.json +0 -3342
  212. package/.next/standalone/data/pages.json +0 -22
  213. package/.next/standalone/data/payments.json +0 -33
  214. package/.next/standalone/data/reports/visuals/idea-3f4595f7-card.png +0 -0
  215. package/.next/standalone/data/reports/visuals/idea-4rxt3mkj-card.png +0 -0
  216. package/.next/standalone/data/reports/visuals/idea-6631456b-card.png +0 -0
  217. package/.next/standalone/data/reports/visuals/idea-boot-001-card.png +0 -0
  218. package/.next/standalone/data/reports/visuals/idea-fb3eba74-card.png +0 -0
  219. package/.next/standalone/data/reports/visuals/idea-first-tweet-card.png +0 -0
  220. package/.next/standalone/data/reports/visuals/idea-lp-hero-specificity-card.png +0 -0
  221. package/.next/standalone/data/reports/visuals/idea-lp-og-meta-card.png +0 -0
  222. package/.next/standalone/data/reports/visuals/idea-lp-social-proof-card.png +0 -0
  223. package/.next/standalone/data/reports/visuals/idea-prqf3lob-card.png +0 -0
  224. package/.next/standalone/data/reports/visuals/idea-readme-landing-url-card.png +0 -0
  225. package/.next/standalone/data/reports/visuals/idea-stripe-integration-card.png +0 -0
  226. package/.next/standalone/data/reports/visuals/promo-launch.png +0 -0
  227. package/.next/standalone/data/reports/visuals/promo-ship-fast.png +0 -0
  228. package/.next/standalone/data/reports/visuals/promo-while-you-slept-v2.png +0 -0
  229. package/.next/standalone/data/reports/visuals/promo-while-you-slept-v3.png +0 -0
  230. package/.next/standalone/data/reports/visuals/promo-while-you-slept.png +0 -0
  231. package/.next/standalone/data/social.json +0 -194
  232. package/.next/standalone/data/social.json.backup +0 -179
  233. package/.next/standalone/data/videos/ad-solo-founder-burnout.mp4 +0 -0
  234. package/.next/standalone/data/videos/ai-gets-business-feed.mp4 +0 -0
  235. package/.next/standalone/data/videos/idea-graveyard-feed.mp4 +0 -0
  236. package/.next/standalone/data/videos/lonely-founder-feed.mp4 +0 -0
  237. package/.next/standalone/data/videos/staging/ad-solo-founder-burnout.json +0 -54
  238. package/.next/standalone/data/videos/staging/ai-gets-business.json +0 -55
  239. package/.next/standalone/data/videos/staging/idea-graveyard.json +0 -61
  240. package/.next/standalone/data/videos/staging/lonely-founder.json +0 -60
  241. package/.next/standalone/data/videos/staging/while-you-slept-v2-fast.json +0 -67
  242. package/.next/standalone/data/videos/staging/while-you-slept-v3-dynamic.json +0 -67
  243. package/.next/standalone/data/videos/while-you-slept-demo-feed.mp4 +0 -0
  244. package/.next/standalone/data/videos/while-you-slept-v2-fast-feed.mp4 +0 -0
  245. package/.next/standalone/data/videos/while-you-slept-v3-dynamic-feed.mp4 +0 -0
  246. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/48519e014fdef8bfe40a0d447e90c96c/0.pack +0 -0
  247. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/48519e014fdef8bfe40a0d447e90c96c/index.pack +0 -0
  248. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/c99d23d3548030c8ff8de678c71eeb15/0.pack +0 -0
  249. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/c99d23d3548030c8ff8de678c71eeb15/1.pack +0 -0
  250. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/c99d23d3548030c8ff8de678c71eeb15/2.pack +0 -0
  251. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/c99d23d3548030c8ff8de678c71eeb15/3.pack +0 -0
  252. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/c99d23d3548030c8ff8de678c71eeb15/index.pack +0 -0
  253. package/.next/standalone/node_modules/.cache/webpack/remotion-production-4.0.428/c99d23d3548030c8ff8de678c71eeb15/index.pack.old +0 -0
  254. package/.next/static/chunks/280-fd1092f75f985b1e.js +0 -1
  255. package/.next/static/chunks/354-d5bc9619159f46c5.js +0 -1
  256. package/.next/static/chunks/429-8f4030371ebef5c3.js +0 -1
  257. package/.next/static/chunks/809-833fcb9fe6e81fd6.js +0 -1
  258. package/.next/static/chunks/827-6cf4bfc10d1ff0c7.js +0 -1
  259. package/.next/static/chunks/851-65b033bf38847cbb.js +0 -1
  260. package/.next/static/chunks/app/goals/[id]/page-231bb4daae0f06eb.js +0 -1
  261. package/.next/static/chunks/app/goals/page-4dfa36ac38853b88.js +0 -1
  262. package/.next/static/chunks/app/hypotheses/[id]/page-6ec09d5470557c18.js +0 -1
  263. package/.next/static/chunks/app/hypotheses/page-1732b7466579493e.js +0 -1
  264. package/.next/static/chunks/app/ideas/[id]/page-b3dfe1e61fc656a4.js +0 -1
  265. package/.next/static/chunks/app/layout-eeef7928298d2198.js +0 -1
  266. package/.next/static/chunks/app/page-d325a95479e7c453.js +0 -1
  267. package/.next/static/chunks/app/roadmap/[id]/page-b93a96f017c8d3dd.js +0 -1
  268. package/.next/static/chunks/app/roadmap/page-eacd69a99fcfc658.js +0 -1
  269. package/.next/static/chunks/app/roadmap/public/page-6b791041894b76d2.js +0 -1
  270. package/.next/static/chunks/app/sessions/page-a56ea625acdfa13e.js +0 -1
  271. package/.next/static/chunks/app/social/page-5211c78a5f37df65.js +0 -1
  272. package/.next/static/chunks/app/updates/[id]/page-fa20533878416cd0.js +0 -1
  273. package/.next/static/chunks/app/updates/page-19a09d7046577f70.js +0 -1
  274. package/.next/static/chunks/webpack-a3c37fcbf859f6f9.js +0 -1
  275. package/.next/static/css/654766eb547c6bab.css +0 -3
  276. /package/.next/static/{kgtR3Ls8MG4aQqwp3I0UE → UaMf1fmArAE78vyk_zQVK}/_buildManifest.js +0 -0
  277. /package/.next/static/{kgtR3Ls8MG4aQqwp3I0UE → UaMf1fmArAE78vyk_zQVK}/_ssgManifest.js +0 -0
@@ -0,0 +1,115 @@
1
+ # /distribution-seo-content — SEO Content Machine Playbook
2
+
3
+ ## Usage
4
+ ```
5
+ /distribution-seo-content # Full SEO content strategy
6
+ /distribution-seo-content comparison # Comparison pages only
7
+ /distribution-seo-content alternatives # Alternative pages only
8
+ /distribution-seo-content howto # How-to guides only
9
+ ```
10
+
11
+ ## Input
12
+ - `$ARGUMENTS` — optional: specific content type to focus on
13
+
14
+ ## Process
15
+
16
+ ### Step 1: Load Context
17
+ 1. Read `data/competitors.json` — competitor names, SEO keywords, features
18
+ 2. Read `data/positioning.json` — our differentiators, target audience, pain points
19
+ 3. Read `data/business-context.json` — product name, category, funnels
20
+ 4. Read `data/pages.json` — existing pages to avoid duplication
21
+
22
+ ### Step 2: Keyword Research
23
+ Use WebSearch to find keyword opportunities:
24
+
25
+ **Comparison Keywords:**
26
+ - `"[product] vs [competitor]"` — for each competitor
27
+ - `"[product] vs [competitor] comparison"` — check if these pages rank
28
+ - `"[competitor] alternative"` — capture competitor-dissatisfied users
29
+
30
+ **Alternative Keywords:**
31
+ - `"best [product category] tools [year]"`
32
+ - `"[product category] alternatives"`
33
+ - `"[incumbent] alternatives"` — for each major player
34
+ - `"top [product category] software"`
35
+
36
+ **Problem-Aware Keywords:**
37
+ - `"how to [solve pain point]"`
38
+ - `"how to [use case] with AI"`
39
+ - `"[pain point] solution for [target audience]"`
40
+
41
+ **Use-Case Keywords:**
42
+ - `"[product category] for [persona]"` (e.g., "AI product manager for solo founders")
43
+ - `"[product category] for [industry]"`
44
+
45
+ For each keyword, estimate via WebSearch:
46
+ - Monthly search volume
47
+ - Competition level
48
+ - Current top-ranking pages (to understand content expectations)
49
+ - Search intent (informational/commercial/transactional)
50
+
51
+ ### Step 3: Classify Keywords by Intent
52
+ Group keywords into content types:
53
+
54
+ | Intent | Content Type | Priority | Example |
55
+ |--------|-------------|----------|---------|
56
+ | Commercial | Comparison page | High | "[Product] vs [Competitor]" |
57
+ | Commercial | Alternative page | High | "Best [category] tools" |
58
+ | Informational | How-to guide | Medium | "How to [solve problem]" |
59
+ | Informational | Use-case page | Medium | "[Product] for [persona]" |
60
+ | Transactional | Landing page | High | "[Product category] software" |
61
+
62
+ ### Step 4: Content Briefs (Top 10 Keywords)
63
+ For each high-priority keyword, generate a content brief:
64
+
65
+ **Comparison Pages ("[Product] vs [Competitor]"):**
66
+ - H1: "[Product] vs [Competitor]: [Key Difference]"
67
+ - Sections: Overview, Feature comparison table, Pricing, Pros/cons, Use cases, Verdict
68
+ - Schema markup: Product, Review, FAQ
69
+ - Internal links to feature pages and pricing
70
+ - CTA: "Try [Product] free" with UTM
71
+
72
+ **Alternative Pages ("Best [category] tools"):**
73
+ - H1: "Best [Category] Tools in [Year]: Complete Guide"
74
+ - Sections: Our picks (us first), detailed reviews, comparison table, how to choose
75
+ - Schema markup: ItemList, Product
76
+ - Include 5-8 tools (us + competitors)
77
+ - CTA: "Start with [Product]" with UTM
78
+
79
+ **How-To Guides:**
80
+ - H1: "How to [Solve Problem] with [Product]"
81
+ - Sections: Problem statement, Step-by-step solution, Screenshots, FAQ
82
+ - Schema markup: HowTo, FAQ
83
+ - Internal links to relevant feature pages
84
+ - CTA: contextual within the guide
85
+
86
+ **Use-Case Pages:**
87
+ - H1: "[Product] for [Persona]: [Key Benefit]"
88
+ - Sections: Pain points for persona, How [Product] solves them, Testimonials, Pricing
89
+ - Schema markup: Product, FAQ
90
+ - Tailored messaging per persona
91
+
92
+ ### Step 5: Internal Linking Strategy
93
+ - Each new page links to 2-3 existing pages
94
+ - Update existing pages to link to new content
95
+ - Create a hub-and-spoke structure around main category page
96
+ - Ensure all comparison pages link to pricing
97
+
98
+ ### Step 6: Schema Markup
99
+ For each page type, include:
100
+ - **Comparison:** Product schema for both products, FAQ schema
101
+ - **Alternative:** ItemList schema, Product schema per item
102
+ - **How-to:** HowTo schema with steps, FAQ schema
103
+ - **Use-case:** Product schema, FAQ schema
104
+
105
+ ### Step 7: Output
106
+ For each content piece, create an idea in `data/ideas.json`:
107
+ - Category: "growth"
108
+ - Tags: ["growth", "seo", "{content-type}", "{target-keyword}"]
109
+ - Implementation plan with content brief
110
+ - Success metrics: organic traffic, keyword ranking, time on page, conversion rate
111
+ - Queue `/build-page {slug}` for top priority pages
112
+ - UTM: `utm_source=organic&utm_medium=seo&utm_campaign={page-slug}`
113
+
114
+ ## Output Files
115
+ - `data/ideas.json` — SEO content machine ideas
@@ -0,0 +1,128 @@
1
+ # /distribution-social-expansion — Multi-Platform Social Media Playbook
2
+
3
+ ## Usage
4
+ ```
5
+ /distribution-social-expansion # Full multi-platform expansion plan
6
+ /distribution-social-expansion linkedin # LinkedIn-specific plan
7
+ /distribution-social-expansion reddit # Reddit-specific plan
8
+ /distribution-social-expansion communities # Indie Hackers, Dev.to, Hashnode plan
9
+ ```
10
+
11
+ ## Input
12
+ - `$ARGUMENTS` — optional: specific platform to focus on
13
+
14
+ ## Process
15
+
16
+ ### Step 1: Load Context
17
+ 1. Read `data/positioning.json` — value proposition, target audience, messaging pillars
18
+ 2. Read `data/business-context.json` — product name, social config status
19
+ 3. Read `data/social.json` — current Twitter/X presence, draft history, engagement metrics
20
+ 4. Read `data/ideas.json` — recently shipped ideas (content fuel)
21
+
22
+ ### Step 2: Audit Current Presence
23
+ - Check Twitter/X status (configured, post count, engagement rates)
24
+ - Identify what content performs best on Twitter/X (analyze engagement_history if available)
25
+ - Note content gaps: what platforms are we NOT on?
26
+
27
+ ### Step 3: Platform-Specific Expansion Plans
28
+
29
+ #### LinkedIn Strategy
30
+ **Content Pillars:**
31
+ - Build-in-public updates (40%) — what we shipped, metrics, learnings
32
+ - Industry insights (30%) — trends, analysis, opinions on [product category]
33
+ - Product updates (20%) — feature announcements, use cases
34
+ - Engagement posts (10%) — polls, questions, community interaction
35
+
36
+ **Posting Cadence:**
37
+ - 3x/week: Tuesday (build-in-public), Thursday (industry insight), Saturday (product update)
38
+ - Best times: 8-10am and 12-1pm local time (weekdays)
39
+
40
+ **Post Formats:**
41
+ - Text-only with line breaks (highest organic reach)
42
+ - Carousel documents for tutorials/frameworks
43
+ - Short video clips for demos
44
+
45
+ **Copy Generation:**
46
+ - Queue `copy-social-linkedin` for each content pillar
47
+ - Adapt existing Twitter threads into LinkedIn format
48
+
49
+ #### Reddit Strategy
50
+ **Subreddit Research (MANDATORY WebSearch):**
51
+ - Search: "[product category] subreddit"
52
+ - Search: "best subreddits for [target audience]"
53
+ - Search: "reddit [product category] marketing"
54
+
55
+ For each subreddit found:
56
+ - Check subscriber count and activity level
57
+ - Read top 10 posts to understand tone and rules
58
+ - Identify content angles that get upvoted
59
+ - Note self-promotion rules (most subs ban direct promotion)
60
+
61
+ **Target Subreddits (find 5-10):**
62
+ - r/SideProject — "What I built" posts
63
+ - r/SaaS — SaaS-specific discussions
64
+ - r/[product-category] — domain-specific subreddits
65
+ - r/startups — startup journey updates
66
+ - r/Entrepreneur — business insights
67
+ - r/[technology] — tech stack communities
68
+
69
+ **Content Approach:**
70
+ - Value-first: share genuine insights, help others, answer questions
71
+ - NO self-promotion in titles or early in posts
72
+ - Story format: "Here's what I learned building [product]..."
73
+ - Comment engagement: reply to relevant threads with expertise
74
+ - Posting cadence: 2-3x/week across different subreddits
75
+
76
+ #### Indie Hackers / Dev.to / Hashnode
77
+ **Indie Hackers:**
78
+ - "What I built" launch post — product story + metrics
79
+ - Monthly milestone updates — revenue, users, learnings
80
+ - Engage in comments on others' projects
81
+ - Posting cadence: 1-2x/month
82
+
83
+ **Dev.to / Hashnode:**
84
+ - Technical tutorials from shipped features
85
+ - "How we built [feature] with [technology]" posts
86
+ - Cross-post from blog (with canonical URL)
87
+ - Posting cadence: 1-2x/month
88
+
89
+ ### Step 4: Content Calendar Template
90
+ Build a weekly content calendar:
91
+
92
+ | Day | Twitter/X | LinkedIn | Reddit | Community |
93
+ |-----|-----------|----------|--------|-----------|
94
+ | Mon | Daily post | — | Comment engagement | — |
95
+ | Tue | Daily post | Build-in-public | r/SideProject post | — |
96
+ | Wed | Daily post | — | Comment engagement | — |
97
+ | Thu | Thread | Industry insight | r/SaaS post | Dev.to article |
98
+ | Fri | Daily post | — | Comment engagement | — |
99
+ | Sat | — | Product update | — | IH update (monthly) |
100
+ | Sun | — | — | — | — |
101
+
102
+ ### Step 5: Content Repurposing Matrix
103
+ For ONE piece of content (e.g., a shipped feature):
104
+
105
+ | Source | → Twitter/X | → LinkedIn | → Reddit | → IH/Dev.to |
106
+ |--------|-------------|------------|----------|-------------|
107
+ | Shipped feature | Thread (5-7 tweets) | "What we shipped" post | "Here's what I built" | Technical writeup |
108
+ | Blog post | Key insight tweet | Professional summary | Value-first summary | Cross-post |
109
+ | Milestone | Celebration tweet | Humble brag post | Transparent update | Monthly report |
110
+ | Learning | Hot take tweet | Lesson learned post | "TIL" in relevant sub | Tutorial |
111
+
112
+ ### Step 6: UTM & Attribution
113
+ Each platform gets consistent UTM tracking:
114
+ - LinkedIn: `utm_source=linkedin&utm_medium=social&utm_campaign={content-type}`
115
+ - Reddit: `utm_source=reddit&utm_medium=community&utm_campaign={subreddit}`
116
+ - Indie Hackers: `utm_source=indiehackers&utm_medium=community&utm_campaign={post-type}`
117
+ - Dev.to: `utm_source=devto&utm_medium=blog&utm_campaign={article-slug}`
118
+
119
+ ### Step 7: Output
120
+ Create ideas in `data/ideas.json` for each platform expansion:
121
+ - Category: "growth"
122
+ - Tags: ["growth", "{platform-name}"]
123
+ - Implementation plan with content calendar + first week of posts
124
+ - Success metrics: followers, impressions, profile visits, referral signups
125
+ - Queue relevant copy tasks (`copy-social-linkedin`, etc.)
126
+
127
+ ## Output Files
128
+ - `data/ideas.json` — platform expansion ideas
@@ -1 +0,0 @@
1
- "use strict";exports.id=6299,exports.ids=[6299],exports.modules={9576:(t,e,a)=>{a.d(e,{Z:()=>l});var i=a(4770),n=a.n(i);let s={randomUUID:n().randomUUID},r=new Uint8Array(256),o=r.length,d=[];for(let t=0;t<256;++t)d.push((t+256).toString(16).slice(1));let l=function(t,e,a){if(s.randomUUID&&!e&&!t)return s.randomUUID();let i=(t=t||{}).random||(t.rng||function(){return o>r.length-16&&(n().randomFillSync(r),o=0),r.slice(o,o+=16)})();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,e){a=a||0;for(let t=0;t<16;++t)e[a+t]=i[t];return e}return function(t,e=0){return d[t[e+0]]+d[t[e+1]]+d[t[e+2]]+d[t[e+3]]+"-"+d[t[e+4]]+d[t[e+5]]+"-"+d[t[e+6]]+d[t[e+7]]+"-"+d[t[e+8]]+d[t[e+9]]+"-"+d[t[e+10]]+d[t[e+11]]+d[t[e+12]]+d[t[e+13]]+d[t[e+14]]+d[t[e+15]]}(i)}},6299:(t,e,a)=>{a.d(e,{BK:()=>ti,BM:()=>M,B_:()=>T,DT:()=>ta,Ge:()=>J,HX:()=>h,HZ:()=>D,Ir:()=>y,Iw:()=>_,KG:()=>tt,LB:()=>b,M6:()=>S,N0:()=>Y,NY:()=>I,Pk:()=>E,QV:()=>$,Rx:()=>j,Xe:()=>L,Z0:()=>te,_1:()=>B,a9:()=>v,ad:()=>x,b_:()=>f,c5:()=>Z,dZ:()=>O,iE:()=>P,k4:()=>A,kU:()=>U,lo:()=>X,pG:()=>m,pL:()=>w,rF:()=>V,rK:()=>K,s6:()=>k,t:()=>g,uQ:()=>d,x5:()=>H,zg:()=>G});var i=a(2048),n=a(5315),s=a.n(n),r=a(9576),o=a(2114);function d(){return process.env.AI_ANALYST_DATA_DIR||s().join(process.cwd(),"data")}function l(t){return s().join(d(),t)}async function c(){try{await i.promises.access(d())}catch{await i.promises.mkdir(d(),{recursive:!0})}}async function u(t,e){try{let e=await i.promises.readFile(t,"utf-8");return JSON.parse(e)}catch{return e}}async function p(t,e){await c(),await i.promises.writeFile(t,JSON.stringify(e,null,2),"utf-8")}async function _(){let t=await u(l("ideas.json"),{ideas:[]}),e=["critical","high","medium","low"],a=["xs","s","m","l","xl"];return t.ideas.map(t=>({...t,stage:t.stage??t.status??"inbox",priority:e.includes(t.priority)?t.priority:"medium",impact:a.includes(t.impact)?t.impact:"m",effort:a.includes(t.effort)?t.effort:"s",comments:t.comments??[],tags:t.tags??[],epic_id:t.epic_id??null,implementation:{...t.implementation,sub_tasks:t.implementation?.sub_tasks||[]}}))}async function f(t){return(await _()).find(e=>e.id===t)||null}async function g(t){let e=await _(),a=new Date().toISOString(),i={id:`idea-${(0,r.Z)().slice(0,8)}`,created_at:a,updated_at:a,title:t.title,summary:t.summary,category:t.category,priority:t.priority,effort:t.effort,impact:t.impact,context:t.context,rationale:t.rationale,implementation_plan:t.implementation_plan,success_metrics:t.success_metrics,stage:"inbox",source:t.source,implementation:{branch_name:null,pr_url:null,pr_number:null,commits:[],started_at:null,completed_at:null,sub_tasks:[]},comments:[],tags:t.tags||[],related_ideas:[],goal_id:t.goal_id||null,expected_impact:t.expected_impact||null,hypothesis_id:t.hypothesis_id||null,epic_id:t.epic_id||null,prerequisites:t.prerequisites};return e.push(i),await p(l("ideas.json"),{ideas:e}),i.hypothesis_id&&await F(i.hypothesis_id,i.id),i}async function m(t,e){let a=await _(),i=a.findIndex(e=>e.id===t);if(-1===i)return null;let n={...a[i],...e,updated_at:new Date().toISOString()};return a[i]=n,await p(l("ideas.json"),{ideas:a}),n}async function w(t,e,a){let i=await _(),n=i.findIndex(e=>e.id===t);if(-1===n)return null;let s=i[n],d=new Date().toISOString();if(a){let t={id:`comment-${(0,r.Z)().slice(0,8)}`,created_at:d,author:"human",author_name:"Founder",content:a};s.comments.push(t)}if(s.stage=e,s.updated_at=d,"in_progress"!==e||s.implementation.started_at){if("shipped"===e){s.implementation.completed_at=d;let t=[];if(s.goal_id){let e=(await S()).find(t=>t.id===s.goal_id);if(e)for(let a of e.kpis)t.push({goal_id:e.id,kpi_id:a.id,kpi_name:a.name,value:a.current_value,date:d})}s.verification={...o.Lu,kpi_snapshot_at_ship:t}}}else s.implementation.started_at=d;return i[n]=s,await p(l("ideas.json"),{ideas:i}),s}async function y(t,e){let a=await _(),i=a.findIndex(e=>e.id===t);if(-1===i)return null;let n={id:`comment-${(0,r.Z)().slice(0,8)}`,created_at:new Date().toISOString(),author:e.author,author_name:e.author_name,content:e.content};return a[i].comments.push(n),a[i].updated_at=new Date().toISOString(),await p(l("ideas.json"),{ideas:a}),n}async function h(t){let e=await _(),a=e.findIndex(e=>e.id===t);return -1!==a&&(e.splice(a,1),await p(l("ideas.json"),{ideas:e}),!0)}async function j(){return(await u(l("sessions.json"),{sessions:[]})).sessions}async function x(){return(await u(l("implementations.json"),{implementations:[]})).implementations}async function I(t){return(await x()).find(e=>e.idea_id===t&&"failed"!==e.status)||null}async function S(){return(await u(l("goals.json"),{goals:[]})).goals}async function v(t){return(await S()).find(e=>e.id===t)||null}async function D(t){let e=await S(),a=new Date().toISOString(),i=(t.kpis||[]).map((t,e)=>({...t,id:`kpi-${(0,r.Z)().slice(0,8)}`,history:[]})),n={id:`goal-${(0,r.Z)().slice(0,8)}`,created_at:a,updated_at:a,title:t.title,description:t.description,category:t.category,target_value:t.target_value,target_unit:t.target_unit,current_value:null,baseline_value:t.baseline_value||0,deadline:t.deadline,status:"on_track",kpis:i,related_ideas:[]};return e.push(n),await p(l("goals.json"),{goals:e}),n}async function b(t,e){let a=await S(),i=a.findIndex(e=>e.id===t);if(-1===i)return null;let n={...a[i],...e,updated_at:new Date().toISOString()};return a[i]=n,await p(l("goals.json"),{goals:a}),n}async function k(t){let e=await S(),a=e.findIndex(e=>e.id===t);return -1!==a&&(e.splice(a,1),await p(l("goals.json"),{goals:e}),!0)}async function O(t,e,a){let i=await S(),n=i.findIndex(e=>e.id===t);if(-1===n)return null;let s=i[n].kpis.findIndex(t=>t.id===e);if(-1===s)return null;let r={...i[n].kpis[s],...a};return i[n].kpis[s]=r,i[n].updated_at=new Date().toISOString(),await p(l("goals.json"),{goals:i}),r}async function $(t,e,a){let i=await S(),n=i.findIndex(e=>e.id===t);if(-1===n)return null;let s=i[n].kpis.findIndex(t=>t.id===e);if(-1===s)return null;let r={date:a.date||new Date().toISOString().split("T")[0],value:a.value};return i[n].kpis[s].history.push(r),i[n].kpis[s].current_value=a.value,i[n].updated_at=new Date().toISOString(),await p(l("goals.json"),{goals:i}),i[n].kpis[s]}async function Z(){return(await u(l("hypotheses.json"),{hypotheses:[]})).hypotheses}async function U(t){return(await Z()).find(e=>e.id===t)||null}async function M(t){let e=await Z(),a=new Date().toISOString(),i=`hyp-${(0,r.Z)().slice(0,8)}`;if(e.some(t=>t.id===i))throw console.error(`[createHypothesis] Hypothesis ID collision detected: ${i}`),Error(`Hypothesis ID collision detected: ${i}`);console.debug(`[createHypothesis] created id=${i}`);let n={id:i,created_at:a,updated_at:a,title:t.title,statement:t.statement,description:t.description,funnel_stage:t.funnel_stage,priority:t.priority,status:"stated",evidence_for:[],evidence_against:[],validation_criteria:[],validation_ideas:[],reference_model:t.reference_model,effort_to_test:t.effort_to_test,tags:t.tags||[]};return e.push(n),await p(l("hypotheses.json"),{hypotheses:e}),n}async function A(t,e){let a=await Z(),i=a.findIndex(e=>e.id===t);if(-1===i)return null;let n={...a[i],...e,updated_at:new Date().toISOString()};return a[i]=n,await p(l("hypotheses.json"),{hypotheses:a}),n}async function H(t){let e=await Z(),a=e.findIndex(e=>e.id===t);return -1!==a&&(e.splice(a,1),await p(l("hypotheses.json"),{hypotheses:e}),!0)}async function F(t,e){let a=await Z(),i=a.findIndex(e=>e.id===t);return -1===i?null:(a[i].validation_ideas.includes(e)||(a[i].validation_ideas.push(e),a[i].updated_at=new Date().toISOString(),await p(l("hypotheses.json"),{hypotheses:a})),a[i])}let N={xs:1,s:2,m:3,l:5,xl:8};function L(t,e){let a=e.filter(e=>t.idea_ids.includes(e.id)),i={},n=0,s=0;for(let t of a){i[t.stage]=(i[t.stage]||0)+1;let e=N[t.effort]||3;n+=e,"shipped"===t.stage&&(s+=e)}let r=i.shipped||0,o=a.length;return{total_ideas:o,by_stage:i,shipped_count:r,progress_pct:o>0?Math.round(r/o*100):0,effort_total:n,effort_completed:s}}function q(t,e){if(t.status_override)return t.status;let a=e.filter(e=>t.idea_ids.includes(e.id));return 0===a.length?"planned":a.every(t=>"shipped"===t.stage||"rejected"===t.stage)?"completed":a.some(t=>"in_progress"===t.stage||"testing"===t.stage)?"active":"planned"}async function B(){let t=await u(l("roadmap.json"),{epics:[]}),e=await _();return t.epics.map(t=>({...t,status:q(t,e)}))}async function G(t){return(await B()).find(e=>e.id===t)||null}async function T(t){let e=await u(l("roadmap.json"),{epics:[]}),a=new Date().toISOString(),i={id:`epic-${(0,r.Z)().slice(0,8)}`,created_at:a,updated_at:a,title:t.title,description:t.description,category:t.category,goal_id:t.goal_id??null,hypothesis_id:t.hypothesis_id??null,idea_ids:t.idea_ids||[],target_start:t.target_start??null,target_end:t.target_end??null,status:"planned",status_override:!1,depends_on:t.depends_on||[],sort_order:t.sort_order??e.epics.length,auto_generated:t.auto_generated??!1,rationale:t.rationale??null,tags:t.tags||[]};if(e.epics.push(i),await p(l("roadmap.json"),e),i.idea_ids.length>0){let t=await _(),e=!1;for(let a of t)i.idea_ids.includes(a.id)&&a.epic_id!==i.id&&(a.epic_id=i.id,e=!0);e&&await p(l("ideas.json"),{ideas:t})}return i}async function K(t,e){let a=await u(l("roadmap.json"),{epics:[]}),i=a.epics.findIndex(e=>e.id===t);if(-1===i)return null;let n={...a.epics[i],...e,updated_at:new Date().toISOString()};a.epics[i]=n,await p(l("roadmap.json"),a);let s=await _();return n.status=q(n,s),n}async function Y(t){let e=await u(l("roadmap.json"),{epics:[]}),a=e.epics.findIndex(e=>e.id===t);if(-1===a)return!1;let i=e.epics[a];if(e.epics.splice(a,1),await p(l("roadmap.json"),e),i.idea_ids.length>0){let e=await _(),a=!1;for(let i of e)i.epic_id===t&&(i.epic_id=null,a=!0);a&&await p(l("ideas.json"),{ideas:e})}return!0}async function E(t,e){let a=await u(l("roadmap.json"),{epics:[]}),i=a.epics.findIndex(e=>e.id===t);if(-1===i)return null;a.epics[i].idea_ids.includes(e)||(a.epics[i].idea_ids.push(e),a.epics[i].updated_at=new Date().toISOString(),await p(l("roadmap.json"),a));let n=await _(),s=n.find(t=>t.id===e);return s&&s.epic_id!==t&&(s.epic_id=t,await p(l("ideas.json"),{ideas:n})),a.epics[i]}async function J(t,e){let a=await u(l("roadmap.json"),{epics:[]}),i=a.epics.findIndex(e=>e.id===t);if(-1===i)return null;let n=a.epics[i].idea_ids.indexOf(e);-1!==n&&(a.epics[i].idea_ids.splice(n,1),a.epics[i].updated_at=new Date().toISOString(),await p(l("roadmap.json"),a));let s=await _(),r=s.find(t=>t.id===e);return r&&r.epic_id===t&&(r.epic_id=null,await p(l("ideas.json"),{ideas:s})),a.epics[i]}function Q(t,e){let a=new Date(t),i=0;for(;i<e;){a.setDate(a.getDate()+1);let t=a.getDay();0!==t&&6!==t&&i++}return a}function R(t){let[e,a,i]=t.split("-").map(Number);return new Date(e,a-1,i)}function X(t,e,a){let i=new Map,n=new Date;n.setHours(0,0,0,0);let s=new Map;for(let e of[...t].sort((t,e)=>t.sort_order-e.sort_order)){let t=e.goal_id,a=s.get(t);a?a.push(e):s.set(t,[e])}for(let[,t]of Array.from(s.entries())){let a=new Date(n);for(let n of t){if(n.target_start&&n.target_end){i.set(n.id,{start:n.target_start,end:n.target_end});let t=R(n.target_end);t>=a&&(a=Q(t,1));continue}let t=e.filter(t=>n.idea_ids.includes(t.id)),s=0;for(let e of t)s+=N[e.effort]||3;let r=Math.max(1,Math.ceil(s/4)),o=n.target_start||z(a),d=n.target_start?R(n.target_start):new Date(a),l=n.target_end?R(n.target_end):Q(d,r),c=n.target_end||z(l);i.set(n.id,{start:o,end:c}),a=Q(l,1)}}return i}function z(t){let e=t.getFullYear(),a=String(t.getMonth()+1).padStart(2,"0"),i=String(t.getDate()).padStart(2,"0");return`${e}-${a}-${i}`}let C={repos:[],workspace_dir:"",schedules:{quick:{focus:["recent_changes","todos","errors","fixme"],max_ideas:5},deep:{focus:["architecture","tech_debt","security","patterns","dependencies"],max_ideas:15},metrics:{focus:["funnels","dropoffs","conversions","performance"],max_ideas:10},seo:{focus:["blog_performance","technical_seo","content_gaps","backlinks"],max_ideas:8}}};async function P(){return u(l("config.json"),C)}async function V(t){await p(l("config.json"),t)}async function W(){try{await i.promises.access(l("config.json"))}catch{await p(l("config.json"),C)}}async function tt(){await c(),await W();try{await i.promises.access(l("ideas.json"))}catch{await p(l("ideas.json"),{ideas:[]})}try{await i.promises.access(l("sessions.json"))}catch{await p(l("sessions.json"),{sessions:[]})}try{await i.promises.access(l("implementations.json"))}catch{await p(l("implementations.json"),{implementations:[]})}try{await i.promises.access(l("goals.json"))}catch{await p(l("goals.json"),{goals:[]})}try{await i.promises.access(l("hypotheses.json"))}catch{await p(l("hypotheses.json"),{hypotheses:[]})}try{await i.promises.access(l("roadmap.json"))}catch{await p(l("roadmap.json"),{epics:[]})}try{await i.promises.access(l("investor-updates.json"))}catch{await p(l("investor-updates.json"),{updates:[]})}}async function te(){return(await u(l("investor-updates.json"),{updates:[]})).updates.sort((t,e)=>e.period_end.localeCompare(t.period_end))}async function ta(t){return(await te()).find(e=>e.id===t)||null}async function ti(t,e){let a=await u(l("investor-updates.json"),{updates:[]}),i=a.updates.findIndex(e=>e.id===t);return -1===i?null:(a.updates[i].status=e,await p(l("investor-updates.json"),a),a.updates[i])}},2114:(t,e,a)=>{a.d(e,{Lu:()=>n,pG:()=>i});let i={product:"bg-blue-100 text-blue-800",ux_design:"bg-purple-100 text-purple-800",growth:"bg-green-100 text-green-800",performance:"bg-orange-100 text-orange-800",tech_debt:"bg-yellow-100 text-yellow-800",security:"bg-red-100 text-red-800",infrastructure:"bg-gray-100 text-gray-800",content:"bg-pink-100 text-pink-800",analytics:"bg-cyan-100 text-cyan-800",integration:"bg-indigo-100 text-indigo-800"},n={status:"pending",first_evaluated_at:null,last_evaluated_at:null,evaluation_count:0,next_evaluation_after:null,summary:null,metric_evaluations:[],confidence:null,follow_up_idea_ids:[],requires_human_review:!1,human_review_reason:null,kpi_snapshot_at_ship:[]}}};
@@ -1 +0,0 @@
1
- exports.id=995,exports.ids=[995],exports.modules={7010:(e,t,r)=>{Promise.resolve().then(r.t.bind(r,2994,23)),Promise.resolve().then(r.t.bind(r,6114,23)),Promise.resolve().then(r.t.bind(r,9727,23)),Promise.resolve().then(r.t.bind(r,9671,23)),Promise.resolve().then(r.t.bind(r,1868,23)),Promise.resolve().then(r.t.bind(r,4759,23))},5698:()=>{},2881:(e,t,r)=>{"use strict";r.d(t,{Z:()=>d});var a=r(7577);let s=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),i=(...e)=>e.filter((e,t,r)=>!!e&&r.indexOf(e)===t).join(" ");var l={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let n=(0,a.forwardRef)(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:s,className:n="",children:d,iconNode:o,...c},h)=>(0,a.createElement)("svg",{ref:h,...l,width:t,height:t,stroke:e,strokeWidth:s?24*Number(r)/Number(t):r,className:i("lucide",n),...c},[...o.map(([e,t])=>(0,a.createElement)(e,t)),...Array.isArray(d)?d:[d]])),d=(e,t)=>{let r=(0,a.forwardRef)(({className:r,...l},d)=>(0,a.createElement)(n,{ref:d,iconNode:t,className:i(`lucide-${s(e)}`,r),...l}));return r.displayName=`${e}`,r}},732:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});let a=(0,r(2881).Z)("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]])},8258:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});let a=(0,r(2881).Z)("FlaskConical",[["path",{d:"M10 2v7.527a2 2 0 0 1-.211.896L4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-5.069-10.127A2 2 0 0 1 14 9.527V2",key:"pzvekw"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M7 16h10",key:"wp8him"}]])},9730:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});let a=(0,r(2881).Z)("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]])},1572:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});let a=(0,r(2881).Z)("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]])},3468:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});let a=(0,r(2881).Z)("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]])},434:(e,t,r)=>{"use strict";r.d(t,{default:()=>s.a});var a=r(9404),s=r.n(a)},5047:(e,t,r)=>{"use strict";var a=r(7389);r.o(a,"usePathname")&&r.d(t,{usePathname:function(){return a.usePathname}}),r.o(a,"useRouter")&&r.d(t,{useRouter:function(){return a.useRouter}})},502:(e,t,r)=>{"use strict";r.d(t,{default:()=>v});var a=r(326),s=r(434),i=r(5047),l=r(2881);let n=(0,l.Z)("LayoutDashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]),d=(0,l.Z)("Map",[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]]);var o=r(3468),c=r(8258),h=r(9730);let g=(0,l.Z)("History",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]),b=(0,l.Z)("Settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);var u=r(732),x=r(1572),p=r(1135);let m=[{href:"/",label:"Dashboard",icon:a.jsx(n,{className:"w-5 h-5"})},{href:"/roadmap",label:"Roadmap",icon:a.jsx(d,{className:"w-5 h-5"})},{href:"/goals",label:"Goals",icon:a.jsx(o.Z,{className:"w-5 h-5"})},{href:"/hypotheses",label:"Hypotheses",icon:a.jsx(c.Z,{className:"w-5 h-5"})},{href:"/social",label:"Social",icon:a.jsx(h.Z,{className:"w-5 h-5"})},{href:"/sessions",label:"Sessions",icon:a.jsx(g,{className:"w-5 h-5"})},{href:"/settings",label:"Settings",icon:a.jsx(b,{className:"w-5 h-5"})}];function v({children:e}){let t=(0,i.usePathname)();return(0,a.jsxs)("div",{className:"min-h-screen flex",children:[(0,a.jsxs)("aside",{className:"w-64 bg-slate-900 text-white flex flex-col",children:[a.jsx("div",{className:"p-4 border-b border-slate-700",children:(0,a.jsxs)(s.default,{href:"/",className:"flex items-center gap-2",children:[a.jsx("div",{className:"w-10 h-10 bg-emerald-500 rounded-lg flex items-center justify-center",children:a.jsx(u.Z,{className:"w-6 h-6 text-white"})}),(0,a.jsxs)("div",{children:[a.jsx("h1",{className:"font-bold text-lg leading-tight",children:"Analyst"}),a.jsx("p",{className:"text-xs text-slate-400",children:process.env.NEXT_PUBLIC_PRODUCT_NAME||"Business"})]})]})}),a.jsx("nav",{className:"flex-1 p-4",children:a.jsx("ul",{className:"space-y-1",children:m.map(e=>{let r="/"===e.href?"/"===t:t.startsWith(e.href);return a.jsx("li",{children:(0,a.jsxs)(s.default,{href:e.href,className:(0,p.Z)("flex items-center gap-3 px-3 py-2 rounded-lg transition-colors",r?"bg-slate-800 text-white":"text-slate-400 hover:text-white hover:bg-slate-800"),children:[e.icon,a.jsx("span",{children:e.label})]})},e.href)})})}),a.jsx("div",{className:"p-4 border-t border-slate-700",children:(0,a.jsxs)("div",{className:"flex items-center gap-2 text-xs text-slate-500",children:[a.jsx(x.Z,{className:"w-4 h-4"}),a.jsx("span",{children:"Powered by Claude"})]})})]}),a.jsx("main",{className:"flex-1 overflow-auto",children:e})]})}},9526:(e,t,r)=>{"use strict";r.d(t,{G:()=>n,GK:()=>N,Gs:()=>c,Hs:()=>a,PN:()=>u,PW:()=>M,Q_:()=>x,R$:()=>k,Vr:()=>h,Wb:()=>b,aR:()=>g,bi:()=>d,en:()=>f,i2:()=>y,kT:()=>p,l5:()=>m,lE:()=>w,lv:()=>l,pG:()=>s,rF:()=>o,tV:()=>v,tl:()=>j,xP:()=>_,yb:()=>i});let a={product:"Product",ux_design:"UX/Design",growth:"Growth",performance:"Performance",tech_debt:"Tech Debt",security:"Security",infrastructure:"Infrastructure",content:"Content",analytics:"Analytics",integration:"Integration"},s={product:"bg-blue-100 text-blue-800",ux_design:"bg-purple-100 text-purple-800",growth:"bg-green-100 text-green-800",performance:"bg-orange-100 text-orange-800",tech_debt:"bg-yellow-100 text-yellow-800",security:"bg-red-100 text-red-800",infrastructure:"bg-gray-100 text-gray-800",content:"bg-pink-100 text-pink-800",analytics:"bg-cyan-100 text-cyan-800",integration:"bg-indigo-100 text-indigo-800"},i={inbox:"Inbox",under_review:"Under Review",approved:"Approved",in_progress:"In Progress",testing:"Testing",shipped:"Shipped",deferred:"Deferred",rejected:"Rejected",rolled_back:"Rolled Back"},l={inbox:"bg-amber-500",under_review:"bg-blue-500",approved:"bg-emerald-500",in_progress:"bg-violet-500",testing:"bg-cyan-500",shipped:"bg-green-500",deferred:"bg-gray-500",rejected:"bg-red-500",rolled_back:"bg-orange-500"},n=["inbox","under_review","approved","in_progress","testing","shipped"],d={xs:"XS",s:"S",m:"M",l:"L",xl:"XL"},o={critical:"Critical",high:"High",medium:"Medium",low:"Low"},c={critical:"bg-red-100 text-red-800 border-red-300",high:"bg-orange-100 text-orange-800 border-orange-300",medium:"bg-yellow-100 text-yellow-800 border-yellow-300",low:"bg-gray-100 text-gray-800 border-gray-300"},h={codebase_analysis:"Codebase Analysis",metrics_review:"Metrics Review",market_research:"Market Research",seo_audit:"SEO Audit",manual:"Manual"},g={pending:"bg-slate-100 text-slate-700",validated:"bg-emerald-100 text-emerald-800",needs_investigation:"bg-amber-100 text-amber-800",inconclusive:"bg-slate-100 text-slate-600",invalidated:"bg-red-100 text-red-800"},b={pending:"Pending",validated:"Validated",needs_investigation:"Needs Investigation",inconclusive:"Inconclusive",invalidated:"Invalidated"},u={ship:"Ship",update:"Update",milestone:"Milestone",digest:"Digest",manual:"Manual",thread:"Thread",insight:"Insight"},x={ship:"bg-green-100 text-green-800",update:"bg-blue-100 text-blue-800",milestone:"bg-amber-100 text-amber-800",digest:"bg-purple-100 text-purple-800",manual:"bg-slate-100 text-slate-800",thread:"bg-indigo-100 text-indigo-800",insight:"bg-cyan-100 text-cyan-800"},p={acquisition:"Acquisition",activation:"Activation",retention:"Retention",revenue:"Revenue",referral:"Referral"},m={acquisition:"bg-blue-100 text-blue-800",activation:"bg-emerald-100 text-emerald-800",retention:"bg-purple-100 text-purple-800",revenue:"bg-amber-100 text-amber-800",referral:"bg-pink-100 text-pink-800"},v={on_track:"On Track",at_risk:"At Risk",behind:"Behind",achieved:"Achieved"},y={on_track:"bg-emerald-100 text-emerald-800 border-emerald-300",at_risk:"bg-amber-100 text-amber-800 border-amber-300",behind:"bg-red-100 text-red-800 border-red-300",achieved:"bg-blue-100 text-blue-800 border-blue-300"},f={manual:"Manual",rest_api:"REST API",posthog:"PostHog",firestore:"Firestore",stripe:"Stripe",whatsapp:"WhatsApp"},k={stated:"Stated",testing:"Testing",validated:"Validated",invalidated:"Invalidated",deferred:"Deferred"},w={stated:"bg-slate-100 text-slate-800 border-slate-300",testing:"bg-amber-100 text-amber-800 border-amber-300",validated:"bg-emerald-100 text-emerald-800 border-emerald-300",invalidated:"bg-red-100 text-red-800 border-red-300",deferred:"bg-slate-100 text-slate-500 border-slate-200"},M={acquisition:"Acquisition",engagement:"Engagement",conversion:"Conversion",monetization:"Monetization"},j={acquisition:"bg-blue-100 text-blue-800",engagement:"bg-purple-100 text-purple-800",conversion:"bg-amber-100 text-amber-800",monetization:"bg-emerald-100 text-emerald-800"},N={planned:"Planned",active:"Active",completed:"Completed",paused:"Paused"},_={planned:"bg-slate-100 text-slate-700 border-slate-300",active:"bg-blue-100 text-blue-800 border-blue-300",completed:"bg-emerald-100 text-emerald-800 border-emerald-300",paused:"bg-amber-100 text-amber-800 border-amber-300"}},2029:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i,metadata:()=>s});var a=r(9510);r(5023);let s={title:process.env.NEXT_PUBLIC_PRODUCT_NAME?`${process.env.NEXT_PUBLIC_PRODUCT_NAME} Analyst`:"AI Product Manager",description:"AI Product Manager - Autonomous improvement proposals"};function i({children:e}){return a.jsx("html",{lang:"en",children:a.jsx("body",{className:"min-h-screen bg-slate-50",children:e})})}},5023:()=>{},1135:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});let a=function(){for(var e,t,r=0,a="",s=arguments.length;r<s;r++)(e=arguments[r])&&(t=function e(t){var r,a,s="";if("string"==typeof t||"number"==typeof t)s+=t;else if("object"==typeof t){if(Array.isArray(t)){var i=t.length;for(r=0;r<i;r++)t[r]&&(a=e(t[r]))&&(s&&(s+=" "),s+=a)}else for(a in t)t[a]&&(s&&(s+=" "),s+=a)}return s}(e))&&(a&&(a+=" "),a+=t);return a}}};
@@ -1,170 +0,0 @@
1
- You are an AI Business Analyst for vibebusiness, Autonomous AI business analyst that continuously analyzes codebases, metrics, and market data to generate, prioritize, implement, and verify improvement ideas. Closes the full lifecycle loop: observe → analyze → recommend → implement → ship → verify → learn. Brain/hands architecture: VibeBusiness decides WHAT to build; Claude Code CLI handles HOW to code it..
2
-
3
- The product consists of:
4
- 1. **VibeBusiness CLI + Dashboard (vibebusiness)**: Next.js dashboard with Kanban board, goals, KPI charts, hypothesis tracking. TypeScript CLI with heartbeat loop, analysis engine, and implementation pipeline. Distributed via npm.
5
- Tech: Next.js 14, TypeScript 5, Tailwind CSS, Lucide React, tsup, Claude Code CLI
6
-
7
- Your role is to analyze the codebase and generate actionable improvement ideas.
8
-
9
- ## Quick Analysis Task
10
-
11
- Perform a quick scan of the codebase focusing on:
12
- - Recent changes (git log --oneline -20)
13
- - TODO/FIXME comments that need attention
14
- - Error handling gaps
15
- - Console.log statements left in production code
16
- - Obvious performance issues (N+1 queries, missing indexes)
17
- - Security quick wins (exposed secrets, missing validation)
18
-
19
- ## Repositories to Analyze
20
- - vibebusiness: /Users/luismey/Code/vibebusiness (nextjs)
21
-
22
- ## Analysis Steps
23
-
24
- 1. For each repository:
25
- a. Check recent git commits for patterns
26
- b. Search for TODO, FIXME, HACK comments
27
- c. Look for console.log/print statements in non-test files
28
- d. Check for obvious security issues (hardcoded credentials, SQL injection patterns)
29
-
30
- 2. Prioritize findings by business impact
31
-
32
- 3. Generate up to 5 improvement ideas
33
-
34
- ## Research Protocol
35
-
36
- Before generating ideas, conduct research to ground proposals in reality:
37
-
38
- ### Codebase Verification (MANDATORY)
39
- For every idea, VERIFY using Glob and Grep that:
40
- - The feature/system you reference actually exists
41
- - You understand the current implementation before proposing changes
42
- - files_analyzed contains real paths you confirmed exist
43
-
44
- ### Web Research
45
- Use WebSearch to research:
46
- - Industry best practices for the problem
47
- - How competitors solve similar problems (CodeScene, Cursor, Devin (Cognition), GitHub Copilot, PostHog, ChatPRD, Mendral, ValidatorAI, Baremetrics, Lovable)
48
- - local market-specific context (search in the local language when relevant)
49
- - Technology approaches with measurable outcomes
50
-
51
- ### Business Model Constraints
52
- - Solo founder — speed over perfection, focus over breadth
53
- - Pre-revenue — zero marketing budget, PLG-only distribution
54
- - BYOK model — users provide their own Claude/OpenAI keys (near-zero COGS, 90-95% gross margins)
55
- - Local-first — all data stays on user's machine, no cloud infrastructure needed
56
- - Claude Code CLI dependency — primary AI backend, BYOK API fallback for users without Max plan
57
- - 12-18 month competitive window before incumbents (Microsoft/GitHub) could replicate
58
- - Target segment: indie hackers / solo technical founders (Segment B) — CLI-native, $20-100/mo tool budget
59
-
60
- ### Regulatory & Compliance
61
- - EU AI Act — low risk (business analysis tool, not high-risk classification)
62
- - SOC 2 — target before enterprise push (Phase 3)
63
- - Local-first architecture: user data never touches VibeBusiness servers
64
-
65
- ### Monitoring & Observability (MANDATORY for every idea)
66
-
67
- success_metrics MUST be:
68
- - Quantifiable with baseline → target → timeline format
69
- - Verifiable via logs, metrics, or database queries
70
- - Include at least one monitoring metric (e.g., error rate, latency, delivery rate)
71
-
72
- implementation_plan MUST include a "Monitoring" step that specifies:
73
- - What to log (entry/exit of services, errors with context, data validation)
74
- - What metrics to track (latency, success rate, throughput)
75
- - Alert thresholds if applicable (e.g., "alert if error_rate > 5%")
76
- - How to verify the feature works post-deploy (health check, smoke test)
77
-
78
- BAD success_metrics (reject): "Improve response time", "Better UX"
79
- GOOD success_metrics: "Reduce avg response time from 86h to <8h within 2 weeks, verified via Firestore query on response_time field"
80
-
81
- ### Business Funnel Assessment (MANDATORY for growth/product/revenue ideas)
82
- Consider the business funnel before proposing ideas:
83
- - Acquisition: Are developers finding VibeBusiness? (npm downloads, GitHub stars, Show HN traffic) (no threshold defined)
84
- - Activation: Do users complete their first vibe cycle and experience the 10x moment in under 5 minutes? (no threshold defined)
85
- - Retention: Are users running weekly vibe cycles and reviewing recommendations? (D7 >35%, D30 >25%) (no threshold defined)
86
- - Revenue: Are users converting to Pro ($29/mo)? Target: 11.7% free-to-paid conversion. (no threshold defined)
87
- - Referral: Are users sharing VibeBusiness? (tweets, HN posts, community mentions, referral program) (no threshold defined)
88
- If earlier stages are broken, propose fixes for THOSE stages. Include "prerequisites" on every growth/revenue idea that depends on a later funnel stage.
89
-
90
-
91
- ### Active Business Goals (WEIGHT ideas toward these)
92
-
93
- **goal-ship-v13: Ship VibeBusiness v1.3 to npm** — Status: achieved, Progress: 1 / 1 shipped_version, Deadline: 2026-Q1
94
- - v1.3 Released on npm: 1 / 1 boolean (higher_is_better)
95
- - First-Run Time to Value: N/A / 60 seconds (lower_is_better)
96
-
97
- **goal-beta-users: Recruit 20 Indie Hacker Beta Users** — Status: behind, Progress: 0 / 20 beta_users, Deadline: 2026-Q2
98
- - Beta User Signups: 0 / 20 users (higher_is_better)
99
- - Beta D7 Retention: N/A / 40 percent (higher_is_better)
100
- - Recommendation Review Rate: N/A / 60 percent (higher_is_better)
101
- - Init-to-First-Scan Activation Rate: N/A / 60 percent (higher_is_better)
102
-
103
- **goal-100-paying: Achieve 100 Paying Customers** — Status: behind, Progress: 0 / 100 paying_customers, Deadline: 2026-Q3
104
- - Paying Users: 0 / 100 users (higher_is_better)
105
- - Free-to-Paid Conversion Rate: N/A / 11.7 percent (higher_is_better)
106
- - npm Weekly Downloads: 0 / 500 downloads/week (higher_is_better)
107
-
108
- **goal-50k-mrr: Reach $50K MRR by Month 12** — Status: behind, Progress: 0 / 50000 dollars_mrr, Deadline: 2027-Q1
109
- - Monthly Recurring Revenue: 0 / 50000 dollars (higher_is_better)
110
- - Monthly Logo Churn Rate: N/A / 5 percent (lower_is_better)
111
- - Net Revenue Retention: N/A / 120 percent (higher_is_better)
112
-
113
- **goal-build-in-public: Build in Public: Daily X/Twitter Presence** — Status: behind, Progress: 0 / 1000 followers, Deadline: 2026-Q3
114
- - X/Twitter Followers: 0 / 1000 followers (higher_is_better)
115
- - Daily Post Streak: 1 / 90 days (higher_is_better)
116
-
117
- When generating ideas, PREFER ideas that directly move a goal's KPIs. Include `goal_id` in the idea JSON if it aligns with a specific goal (e.g., "goal_id": "goal-003").
118
-
119
-
120
- ### Active Business Hypotheses (VALIDATE through experiments)
121
-
122
- **hyp-10x-moment: The 10x Moment in Under 5 Minutes Drives Conversion** [activation] — Status: stated, Priority: critical, Effort: l
123
- Statement: If the first vibe cycle produces a specific, actionable business recommendation the founder didn't already know — in under 60 seconds — then D7 retention will exceed 40% and free-to-paid conversion will exceed 11.7%.
124
-
125
- **hyp-indie-hackers-wtp: Indie Hackers Will Pay $29/month for an AI Business Analyst** [monetization] — Status: stated, Priority: critical, Effort: m
126
- Statement: If VibeBusiness provides persistent business context, real metric integrations, and actionable weekly recommendations, then indie hackers will convert to Pro at $29/month at rates exceeding 8% of active free users.
127
-
128
- **hyp-build-in-public: Build-in-Public Drives Organic Acquisition at Zero Cost** [acquisition] — Status: stated, Priority: high, Effort: m
129
- Statement: If the founder posts daily on X/Twitter documenting the VibeBusiness journey (90% value, 10% product), then organic npm downloads will exceed 500/week within 90 days of consistent posting.
130
-
131
- **hyp-byok-adoption: BYOK Model Reduces Adoption Friction for Target Segment** [activation] — Status: stated, Priority: high, Effort: s
132
- Statement: If VibeBusiness targets Claude Code power users (who already pay $100-200/month for Claude Max), then BYOK setup friction will not significantly impact conversion — at least 60% of installers will complete their first vibe cycle.
133
-
134
- **hyp-memory-switching-cost: MEMORY.md Accumulation Creates Meaningful Switching Costs by Day 30** [engagement] — Status: stated, Priority: high, Effort: l
135
- Statement: If MEMORY.md accumulates 700+ observations by Day 30 and users can see this growth visually, then D30 retention will exceed 25% and users who reach Day 30 will have <3% monthly churn.
136
-
137
- **hyp-implementation-differentiator: Autonomous Implementation Engine Is the Key Differentiator** [engagement] — Status: stated, Priority: high, Effort: xl
138
- Statement: If VibeBusiness autonomously ships code via Claude Code CLI (branch → PR → merge → verify), then users who experience at least one autonomously shipped feature will retain at 2x the rate of users who only receive recommendations.
139
-
140
- When generating ideas, PREFER ideas that validate or invalidate an active hypothesis. Set `hypothesis_id` in the idea JSON to the hypothesis ID (e.g., "hypothesis_id": "hyp-003"). The cheapest validation experiment for each hypothesis is the highest-priority idea.
141
-
142
- ## Output Format
143
-
144
- Return a JSON array of ideas:
145
- ```json
146
- [
147
-
148
- Each idea must be a valid JSON object with these fields:
149
- {
150
- "title": "string - Clear, actionable title (max 80 chars)",
151
- "summary": "string - One sentence describing the improvement",
152
- "category": "product | ux_design | growth | performance | tech_debt | security | infrastructure | content | analytics | integration",
153
- "priority": "critical | high | medium | low",
154
- "effort": "xs | s | m | l | xl",
155
- "impact": "xs | s | m | l | xl",
156
- "context": "string - What triggered this idea (observations, data)",
157
- "rationale": "string - Why this matters for the business",
158
- "implementation_plan": "string - Step-by-step implementation (markdown ok)",
159
- "success_metrics": ["array of measurable outcomes"],
160
- "tags": ["array of relevant tags"],
161
- "files_analyzed": ["array of relevant file paths"],
162
- "goal_id": "optional - ID of the business goal this idea supports (e.g., goal-001, goal-003)",
163
- "hypothesis_id": "optional - ID of the business hypothesis this idea validates (e.g., hyp-001, hyp-003). Include when this idea is an experiment to test a hypothesis.",
164
- "prerequisites": "optional - For growth/revenue/monetization ideas, specify conditions that must be met before this idea should proceed. Format: { description: string, funnel_stage: string, conditions: [{ kpi_id: string, operator: 'gte'|'lte', value: number, label: string }] }"
165
- }
166
-
167
- ]
168
- ```
169
-
170
- Only output the JSON array, no other text.
@@ -1,111 +0,0 @@
1
- # Landing Page Improvements — 2026-02-20 (Round 2)
2
-
3
- ## Metadata
4
- - Type: landing
5
- - Generated: 2026-02-20
6
- - Positioning version: 2026-02-18
7
- - Parameters: full page audit — improvements beyond round 1
8
-
9
- ## Positioning Inputs
10
- - **Pain points**: Decision paralysis (high), strategic isolation (medium), fragmented tools (medium)
11
- - **Pillars**: Built for Indie Hackers, Compounding Value
12
- - **Objection preempted**: "$29/month is too expensive" + "Can I trust AI for business decisions?"
13
- - **Social proof**: Already shipping features autonomously (PR #74), whitespace claim
14
- - **CTA source**: copy_bank — "npx vibebusiness" (zero-friction), "See What VibeBusiness Finds in Your Codebase" (curiosity)
15
- - **Tone**: Founder voice — confident, technical, direct. No corporate speak.
16
-
17
- ---
18
-
19
- ## Issues Found (Current Page Audit)
20
-
21
- ### 1. Hero badge is insider jargon
22
- **Current:** `CLI-native. BYOK. Local-first.`
23
- **Problem:** BYOK means nothing to most visitors. Even "CLI-native" filters out anyone not yet sold. This badge should hook, not filter.
24
- **Suggested:** `For indie hackers who ship` or `Free. No account. 60 seconds.`
25
- **Why:** Addresses the #1 acquisition barrier — friction. Leads with what they get, not how it's built.
26
-
27
- ### 2. No explicit audience callout in hero
28
- **Problem:** The page never says WHO this is for above the fold. "Indie hackers" appears only in the footer. Visitors need to self-identify within 3 seconds.
29
- **Suggested addition** (below subheadline, above terminal):
30
- > Built for solo founders and indie hackers who can build anything — but aren't sure what to build next.
31
-
32
- **Why:** Matches primary audience from positioning. Self-selecting. If you read that and think "that's me," you're hooked.
33
-
34
- ### 3. Missing social proof / credibility section
35
- **Problem:** Zero social proof on the entire page. No user count, no testimonials, no stats. The positioning data has proof points ready to use.
36
- **Suggested section** (between FAQ and Final CTA, or as a strip above Final CTA):
37
-
38
- **Heading:** Built with its own advice
39
- **Copy:**
40
- - VibeBusiness dogfoods itself — it analyzed its own codebase and shipped 4 production features autonomously
41
- - The only tool that occupies genuine whitespace: autonomous loop + codebase analysis + business strategy + code implementation
42
- - BYOK economics: 90-95% gross margins. Your API key, your data, your machine.
43
-
44
- **Why:** "Built with its own advice" is a unique proof point no competitor can claim. It demonstrates the product works by showing it built itself.
45
-
46
- ### 4. Pain points section — card 3 is weak
47
- **Current (card 3):** "Too many tools, zero continuity" — Baremetrics for metrics. ChatGPT for advice. Notion for decisions. AI for code.
48
- **Problem:** Pain point intensity is "medium" vs "high" for the others. Also, most indie hackers don't use Baremetrics.
49
- **Suggested replacement:**
50
-
51
- **Title:** "Building alone, deciding alone"
52
- **Copy:** No co-founder to challenge your assumptions. No PM to prioritize your backlog. No board to hold you accountable. Every decision falls on you — and the ones you avoid are the ones that matter most.
53
-
54
- **Why:** "Strategic isolation" pain point (medium intensity but high emotional resonance). Directly leads into VibeBusiness as the "AI co-founder" without saying those words.
55
-
56
- ### 5. Missing pricing signal
57
- **Problem:** FAQ mentions "free to start" but there's no pricing preview. Visitors want to know cost before installing anything.
58
- **Suggested addition** (new section between Differentiators and Comparison, or as a strip):
59
-
60
- **Heading:** Start free. Scale when ready.
61
- **Layout:** 3 cards side-by-side
62
-
63
- | Free | Pro — $29/mo | Team — $19/user/mo |
64
- |------|-------------|-------------------|
65
- | 1 project | Unlimited projects | Shared memory |
66
- | Daily vibe cycle | Hourly vibe cycle | Team dashboards |
67
- | 30-day memory | Unlimited memory | Cross-project insights |
68
- | **npx vibebusiness** | **Start 14-day trial** | **Coming soon** |
69
-
70
- **Why:** Removes "how much does this cost?" anxiety. $29/mo is cheap for the indie hacker audience ($20-100/mo tool budget). Showing it neutralizes the objection.
71
-
72
- ### 6. Final CTA — add a low-commitment alternative
73
- **Problem:** Only CTA is "npm install" — high commitment for someone who just arrived. No email capture for people not ready.
74
- **Suggested:** Add a secondary CTA below the install button:
75
-
76
- > Not ready to install? [Join 0 indie hackers on the waitlist →]
77
-
78
- **Why:** Captures leads who are interested but not ready to install. Supports goal-beta-users (0/20).
79
-
80
- ### 7. "How it works" section — add time context
81
- **Problem:** The 6-step loop (Observe → Analyze → Implement → Ship → Verify → Learn) doesn't convey HOW FAST this happens.
82
- **Suggested:** Add a time marker to the section subheadline:
83
-
84
- **Current:** "VibeBusiness runs an autonomous heartbeat loop that observes, analyzes, recommends, implements, ships, and verifies — continuously."
85
- **After:** "One heartbeat. 60 seconds. VibeBusiness observes your codebase, analyzes what matters, and delivers prioritized improvement ideas — before your coffee gets cold."
86
-
87
- **Why:** Concrete time anchor. "Before your coffee gets cold" is founder-voice, not corporate.
88
-
89
- ---
90
-
91
- ## Prioritized Implementation Order
92
-
93
- 1. **Hero badge** → Quick win, 1 line change (high impact on first impression)
94
- 2. **Audience callout** → 1 line addition below subheadline (self-selection)
95
- 3. **Pain point card 3** → Copy swap (emotional resonance)
96
- 4. **Social proof strip** → New section, ~15 lines JSX (credibility)
97
- 5. **Pricing preview** → New section, ~40 lines JSX (conversion)
98
- 6. **Secondary CTA** → 1 line addition to final section (lead capture)
99
- 7. **"How it works" subheadline** → Copy swap (time anchor)
100
-
101
- ## Variations
102
-
103
- ### Hero badge alternatives
104
- - A: `Free. No account. 60 seconds.` (friction-forward)
105
- - B: `For indie hackers who ship` (audience-forward)
106
- - C: `npm install -g vibebusiness` (action-forward, matches CTA)
107
-
108
- ### Audience callout alternatives
109
- - A: `Built for solo founders and indie hackers who can build anything — but aren't sure what to build next.`
110
- - B: `For developers who ship products, not just code.`
111
- - C: `The missing co-founder for your side project.`