vibebusiness 1.2.46 → 1.2.49

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 (108) hide show
  1. package/.next/standalone/.env +5 -1
  2. package/.next/standalone/.next/BUILD_ID +1 -1
  3. package/.next/standalone/.next/app-build-manifest.json +17 -17
  4. package/.next/standalone/.next/app-path-routes-manifest.json +1 -1
  5. package/.next/standalone/.next/build-manifest.json +2 -2
  6. package/.next/standalone/.next/prerender-manifest.json +1 -1
  7. package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
  8. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  10. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  11. package/.next/standalone/.next/server/app/api/analyze/route.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  13. package/.next/standalone/.next/server/app/api/epics/[id]/ideas/route.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/api/epics/[id]/route.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/api/epics/route.js.nft.json +1 -1
  16. package/.next/standalone/.next/server/app/api/goals/[id]/kpis/route.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/api/goals/route.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/api/hypotheses/[id]/route.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/api/hypotheses/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/ideas/[id]/comments/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/ideas/[id]/implement/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/ideas/[id]/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/ideas/[id]/transition/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/ideas/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/implementations/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/kpis/refresh/route.js +1 -1
  28. package/.next/standalone/.next/server/app/api/kpis/refresh/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/social/[id]/publish/route.js +1 -1
  30. package/.next/standalone/.next/server/app/api/social/[id]/publish/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/social/[id]/route.js +1 -1
  32. package/.next/standalone/.next/server/app/api/social/[id]/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/social/route.js +1 -1
  34. package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/goals/page.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/goals/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/hypotheses/[id]/page.js +1 -1
  39. package/.next/standalone/.next/server/app/hypotheses/[id]/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/hypotheses/page.js +1 -1
  41. package/.next/standalone/.next/server/app/hypotheses/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/hypotheses/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/ideas/[id]/page.js +1 -1
  44. package/.next/standalone/.next/server/app/ideas/[id]/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/ideas/[id]/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/page.js +1 -1
  47. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/roadmap/[id]/page.js +1 -1
  50. package/.next/standalone/.next/server/app/roadmap/[id]/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/roadmap/page.js +1 -1
  52. package/.next/standalone/.next/server/app/roadmap/page.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/roadmap/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/sessions/page.js +1 -1
  55. package/.next/standalone/.next/server/app/sessions/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/settings/page.js +1 -1
  58. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/settings.html +1 -1
  60. package/.next/standalone/.next/server/app/settings.rsc +2 -2
  61. package/.next/standalone/.next/server/app/social/page.js +1 -1
  62. package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/social.html +1 -1
  64. package/.next/standalone/.next/server/app/social.rsc +3 -3
  65. package/.next/standalone/.next/server/app-paths-manifest.json +13 -13
  66. package/.next/standalone/.next/server/chunks/3644.js +1 -1
  67. package/.next/standalone/.next/server/chunks/{7809.js → 3794.js} +103 -2
  68. package/.next/standalone/.next/server/pages/404.html +1 -1
  69. package/.next/standalone/.next/server/pages/500.html +1 -1
  70. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  71. package/.next/standalone/data/business-context.json +7 -4
  72. package/.next/standalone/data/copy/landing-landing-page-2026-02-20.md +1 -1
  73. package/.next/standalone/data/heartbeat-sessions.json +211 -10
  74. package/.next/standalone/data/hypotheses.json +2 -2
  75. package/.next/standalone/data/ideas.json +958 -449
  76. package/.next/standalone/data/implementations.json +136 -2
  77. package/.next/standalone/data/positioning.json +1 -1
  78. package/.next/standalone/data/reports/visuals/promo-launch.png +0 -0
  79. package/.next/standalone/data/reports/visuals/promo-ship-fast.png +0 -0
  80. package/.next/standalone/data/reports/visuals/promo-while-you-slept-v2.png +0 -0
  81. package/.next/standalone/data/reports/visuals/promo-while-you-slept-v3.png +0 -0
  82. package/.next/standalone/data/reports/visuals/promo-while-you-slept.png +0 -0
  83. package/.next/standalone/package.json +2 -2
  84. package/.next/standalone/scripts/analyze.ts +2 -2
  85. package/.next/standalone/scripts/implement.ts +5 -5
  86. package/.next/standalone/scripts/skills/social-media.ts +310 -9
  87. package/.next/static/chunks/{444-125b7b0fa8cbdb81.js → 444-1826396aef4dab2f.js} +1 -1
  88. package/.next/static/chunks/app/hypotheses/[id]/{page-65032da79ae146c5.js → page-8999ee91b824d378.js} +1 -1
  89. package/.next/static/chunks/app/hypotheses/page-6206bce440c44569.js +1 -0
  90. package/.next/static/chunks/app/ideas/[id]/{page-dc9746061e58eea5.js → page-89e3625db9017166.js} +1 -1
  91. package/.next/static/chunks/app/{page-fb66ff080390f20a.js → page-8ba52ac74c75461b.js} +1 -1
  92. package/.next/static/chunks/app/roadmap/[id]/{page-c8c4baf233e0d480.js → page-f437e783039534c4.js} +1 -1
  93. package/.next/static/chunks/app/roadmap/{page-b15554a207ed2813.js → page-6177b8774b4af79f.js} +1 -1
  94. package/.next/static/chunks/app/social/{page-6c61fb0c2546313e.js → page-69e480936711ccf2.js} +1 -1
  95. package/README.md +1 -1
  96. package/dist/bin/vibebusiness.js +22 -0
  97. package/dist/scripts/analyze.js +4 -3
  98. package/dist/scripts/chat.js +10 -2
  99. package/dist/scripts/generate-idea.js +1 -0
  100. package/dist/scripts/heartbeat.js +2265 -653
  101. package/dist/scripts/implement.js +5 -4
  102. package/dist/scripts/init.js +5 -0
  103. package/dist/scripts/scan.js +2 -1
  104. package/package.json +2 -2
  105. package/templates/commands/setup-posthog.md +116 -0
  106. package/.next/static/chunks/app/hypotheses/page-8314da4be7c533bd.js +0 -1
  107. /package/.next/static/{Tko0dnk2wKPorUxfNnm0x → zIIaTqrawBK1MmHg37JOr}/_buildManifest.js +0 -0
  108. /package/.next/static/{Tko0dnk2wKPorUxfNnm0x → zIIaTqrawBK1MmHg37JOr}/_ssgManifest.js +0 -0
