vibebusiness 1.2.65 → 1.2.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +19 -19
- package/.next/standalone/.next/app-path-routes-manifest.json +1 -1
- package/.next/standalone/.next/build-manifest.json +2 -2
- package/.next/standalone/.next/prerender-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/.next/server/app/api/investor-updates/generate/route.js +1 -1
- package/.next/standalone/.next/server/app/api/investor-updates/generate/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/[id]/publish/route.js +1 -1
- package/.next/standalone/.next/server/app/api/social/[id]/publish/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/goals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hypotheses/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/hypotheses/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/ideas/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/roadmap/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/roadmap/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +1 -1
- package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/social.html +1 -1
- package/.next/standalone/.next/server/app/social.rsc +1 -1
- package/.next/standalone/.next/server/app/updates/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/updates/new/page.js +1 -1
- package/.next/standalone/.next/server/app/updates/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/updates/new.html +1 -1
- package/.next/standalone/.next/server/app/updates/new.rsc +2 -2
- package/.next/standalone/.next/server/app/updates/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app-paths-manifest.json +13 -13
- package/.next/standalone/.next/server/chunks/{7599.js → 3794.js} +33 -25
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/data/business-context.json +1 -1
- package/.next/standalone/data/goals.json +93 -12
- package/.next/standalone/data/ideas.json +58 -17
- package/.next/standalone/data/implementations.json +53 -0
- package/.next/standalone/data/social.json +49 -1
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/investor-update.ts +249 -12
- package/.next/standalone/scripts/skills/social-media.ts +239 -34
- package/.next/static/chunks/app/updates/new/page-dcc67ffca587dcc2.js +1 -0
- package/dist/scripts/heartbeat.js +205 -30
- package/dist/scripts/social-routine.js +205 -30
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/1685.js +0 -6
- package/.next/standalone/.next/server/chunks/7564.js +0 -81
- package/.next/standalone/scripts/skills/investor-update.ts +0 -476
- package/.next/static/chunks/app/updates/new/page-c518fba0d9ffae98.js +0 -1
- /package/.next/static/{yXi8K8u58qskYid0oHU5f → Gsf15cMKd-7htpbN5eZHd}/_buildManifest.js +0 -0
- /package/.next/static/{yXi8K8u58qskYid0oHU5f → Gsf15cMKd-7htpbN5eZHd}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/de9b407f2c259a06.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-a3c37fcbf859f6f9.js"/><script src="/_next/static/chunks/fd9d1056-8c714984d5b17b60.js" async=""></script><script src="/_next/static/chunks/117-23260fd0b5f0bd9a.js" async=""></script><script src="/_next/static/chunks/main-app-f42d9aa726a818bf.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>AI Product Manager</title><meta name="description" content="AI Product Manager - Autonomous improvement proposals"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-screen bg-slate-50"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-a3c37fcbf859f6f9.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/de9b407f2c259a06.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[4707,[],\"\"]\n5:I[6423,[],\"\"]\nb:I[1060,[],\"\"]\n6:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n7:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n8:{\"display\":\"inline-block\"}\n9:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nc:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/de9b407f2c259a06.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-a3c37fcbf859f6f9.js"/><script src="/_next/static/chunks/fd9d1056-8c714984d5b17b60.js" async=""></script><script src="/_next/static/chunks/117-23260fd0b5f0bd9a.js" async=""></script><script src="/_next/static/chunks/main-app-f42d9aa726a818bf.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>AI Product Manager</title><meta name="description" content="AI Product Manager - Autonomous improvement proposals"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="min-h-screen bg-slate-50"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/_next/static/chunks/webpack-a3c37fcbf859f6f9.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/de9b407f2c259a06.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n4:I[4707,[],\"\"]\n5:I[6423,[],\"\"]\nb:I[1060,[],\"\"]\n6:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n7:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\n8:{\"display\":\"inline-block\"}\n9:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\nc:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"Gsf15cMKd-7htpbN5eZHd\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L3\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/de9b407f2c259a06.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-slate-50\",\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$6\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$7\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$9\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$La\"],\"globalErrorComponent\":\"$b\",\"missingSlots\":\"$Wc\"}]\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"AI Product Manager\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"AI Product Manager - Autonomous improvement proposals\"}]]\n3:null\n"])</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-a3c37fcbf859f6f9.js" defer=""></script><script src="/_next/static/chunks/framework-f66176bb897dc684.js" defer=""></script><script src="/_next/static/chunks/main-d878b9441f29f13f.js" defer=""></script><script src="/_next/static/chunks/pages/_app-72b849fbd24ac258.js" defer=""></script><script src="/_next/static/chunks/pages/_error-7ba65e1336b92748.js" defer=""></script><script src="/_next/static/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-a3c37fcbf859f6f9.js" defer=""></script><script src="/_next/static/chunks/framework-f66176bb897dc684.js" defer=""></script><script src="/_next/static/chunks/main-d878b9441f29f13f.js" defer=""></script><script src="/_next/static/chunks/pages/_app-72b849fbd24ac258.js" defer=""></script><script src="/_next/static/chunks/pages/_error-7ba65e1336b92748.js" defer=""></script><script src="/_next/static/Gsf15cMKd-7htpbN5eZHd/_buildManifest.js" defer=""></script><script src="/_next/static/Gsf15cMKd-7htpbN5eZHd/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"Gsf15cMKd-7htpbN5eZHd","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"node":{"793b9b6dac26832312ff3491cc002e5864502d02":{"workers":{"app/updates/[id]/page":"4445"},"layer":{"app/updates/[id]/page":"rsc"}}},"edge":{},"encryptionKey":"
|
|
1
|
+
{"node":{"793b9b6dac26832312ff3491cc002e5864502d02":{"workers":{"app/updates/[id]/page":"4445"},"layer":{"app/updates/[id]/page":"rsc"}}},"edge":{},"encryptionKey":"U15S6WlZqascoJRL8geunn0SN1JxH6mX5QLM+I6ngLY="}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"goals": [
|
|
3
3
|
{
|
|
4
|
-
"id": "goal-ship-
|
|
4
|
+
"id": "goal-ship-npm-public",
|
|
5
5
|
"created_at": "2026-02-18T00:00:00.000Z",
|
|
6
|
-
"updated_at": "2026-02-
|
|
7
|
-
"title": "Ship VibeBusiness
|
|
6
|
+
"updated_at": "2026-02-23T00:00:00.000Z",
|
|
7
|
+
"title": "Ship VibeBusiness Public npm Release",
|
|
8
8
|
"description": "Polish the product for public distribution. Complete CLI wrapper, setup wizard, and documentation. Ensure the first-run 10x moment works: npx vibebusiness → instant business analysis with specific, actionable recommendations in under 60 seconds.",
|
|
9
9
|
"category": "activation",
|
|
10
10
|
"target_value": 1,
|
|
@@ -15,19 +15,23 @@
|
|
|
15
15
|
"status": "achieved",
|
|
16
16
|
"kpis": [
|
|
17
17
|
{
|
|
18
|
-
"id": "kpi-
|
|
19
|
-
"name": "
|
|
20
|
-
"description": "
|
|
21
|
-
"source": "
|
|
22
|
-
"query": "
|
|
23
|
-
"current_value": 1,
|
|
24
|
-
"target_value":
|
|
25
|
-
"unit": "
|
|
18
|
+
"id": "kpi-npm-version",
|
|
19
|
+
"name": "Latest npm Version",
|
|
20
|
+
"description": "Current published version on npm registry",
|
|
21
|
+
"source": "npm",
|
|
22
|
+
"query": "npm view vibebusiness version",
|
|
23
|
+
"current_value": "1.2.66",
|
|
24
|
+
"target_value": "2.0.0",
|
|
25
|
+
"unit": "version",
|
|
26
26
|
"direction": "higher_is_better",
|
|
27
27
|
"history": [
|
|
28
28
|
{
|
|
29
29
|
"date": "2026-02-18",
|
|
30
|
-
"value": 1
|
|
30
|
+
"value": "1.2.0"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"date": "2026-02-23",
|
|
34
|
+
"value": "1.2.66"
|
|
31
35
|
}
|
|
32
36
|
]
|
|
33
37
|
},
|
|
@@ -353,6 +357,83 @@
|
|
|
353
357
|
"idea-2mg8sd23",
|
|
354
358
|
"idea-smv8n9cz"
|
|
355
359
|
]
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"id": "goal-unit-economics",
|
|
363
|
+
"created_at": "2026-02-23T00:00:00.000Z",
|
|
364
|
+
"updated_at": "2026-02-23T00:00:00.000Z",
|
|
365
|
+
"title": "Validate Unit Economics for Seed Fundraising",
|
|
366
|
+
"description": "Prove CAC < $100, LTV > $300, and <6 month payback to de-risk seed round. BYOK model provides 90-95% gross margins (near-zero COGS). Target metrics demonstrate capital-efficient growth and investor-friendly unit economics.",
|
|
367
|
+
"category": "fundraising_metrics",
|
|
368
|
+
"target_value": 1,
|
|
369
|
+
"target_unit": "validated",
|
|
370
|
+
"current_value": 0,
|
|
371
|
+
"baseline_value": 0,
|
|
372
|
+
"deadline": "2026-Q2",
|
|
373
|
+
"status": "on_track",
|
|
374
|
+
"kpis": [
|
|
375
|
+
{
|
|
376
|
+
"id": "kpi-cac",
|
|
377
|
+
"name": "Customer Acquisition Cost",
|
|
378
|
+
"description": "Total marketing spend / new paying customers",
|
|
379
|
+
"source": "manual",
|
|
380
|
+
"query": "Sum(twitter_ads, show_hn_sponsorship, indie_hackers_ads) / stripe_new_subscriptions",
|
|
381
|
+
"current_value": null,
|
|
382
|
+
"target_value": 87,
|
|
383
|
+
"unit": "dollars",
|
|
384
|
+
"direction": "lower_is_better",
|
|
385
|
+
"history": []
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
"id": "kpi-ltv",
|
|
389
|
+
"name": "Customer Lifetime Value",
|
|
390
|
+
"description": "ARPU * avg customer lifetime in months",
|
|
391
|
+
"source": "calculated",
|
|
392
|
+
"query": "29 * average_subscription_length_months",
|
|
393
|
+
"current_value": null,
|
|
394
|
+
"target_value": 348,
|
|
395
|
+
"unit": "dollars",
|
|
396
|
+
"direction": "higher_is_better",
|
|
397
|
+
"history": []
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
"id": "kpi-burn-rate",
|
|
401
|
+
"name": "Monthly Burn Rate",
|
|
402
|
+
"description": "Monthly expenses - Monthly revenue",
|
|
403
|
+
"source": "manual",
|
|
404
|
+
"query": "hosting + tools + founder_salary - stripe_revenue",
|
|
405
|
+
"current_value": null,
|
|
406
|
+
"target_value": 2000,
|
|
407
|
+
"unit": "dollars",
|
|
408
|
+
"direction": "lower_is_better",
|
|
409
|
+
"history": []
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
"id": "kpi-runway",
|
|
413
|
+
"name": "Runway",
|
|
414
|
+
"description": "Months until cash runs out at current burn rate",
|
|
415
|
+
"source": "calculated",
|
|
416
|
+
"query": "cash_on_hand / monthly_burn_rate",
|
|
417
|
+
"current_value": null,
|
|
418
|
+
"target_value": 18,
|
|
419
|
+
"unit": "months",
|
|
420
|
+
"direction": "higher_is_better",
|
|
421
|
+
"history": []
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"id": "kpi-gross-margin",
|
|
425
|
+
"name": "Gross Margin",
|
|
426
|
+
"description": "BYOK model: (Revenue - COGS) / Revenue. Near-zero COGS = 90-95% margins.",
|
|
427
|
+
"source": "calculated",
|
|
428
|
+
"query": "(stripe_revenue - ai_api_costs) / stripe_revenue * 100",
|
|
429
|
+
"current_value": null,
|
|
430
|
+
"target_value": 92,
|
|
431
|
+
"unit": "percent",
|
|
432
|
+
"direction": "higher_is_better",
|
|
433
|
+
"history": []
|
|
434
|
+
}
|
|
435
|
+
],
|
|
436
|
+
"related_ideas": []
|
|
356
437
|
}
|
|
357
438
|
]
|
|
358
439
|
}
|
|
@@ -7001,7 +7001,7 @@
|
|
|
7001
7001
|
{
|
|
7002
7002
|
"id": "idea-dd16ce17",
|
|
7003
7003
|
"created_at": "2026-02-19T19:31:25.141Z",
|
|
7004
|
-
"updated_at": "2026-02-
|
|
7004
|
+
"updated_at": "2026-02-23T17:33:23.125Z",
|
|
7005
7005
|
"title": "Fix fire-and-forget implementation to track failure status",
|
|
7006
7006
|
"summary": "The implementation API fires execAsync and only logs errors in .catch() — never updating the implementation record to 'failed', leaving permanently stuck 'in progress' sessions in the dashboard.",
|
|
7007
7007
|
"category": "tech_debt",
|
|
@@ -7016,7 +7016,7 @@
|
|
|
7016
7016
|
"Implementation failure rate tracked and visible: baseline: unmeasured → target: <20% failure rate within 2 weeks",
|
|
7017
7017
|
"Stale implementation cleanup: baseline: manual intervention required → target: auto-detected and marked failed within 15 minutes"
|
|
7018
7018
|
],
|
|
7019
|
-
"stage": "
|
|
7019
|
+
"stage": "testing",
|
|
7020
7020
|
"source": {
|
|
7021
7021
|
"type": "codebase_analysis",
|
|
7022
7022
|
"session_id": "session-2c7f65d3",
|
|
@@ -7028,8 +7028,8 @@
|
|
|
7028
7028
|
},
|
|
7029
7029
|
"implementation": {
|
|
7030
7030
|
"branch_name": "ai/idea-dd16ce17-impl",
|
|
7031
|
-
"pr_url":
|
|
7032
|
-
"pr_number":
|
|
7031
|
+
"pr_url": "https://github.com/braza-ai/100xmanager/pull/24",
|
|
7032
|
+
"pr_number": 24,
|
|
7033
7033
|
"commits": [],
|
|
7034
7034
|
"started_at": null,
|
|
7035
7035
|
"completed_at": null,
|
|
@@ -7162,35 +7162,69 @@
|
|
|
7162
7162
|
{
|
|
7163
7163
|
"id": "st-006",
|
|
7164
7164
|
"title": "End-to-end verification: simulate crash, stale, and spawn failure paths",
|
|
7165
|
-
"description": "Write a comprehensive integration test in `scripts/__tests__/implement-e2e-failure.test.ts` (for the implement.ts paths) and extend `src/app/api/ideas/[id]/implement/__tests__/route-e2e.test.ts` (for the API paths) to verify the full failure recovery chain end-to-end.\n\nFor `implement-e2e-failure.test.ts`:\n1. Set up a temp data dir with a real ideas.json (idea in 'in_progress') and an implementations.json (impl in 'cloning' status).\
|
|
7165
|
+
"description": "[Retry 2] Write a comprehensive integration test in `scripts/__tests__/implement-e2e-failure.test.ts` (for the implement.ts paths) and extend `src/app/api/ideas/[id]/implement/__tests__/route-e2e.test.ts` (for the API paths) to verify the full failure recovery chain end-to-end.\n\n**Critical fix required:** The previous attempt failed with `spawnSync claude ETIMEDOUT` because tests were hitting real Claude CLI subprocess calls. All `spawnSync` / `execSync` / `child_process` calls that invoke `claude` must be mocked at the top of every test file using `jest.mock('child_process', ...)` or via `jest.spyOn(child_process, 'spawnSync').mockReturnValue(...)` before any imports that transitively call them. Do NOT let any test path actually spawn Claude.\n\nFor `implement-e2e-failure.test.ts`:\n1. At the top, mock `child_process` so `spawnSync` returns `{ status: 0, stdout: '', stderr: '', pid: 999 }` by default. Also mock any `runImplementation` or git/gh shell calls.\n2. Set up a temp data dir with a real ideas.json (idea in 'in_progress') and an implementations.json (impl in 'cloning' status).\n3. Simulate a crash mid-implementation by mocking `runImplementation` to throw `new Error('simulated crash')` and calling the catch block path directly.\n4. Assert: ideas.json shows `idea.stage === 'approved'`; implementations.json shows `status === 'failed'` with `error_message === 'Implementation failed: simulated crash'`.\n5. Verify `console.error` was called with ideaId and implId in the log context.\n6. Simulate a stale implementation (`started_at` = 20 min ago, `status = 'cloning'`) and call `markStaleImplementationsFailed(15)`.\n7. Assert: implementation is now `'failed'` with `error_message` containing `'stale'`.\n\nFor `route-e2e.test.ts`:\n1. At the top, mock `child_process` (same pattern as above) to prevent any `spawnSync claude` calls from actually executing.\n2. Create a stale implementation (20 min old, `status='branching'`) in a temp data dir.\n3. Issue GET `/api/ideas/[id]/implement` and assert: response shows `status='failed'`; idea stage is `'approved'`; `console.warn` was called with the stale count.\n4. Verify fresh implementations (2 min old) are NOT touched by a GET request.\n5. Verify all structured log fields are present: `ideaId`, `implId`, `error`/`reason`, timestamp-relative age.\n\nThis test acts as a regression guard: if any recovery path is broken, it will fail here before it can produce stuck dashboard rows.",
|
|
7166
7166
|
"files_to_modify": [
|
|
7167
7167
|
"scripts/__tests__/implement-e2e-failure.test.ts",
|
|
7168
7168
|
"src/app/api/ideas/[id]/implement/__tests__/route-e2e.test.ts"
|
|
7169
7169
|
],
|
|
7170
7170
|
"observability": "The test itself verifies that all observability requirements (structured logs, error_message content, stage reversion) are met. Any future regression that silently drops a log or forgets error_message will be caught here.",
|
|
7171
7171
|
"status": "failed",
|
|
7172
|
-
"started_at": "2026-02-
|
|
7173
|
-
"completed_at": "2026-02-
|
|
7172
|
+
"started_at": "2026-02-23T17:08:08.342Z",
|
|
7173
|
+
"completed_at": "2026-02-23T17:18:10.642Z",
|
|
7174
7174
|
"error_message": "Process exited with code 1",
|
|
7175
7175
|
"commit_hash": null,
|
|
7176
|
-
"duration_ms":
|
|
7176
|
+
"duration_ms": 602212,
|
|
7177
7177
|
"files_changed": [
|
|
7178
|
+
"bin/ai-analyst.ts",
|
|
7179
|
+
"docs/feedback-playbook.md",
|
|
7178
7180
|
"package-lock.json",
|
|
7179
7181
|
"package.json",
|
|
7182
|
+
"scripts/__tests__/analyze-enrichment.test.ts",
|
|
7183
|
+
"scripts/__tests__/analyze.test.ts",
|
|
7184
|
+
"scripts/__tests__/first-scan-e2e.test.ts",
|
|
7185
|
+
"scripts/__tests__/heartbeat.test.ts",
|
|
7186
|
+
"scripts/__tests__/prompt-specificity.test.ts",
|
|
7187
|
+
"scripts/analyze.ts",
|
|
7180
7188
|
"scripts/heartbeat.ts",
|
|
7181
7189
|
"scripts/implement.ts",
|
|
7182
|
-
"scripts/lib/
|
|
7183
|
-
"scripts/lib/
|
|
7184
|
-
"scripts/lib/
|
|
7190
|
+
"scripts/lib/__tests__/format-results.test.ts",
|
|
7191
|
+
"scripts/lib/__tests__/progress.test.ts",
|
|
7192
|
+
"scripts/lib/__tests__/screenshot.test.ts",
|
|
7193
|
+
".../lib/__tests__/storage-hypothesis-id.test.ts",
|
|
7194
|
+
"scripts/lib/format-results.ts",
|
|
7195
|
+
"scripts/lib/progress.ts",
|
|
7196
|
+
"scripts/lib/screenshot.ts",
|
|
7197
|
+
"scripts/skills/__tests__/social-media.test.ts",
|
|
7185
7198
|
"scripts/skills/social-media.ts",
|
|
7186
|
-
"
|
|
7187
|
-
"
|
|
7199
|
+
"scripts/social-routine.ts",
|
|
7200
|
+
"scripts/validate-templates.ts",
|
|
7201
|
+
"src/app/api/ideas/[id]/card/route.ts",
|
|
7202
|
+
"src/app/api/ideas/[id]/transition/route.ts",
|
|
7203
|
+
"src/components/IdeaDetail.tsx",
|
|
7204
|
+
"src/components/IdeaKanban.tsx",
|
|
7205
|
+
"src/lib/content-generator.ts",
|
|
7206
|
+
"src/lib/prompts.ts",
|
|
7207
|
+
"src/lib/social-hooks.ts",
|
|
7208
|
+
"src/lib/social.ts",
|
|
7209
|
+
"src/lib/storage.ts",
|
|
7210
|
+
"src/lib/types.ts",
|
|
7211
|
+
".../emails/__tests__/validate-templates.test.ts",
|
|
7212
|
+
"templates/emails/day3-activation-feedback.txt",
|
|
7213
|
+
"templates/emails/day30-pmf-feedback.txt",
|
|
7214
|
+
"tests/api/transition.test.ts",
|
|
7215
|
+
"tests/e2e/ship-tweet-draft.test.ts",
|
|
7216
|
+
"tests/lib/content-generator.test.ts",
|
|
7217
|
+
"tests/lib/social-hooks.test.ts",
|
|
7218
|
+
"tsup.config.ts",
|
|
7219
|
+
"website/src/__tests__/landing-page.test.tsx",
|
|
7220
|
+
"website/src/app/page.tsx"
|
|
7188
7221
|
],
|
|
7189
|
-
"lines_added":
|
|
7190
|
-
"lines_removed":
|
|
7191
|
-
"has_uncommitted_changes":
|
|
7222
|
+
"lines_added": 5890,
|
|
7223
|
+
"lines_removed": 142,
|
|
7224
|
+
"has_uncommitted_changes": true,
|
|
7192
7225
|
"failure_type": "error",
|
|
7193
|
-
"output_snippet": null
|
|
7226
|
+
"output_snippet": null,
|
|
7227
|
+
"retry_count": 2
|
|
7194
7228
|
}
|
|
7195
7229
|
],
|
|
7196
7230
|
"decomposition_attempts": 1
|
|
@@ -7201,6 +7235,13 @@
|
|
|
7201
7235
|
"author": "ai-analyst",
|
|
7202
7236
|
"created_at": "2026-02-22T00:00:00.000Z",
|
|
7203
7237
|
"body": "TRIAGE 2026-02-22 (dedup-triage-and-approve-inbox): Moved to under_review. Has merit but did not score in top 8 for this triage pass. Re-evaluate in next batch triage when approved queue drops below 3."
|
|
7238
|
+
},
|
|
7239
|
+
{
|
|
7240
|
+
"id": "comment-1771868003125",
|
|
7241
|
+
"author": "system",
|
|
7242
|
+
"author_name": "System",
|
|
7243
|
+
"content": "Partial PR created (5/6 sub-tasks). Failed sub-tasks:\n- End-to-end verification: simulate crash, stale, and spawn failure paths (Process exited with code 1)",
|
|
7244
|
+
"created_at": "2026-02-23T17:33:23.125Z"
|
|
7204
7245
|
}
|
|
7205
7246
|
],
|
|
7206
7247
|
"tags": [
|
|
@@ -2549,6 +2549,59 @@
|
|
|
2549
2549
|
"[2026-02-23T06:15:22.498Z] Changes detected, staging and committing...",
|
|
2550
2550
|
"[2026-02-23T06:15:22.560Z] Skipping PR creation (--skip-pr)"
|
|
2551
2551
|
]
|
|
2552
|
+
},
|
|
2553
|
+
{
|
|
2554
|
+
"id": "impl-mlzfk4e7",
|
|
2555
|
+
"idea_id": "idea-dd16ce17",
|
|
2556
|
+
"status": "failed",
|
|
2557
|
+
"repo_name": "vibebusiness",
|
|
2558
|
+
"branch_name": "ai/idea-dd16ce17-impl",
|
|
2559
|
+
"workspace_path": "/Users/luismey/Code/vibebusiness/workspaces/vibebusiness",
|
|
2560
|
+
"logs": [
|
|
2561
|
+
"[2026-02-23T17:08:08.383Z] Implementation started",
|
|
2562
|
+
"[2026-02-23T17:08:08.385Z] Fetching latest from origin...",
|
|
2563
|
+
"[2026-02-23T17:08:10.298Z] Checking out branch: ai/idea-dd16ce17-impl",
|
|
2564
|
+
"[2026-02-23T17:08:10.318Z] Merging origin/main into ai/idea-dd16ce17-impl...",
|
|
2565
|
+
"[2026-02-23T17:08:10.553Z] Running Claude Code to implement changes (timeout: 600s (model: sonnet))...",
|
|
2566
|
+
"[2026-02-23T17:08:40.560Z] ...Claude Code working (30s elapsed, 0 chars output, 30s since last output)",
|
|
2567
|
+
"[2026-02-23T17:09:10.561Z] ...Claude Code working (60s elapsed, 0 chars output, 60s since last output)",
|
|
2568
|
+
"[2026-02-23T17:09:40.563Z] ...Claude Code working (90s elapsed, 0 chars output, 90s since last output)",
|
|
2569
|
+
"[2026-02-23T17:10:10.566Z] ...Claude Code working (120s elapsed, 0 chars output, 120s since last output)",
|
|
2570
|
+
"[2026-02-23T17:10:40.568Z] ...Claude Code working (150s elapsed, 0 chars output, 150s since last output)",
|
|
2571
|
+
"[2026-02-23T17:11:10.561Z] ...Claude Code working (180s elapsed, 0 chars output, 180s since last output)",
|
|
2572
|
+
"[2026-02-23T17:11:40.558Z] ...Claude Code working (210s elapsed, 0 chars output, 210s since last output)",
|
|
2573
|
+
"[2026-02-23T17:12:10.734Z] ...Claude Code working (240s elapsed, 0 chars output, 240s since last output)",
|
|
2574
|
+
"[2026-02-23T17:12:40.562Z] ...Claude Code working (270s elapsed, 0 chars output, 270s since last output)",
|
|
2575
|
+
"[2026-02-23T17:13:10.563Z] ...Claude Code working (300s elapsed, 0 chars output, 300s since last output)",
|
|
2576
|
+
"[2026-02-23T17:13:40.566Z] ...Claude Code working (330s elapsed, 0 chars output, 330s since last output)",
|
|
2577
|
+
"[2026-02-23T17:14:10.566Z] ...Claude Code working (360s elapsed, 0 chars output, 360s since last output)",
|
|
2578
|
+
"[2026-02-23T17:14:40.569Z] ...Claude Code working (390s elapsed, 0 chars output, 390s since last output)",
|
|
2579
|
+
"[2026-02-23T17:15:10.569Z] ...Claude Code working (420s elapsed, 0 chars output, 420s since last output)",
|
|
2580
|
+
"[2026-02-23T17:15:40.571Z] ...Claude Code working (450s elapsed, 0 chars output, 450s since last output)",
|
|
2581
|
+
"[2026-02-23T17:16:10.572Z] ...Claude Code working (480s elapsed, 0 chars output, 480s since last output)",
|
|
2582
|
+
"[2026-02-23T17:16:40.573Z] ...Claude Code working (510s elapsed, 0 chars output, 510s since last output)",
|
|
2583
|
+
"[2026-02-23T17:17:10.574Z] ...Claude Code working (540s elapsed, 0 chars output, 540s since last output)",
|
|
2584
|
+
"[2026-02-23T17:17:40.576Z] ...Claude Code working (570s elapsed, 0 chars output, 570s since last output)",
|
|
2585
|
+
"[2026-02-23T17:18:10.553Z] Claude Code timed out after 600s (0 chars output), sending SIGTERM",
|
|
2586
|
+
"[2026-02-23T17:18:10.555Z] Error: Implementation failed"
|
|
2587
|
+
]
|
|
2588
|
+
},
|
|
2589
|
+
{
|
|
2590
|
+
"id": "impl-mlzgggux",
|
|
2591
|
+
"idea_id": "idea-dd16ce17",
|
|
2592
|
+
"status": "completed",
|
|
2593
|
+
"repo_name": "vibebusiness",
|
|
2594
|
+
"branch_name": "ai/idea-dd16ce17-impl",
|
|
2595
|
+
"workspace_path": "/Users/luismey/Code/vibebusiness/workspaces/vibebusiness",
|
|
2596
|
+
"logs": [
|
|
2597
|
+
"[2026-02-23T17:33:17.528Z] Implementation started",
|
|
2598
|
+
"[2026-02-23T17:33:17.531Z] Fetching latest from origin...",
|
|
2599
|
+
"[2026-02-23T17:33:19.278Z] Checking out branch: ai/idea-dd16ce17-impl",
|
|
2600
|
+
"[2026-02-23T17:33:19.287Z] Merging origin/main into ai/idea-dd16ce17-impl...",
|
|
2601
|
+
"[2026-02-23T17:33:19.337Z] Create PR only mode — skipping implementation",
|
|
2602
|
+
"[2026-02-23T17:33:19.366Z] Pushing branch ai/idea-dd16ce17-impl to origin",
|
|
2603
|
+
"[2026-02-23T17:33:20.878Z] Creating PR with gh CLI"
|
|
2604
|
+
]
|
|
2552
2605
|
}
|
|
2553
2606
|
]
|
|
2554
2607
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"last_updated": "2026-02-
|
|
2
|
+
"last_updated": "2026-02-23T17:33:48.602Z",
|
|
3
3
|
"platform": "x",
|
|
4
4
|
"username": "@luisgmey",
|
|
5
5
|
"credentials_valid": true,
|
|
@@ -95,6 +95,54 @@
|
|
|
95
95
|
"tweet_url": null,
|
|
96
96
|
"media_paths": null,
|
|
97
97
|
"scheduled_date": "2026-02-27"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "draft-aab9b760",
|
|
101
|
+
"text": "Just shipped: Update npm README with landing page URL, value prop, and install instructions. The npm README is the #1 acquisition surface for CLI tools — add the landing URL, one-liner value prop, and copy-paste install instructions now that the landing page is live. #buildinp...",
|
|
102
|
+
"source": "ship",
|
|
103
|
+
"source_ref": "idea-readme-landing-url",
|
|
104
|
+
"status": "draft",
|
|
105
|
+
"created_at": "2026-02-23T16:29:54.275Z",
|
|
106
|
+
"published_at": null,
|
|
107
|
+
"tweet_id": null,
|
|
108
|
+
"tweet_url": null,
|
|
109
|
+
"media_paths": null
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "draft-8ddbde76",
|
|
113
|
+
"text": "",
|
|
114
|
+
"source": "update",
|
|
115
|
+
"source_ref": null,
|
|
116
|
+
"status": "draft",
|
|
117
|
+
"created_at": "2026-02-23T16:49:32.828Z",
|
|
118
|
+
"published_at": null,
|
|
119
|
+
"tweet_id": null,
|
|
120
|
+
"tweet_url": null,
|
|
121
|
+
"media_paths": null
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "draft-872eedce",
|
|
125
|
+
"text": "Hot take: AI coding tools are solving the wrong problem. You don't need better code. You need to research → decide → ship → measure. That's the full loop competitors leave empty. Which step breaks your workflow? #buildinpublic",
|
|
126
|
+
"source": "update",
|
|
127
|
+
"source_ref": null,
|
|
128
|
+
"status": "draft",
|
|
129
|
+
"created_at": "2026-02-23T17:31:44.849Z",
|
|
130
|
+
"published_at": null,
|
|
131
|
+
"tweet_id": null,
|
|
132
|
+
"tweet_url": null,
|
|
133
|
+
"media_paths": null
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": "draft-6f24fde6",
|
|
137
|
+
"text": "5 ships in one week by analyzing my own codebase with VibeBusiness. OG cards, Stripe ready, landing page optimization, npm docs, social proof. The irony: autonomous AI improving itself. #buildinpublic",
|
|
138
|
+
"source": "digest",
|
|
139
|
+
"source_ref": null,
|
|
140
|
+
"status": "draft",
|
|
141
|
+
"created_at": "2026-02-23T17:33:48.602Z",
|
|
142
|
+
"published_at": null,
|
|
143
|
+
"tweet_id": null,
|
|
144
|
+
"tweet_url": null,
|
|
145
|
+
"media_paths": null
|
|
98
146
|
}
|
|
99
147
|
],
|
|
100
148
|
"metrics": {
|