@@ -153,6 +153,7 @@ var COMPETITORS_FILE = path2.join(DATA_DIR, "competitors.json");
153
153
  var POSITIONING_FILE = path2.join(DATA_DIR, "positioning.json");
154
154
  var PAGES_FILE = path2.join(DATA_DIR, "pages.json");
155
155
  var PAYMENTS_FILE = path2.join(DATA_DIR, "payments.json");
156
+ var POSTHOG_FILE = path2.join(DATA_DIR, "posthog.json");
156
157
  var SOCIAL_FILE = path2.join(DATA_DIR, "social.json");
157
158
  var TEMPLATES_DIR = path2.join(__dirname, "..", "..", "templates");
158
159
  var COMMAND_TEMPLATES_DIR = path2.join(TEMPLATES_DIR, "commands");
@@ -527,7 +528,7 @@ ${idea.success_metrics.map((m) => `- ${m}`).join("\n")}
527
528
 
528
529
  ---
529
530
 
530
- This PR was automatically generated by the AI Business Analyst.
531
+ This PR was automatically generated by the AI Product Manager.
531
532
  Idea ID: \`${idea.id}\`
532
533
  `;
533
534
  try {
@@ -554,7 +555,7 @@ Idea ID: \`${idea.id}\`
554
555
  async function main() {
555
556
  const { ideaId, repoName, scope, skipPr, createPrOnly, timeout, model, workspacePath: workspacePathOverride } = parseArgs();
556
557
  console.log(`
557
- === AI Business Analyst - Implementation ===
558
+ === AI Product Manager - Implementation ===
558
559
  `);
559
560
  console.log(`Idea ID: ${ideaId}`);
560
561
  if (scope) console.log(`Mode: Scoped sub-task`);
@@ -678,10 +679,10 @@ async function main() {
678
679
  if (staged.trim().length > 0) {
679
680
  const commitMsg = scope ? `feat: ${idea.title} (sub-task)
680
681
 
681
- Implemented by AI Business Analyst
682
+ Implemented by AI Product Manager
682
683
  Idea: ${idea.id}` : `feat: ${idea.title}
683
684
 
684
- Implemented by AI Business Analyst
685
+ Implemented by AI Product Manager
685
686
  Idea: ${idea.id}`;
686
687
  exec(`git commit -m "${commitMsg}"`, workspacePath);
687
688
  } else {
@@ -482,6 +482,7 @@ var COMPETITORS_FILE = path6.join(DATA_DIR, "competitors.json");
482
482
  var POSITIONING_FILE = path6.join(DATA_DIR, "positioning.json");
483
483
  var PAGES_FILE = path6.join(DATA_DIR, "pages.json");
484
484
  var PAYMENTS_FILE = path6.join(DATA_DIR, "payments.json");
485
+ var POSTHOG_FILE = path6.join(DATA_DIR, "posthog.json");
485
486
  var SOCIAL_FILE = path6.join(DATA_DIR, "social.json");
486
487
  var TEMPLATES_DIR = path6.join(__dirname, "..", "..", "templates");
487
488
  var COMMAND_TEMPLATES_DIR = path6.join(TEMPLATES_DIR, "commands");
@@ -1133,6 +1134,8 @@ ${line}`);
1133
1134
  print(" - Set tech preferences: edit data/business-context.json \u2192 preferences");
1134
1135
  print(" - Configure KPI adapters: edit data/business-context.json");
1135
1136
  print("");
1137
+ print(" Tip: Run /setup-posthog in Claude Code to connect product analytics.");
1138
+ print("");
1136
1139
  }
1137
1140
  function printExistingProjectSuccess() {
1138
1141
  const line = "\u2500".repeat(60);
@@ -1150,6 +1153,8 @@ ${line}`);
1150
1153
  print(" - Set tech preferences: edit data/business-context.json \u2192 preferences");
1151
1154
  print(" - Configure KPI adapters: edit data/business-context.json");
1152
1155
  print("");
1156
+ print(" Tip: Run /setup-posthog in Claude Code to connect product analytics.");
1157
+ print("");
1153
1158
  }
1154
1159
  async function main() {
1155
1160
  const args = process.argv.slice(2);
@@ -300,6 +300,7 @@ var COMPETITORS_FILE = path2.join(DATA_DIR, "competitors.json");
300
300
  var POSITIONING_FILE = path2.join(DATA_DIR, "positioning.json");
301
301
  var PAGES_FILE = path2.join(DATA_DIR, "pages.json");
302
302
  var PAYMENTS_FILE = path2.join(DATA_DIR, "payments.json");
303
+ var POSTHOG_FILE = path2.join(DATA_DIR, "posthog.json");
303
304
  var SOCIAL_FILE = path2.join(DATA_DIR, "social.json");
304
305
  var TEMPLATES_DIR = path2.join(__dirname, "..", "..", "templates");
305
306
  var COMMAND_TEMPLATES_DIR = path2.join(TEMPLATES_DIR, "commands");
@@ -318,7 +319,7 @@ FunnelStage: acquisition | engagement | conversion | monetization
318
319
  SizeEstimate: xs | s | m | l | xl
319
320
  `.trim();
320
321
  function buildPass1Prompt(ctx) {
321
- return `You are a senior business analyst extracting structured business intelligence from a software project's documentation and codebase.
322
+ return `You are a senior product manager extracting structured business intelligence from a software project's documentation and codebase.
322
323
 
323
324
  ## Project: ${ctx.projectName}
324
325
  ## Framework: ${ctx.framework}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vibebusiness",
3
- "version": "1.2.46",
4
- "description": "AI-powered autonomous business analyst. Research. Build. Ship. Grow.",
3
+ "version": "1.2.49",
4
+ "description": "AI-powered autonomous product manager. Research. Build. Ship. Grow.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "private": false,
7
7
  "bin": {
@@ -0,0 +1,116 @@
1
+ # /setup-posthog — PostHog Analytics Integration Wizard
2
+
3
+ ## Usage
4
+ ```
5
+ /setup-posthog # Full setup (detect → install → validate → generate → configure KPI adapter → suggest events)
6
+ /setup-posthog provider # Generate only PostHogProvider + pageview tracker
7
+ /setup-posthog events # Generate only event tracking helper
8
+ /setup-posthog status # Check integration completeness
9
+ /setup-posthog connect-kpis # Scan codebase for events, map them to KPIs
10
+ ```
11
+
12
+ ## Input
13
+ - `$ARGUMENTS` — optional: one of the modes above (defaults to full setup)
14
+
15
+ ## Process
16
+
17
+ Parse `$ARGUMENTS` to determine mode. If empty or "setup", run the full wizard.
18
+
19
+ ---
20
+
21
+ ### Mode: Full Setup (default)
22
+
23
+ Runs the complete PostHog analytics integration wizard:
24
+
25
+ 1. **Detect Framework**: Reads `package.json` to identify Next.js (App/Pages Router), Express, Fastify, Remix, or generic Node.js. Checks for TypeScript and `src/` directory.
26
+
27
+ 2. **Install SDK**: If `posthog-js` is not in `node_modules`, runs `npm install posthog-js`. For non-Next.js frameworks, also installs `posthog-node`.
28
+
29
+ 3. **Validate API Key**: Reads `NEXT_PUBLIC_POSTHOG_KEY` (Next.js) or `POSTHOG_API_KEY` (other) from `.env` or environment. Validates key format (must start with `phc_`).
30
+ - If missing: prints instructions to add it and continues (key can be added later).
31
+ - If invalid format: prints warning.
32
+ - If valid: calls PostHog API to verify the key works.
33
+
34
+ 4. **Generate Tracking Code**: Creates framework-appropriate files:
35
+ - **Next.js App Router**: `PostHogProvider.tsx`, `PostHogPageview.tsx`, `posthog-events.ts`
36
+ - **Next.js Pages Router**: `lib/posthog.ts`, `_app.tsx` integration instructions
37
+ - **Generic (Express, etc.)**: `lib/posthog.ts` (posthog-node client)
38
+ - **Never overwrites existing files** — skips with a warning.
39
+
40
+ 5. **Update .env**: Appends PostHog key and host variables if not present. Ensures `.env` is in `.gitignore`.
41
+
42
+ 6. **Configure KPI Adapter**: Adds a `posthog` adapter entry to `data/business-context.json` so the KPI dashboard can pull metrics from PostHog. Skips if already configured.
43
+
44
+ 7. **Suggest Starter Events**: Recommends framework-specific events to track (e.g., `signed_up`, `feature_used`, `upgrade_clicked`, `cta_clicked`). Provides code snippets for adding them.
45
+
46
+ ---
47
+
48
+ ### Mode: `provider`
49
+
50
+ Generates only the PostHogProvider component and pageview tracker for the detected framework. Useful if you already have the SDK installed and key configured but need the React components.
51
+
52
+ ---
53
+
54
+ ### Mode: `events`
55
+
56
+ Generates only the event tracking helper file (`posthog-events.ts` or `lib/posthog.ts`). Useful for adding typed event tracking to an existing PostHog setup.
57
+
58
+ ---
59
+
60
+ ### Mode: `status`
61
+
62
+ Audits the current integration:
63
+ - Is PostHog SDK installed?
64
+ - Is the API key configured?
65
+ - Is the key format valid?
66
+ - Are generated files present (Provider, Pageview, events helper)?
67
+ - Is the KPI adapter configured in business-context.json?
68
+
69
+ Reports completeness as a percentage.
70
+
71
+ ---
72
+
73
+ ### Mode: `connect-kpis`
74
+
75
+ Scans the user's codebase for PostHog event calls and maps them to KPIs:
76
+
77
+ 1. **Find Events**: Searches for `posthog.capture('...')`, `trackEvent('...')`, and `client.capture({ event: '...' })` patterns across `.ts`, `.tsx`, `.js`, `.jsx` files. Ignores `node_modules`, `dist`, and `$`-prefixed internal events.
78
+
79
+ 2. **Read Existing KPIs**: Loads KPI definitions from `data/goals.json`.
80
+
81
+ 3. **Generate Mappings**: Creates `kpi-{event-name}` → `event_name` field mappings.
82
+
83
+ 4. **Update Adapter**: Writes the field mappings to the PostHog adapter in `data/business-context.json`. Creates the adapter if it doesn't exist.
84
+
85
+ 5. **Report**: Lists detected events, existing KPIs, and suggested mappings.
86
+
87
+ ---
88
+
89
+ ## State File
90
+
91
+ `data/posthog.json` tracks:
92
+ ```json
93
+ {
94
+ "last_updated": "2026-01-15T...",
95
+ "integration_status": {
96
+ "sdk_installed": true,
97
+ "api_key_valid": true,
98
+ "provider_generated": true,
99
+ "pageview_tracker": true,
100
+ "event_helper": false
101
+ },
102
+ "framework": { "framework": "nextjs", "typescript": true, "appRouter": true, "srcDir": true },
103
+ "generated_files": ["src/components/PostHogProvider.tsx", "src/components/PostHogPageview.tsx"]
104
+ }
105
+ ```
106
+
107
+ ## Error Handling
108
+
109
+ - Missing `NEXT_PUBLIC_POSTHOG_KEY` → prints instructions to add it to `.env`, continues setup
110
+ - Invalid key format (not `phc_...`) → prints warning, continues
111
+ - API key validation fails → prints error, continues (key can be fixed later)
112
+ - SDK install fails → returns failure with manual install instructions
113
+ - Target file already exists → skips with warning (never overwrites user code)
114
+ - Framework not detected → falls back to generic Node.js templates
115
+ - `business-context.json` missing → skips KPI adapter step with hint to run `vibebusiness init`
116
+ - No PostHog events found in codebase → reports zero and suggests running `posthog-setup` first
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[204],{7856:function(e,t,r){Promise.resolve().then(r.bind(r,1259)),Promise.resolve().then(r.bind(r,786))},5846:function(e,t,r){"use strict";r.d(t,{Z:function(){return a}});let a=(0,r(9205).Z)("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]])},7157:function(e,t,r){"use strict";r.d(t,{Z:function(){return a}});let a=(0,r(9205).Z)("ThumbsDown",[["path",{d:"M17 14V2",key:"8ymqnk"}],["path",{d:"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z",key:"m61m77"}]])},1810:function(e,t,r){"use strict";r.d(t,{Z:function(){return a}});let a=(0,r(9205).Z)("ThumbsUp",[["path",{d:"M7 10v12",key:"1qc93n"}],["path",{d:"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z",key:"emmmcr"}]])},1259:function(e,t,r){"use strict";r.d(t,{default:function(){return f}});var a=r(7437),n=r(7648),s=r(9376),i=r(5466),l=r(2048),d=r(8896),c=r(8220),o=r(2718),u=r(5621),b=r(8728),x=r(2222),m=r(2023),g=r(1994),h=r(257);let p=[{href:"/",label:"Dashboard",icon:(0,a.jsx)(i.Z,{className:"w-5 h-5"})},{href:"/roadmap",label:"Roadmap",icon:(0,a.jsx)(l.Z,{className:"w-5 h-5"})},{href:"/goals",label:"Goals",icon:(0,a.jsx)(d.Z,{className:"w-5 h-5"})},{href:"/hypotheses",label:"Hypotheses",icon:(0,a.jsx)(c.Z,{className:"w-5 h-5"})},{href:"/social",label:"Social",icon:(0,a.jsx)(o.Z,{className:"w-5 h-5"})},{href:"/sessions",label:"Sessions",icon:(0,a.jsx)(u.Z,{className:"w-5 h-5"})},{href:"/settings",label:"Settings",icon:(0,a.jsx)(b.Z,{className:"w-5 h-5"})}];function f(e){let{children:t}=e,r=(0,s.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:[(0,a.jsx)("div",{className:"p-4 border-b border-slate-700",children:(0,a.jsxs)(n.default,{href:"/",className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:"w-10 h-10 bg-emerald-500 rounded-lg flex items-center justify-center",children:(0,a.jsx)(x.Z,{className:"w-6 h-6 text-white"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"font-bold text-lg leading-tight",children:"Analyst"}),(0,a.jsx)("p",{className:"text-xs text-slate-400",children:h.env.NEXT_PUBLIC_PRODUCT_NAME||"Business"})]})]})}),(0,a.jsx)("nav",{className:"flex-1 p-4",children:(0,a.jsx)("ul",{className:"space-y-1",children:p.map(e=>{let t="/"===e.href?"/"===r:r.startsWith(e.href);return(0,a.jsx)("li",{children:(0,a.jsxs)(n.default,{href:e.href,className:(0,g.Z)("flex items-center gap-3 px-3 py-2 rounded-lg transition-colors",t?"bg-slate-800 text-white":"text-slate-400 hover:text-white hover:bg-slate-800"),children:[e.icon,(0,a.jsx)("span",{children:e.label})]})},e.href)})})}),(0,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:[(0,a.jsx)(m.Z,{className:"w-4 h-4"}),(0,a.jsx)("span",{children:"Powered by Claude"})]})})]}),(0,a.jsx)("main",{className:"flex-1 overflow-auto",children:t})]})}},786:function(e,t,r){"use strict";r.d(t,{default:function(){return u}});var a=r(7437),n=r(7648),s=r(8220),i=r(1810),l=r(7157),d=r(5846),c=r(1994),o=r(6153);function u(e){let{hypothesis:t}=e,r=t.evidence_for.length,u=t.evidence_against.length;return(0,a.jsx)(n.default,{href:"/hypotheses/".concat(t.id),children:(0,a.jsxs)("div",{className:"bg-white rounded-lg border border-slate-200 p-4 hover:border-amber-300 hover:shadow-md transition-all cursor-pointer",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,a.jsx)("span",{className:(0,c.Z)("inline-flex items-center gap-1.5 px-2 py-1 rounded-full text-xs font-medium border",o.lE[t.status]),children:o.R$[t.status]}),(0,a.jsx)("span",{className:(0,c.Z)("text-xs px-2 py-0.5 rounded-full",o.tl[t.funnel_stage]),children:o.PW[t.funnel_stage]})]}),(0,a.jsxs)("div",{className:"flex items-start gap-3 mb-3",children:[(0,a.jsx)("div",{className:"w-10 h-10 bg-amber-100 rounded-lg flex items-center justify-center flex-shrink-0",children:(0,a.jsx)(s.Z,{className:"w-5 h-5 text-amber-600"})}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("h3",{className:"font-semibold text-slate-900 text-base leading-tight mb-1",children:t.title}),(0,a.jsx)("p",{className:"text-sm text-slate-500 line-clamp-2",children:t.statement})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-4 mb-3",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1.5 text-sm",children:[(0,a.jsx)(i.Z,{className:"w-3.5 h-3.5 text-emerald-500"}),(0,a.jsx)("span",{className:"text-emerald-700 font-medium",children:r}),(0,a.jsx)("span",{className:"text-slate-400",children:"for"})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1.5 text-sm",children:[(0,a.jsx)(l.Z,{className:"w-3.5 h-3.5 text-red-500"}),(0,a.jsx)("span",{className:"text-red-700 font-medium",children:u}),(0,a.jsx)("span",{className:"text-slate-400",children:"against"})]})]}),(0,a.jsxs)("div",{className:"flex items-center justify-between pt-2 border-t border-slate-100",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-xs px-1.5 py-0.5 rounded bg-slate-100 text-slate-600 font-medium",children:o.bi[t.effort_to_test]}),(0,a.jsx)("span",{className:(0,c.Z)("text-xs px-1.5 py-0.5 rounded border",o.Gs[t.priority]),children:o.rF[t.priority]})]}),t.validation_ideas.length>0&&(0,a.jsxs)("span",{className:"text-xs text-amber-600 flex items-center gap-1",children:[(0,a.jsx)(d.Z,{className:"w-3 h-3"}),t.validation_ideas.length," idea",1!==t.validation_ideas.length?"s":""]})]})]})})}},6153:function(e,t,r){"use strict";r.d(t,{G:function(){return l},GK:function(){return k},Gs:function(){return o},Hs:function(){return a},PN:function(){return m},PW:function(){return y},Q_:function(){return g},R$:function(){return N},Vr:function(){return u},Wb:function(){return x},aR:function(){return b},bi:function(){return d},en:function(){return j},i2:function(){return v},kT:function(){return h},l5:function(){return p},lE:function(){return w},lv:function(){return i},pG:function(){return n},rF:function(){return c},tV:function(){return f},tl:function(){return _},xP:function(){return Z},yb:function(){return s}});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"},n={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"},s={inbox:"Inbox",under_review:"Under Review",approved:"Approved",in_progress:"In Progress",testing:"Testing",shipped:"Shipped",deferred:"Deferred",rejected:"Rejected",rolled_back:"Rolled Back"},i={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"},l=["inbox","under_review","approved","in_progress","testing","shipped"],d={xs:"XS",s:"S",m:"M",l:"L",xl:"XL"},c={critical:"Critical",high:"High",medium:"Medium",low:"Low"},o={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"},u={codebase_analysis:"Codebase Analysis",metrics_review:"Metrics Review",market_research:"Market Research",seo_audit:"SEO Audit",manual:"Manual"},b={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"},x={pending:"Pending",validated:"Validated",needs_investigation:"Needs Investigation",inconclusive:"Inconclusive",invalidated:"Invalidated"},m={ship:"Ship",update:"Update",milestone:"Milestone",digest:"Digest",manual:"Manual"},g={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"},h={acquisition:"Acquisition",activation:"Activation",retention:"Retention",revenue:"Revenue",referral:"Referral"},p={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"},f={on_track:"On Track",at_risk:"At Risk",behind:"Behind",achieved:"Achieved"},v={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"},j={manual:"Manual",rest_api:"REST API",posthog:"PostHog",firestore:"Firestore",stripe:"Stripe",whatsapp:"WhatsApp"},N={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"},y={acquisition:"Acquisition",engagement:"Engagement",conversion:"Conversion",monetization:"Monetization"},_={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"},k={planned:"Planned",active:"Active",completed:"Completed",paused:"Paused"},Z={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"}}},function(e){e.O(0,[746,971,117,744],function(){return e(e.s=7856)}),_N_E=e.O()}]);