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.
- package/.next/standalone/.env +5 -1
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +17 -17
- 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.js +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 +2 -2
- package/.next/standalone/.next/server/app/api/analyze/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/epics/[id]/ideas/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/epics/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/epics/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/goals/[id]/kpis/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/goals/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/goals/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hypotheses/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/hypotheses/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[id]/comments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[id]/implement/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[id]/transition/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/implementations/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/kpis/refresh/route.js +1 -1
- package/.next/standalone/.next/server/app/api/kpis/refresh/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/api/social/[id]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/social/[id]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/route.js +1 -1
- package/.next/standalone/.next/server/app/api/social/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.js.nft.json +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.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.js +1 -1
- package/.next/standalone/.next/server/app/hypotheses/page.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/ideas/[id]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/ideas/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/page.js +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/roadmap/[id]/page.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.js +1 -1
- package/.next/standalone/.next/server/app/roadmap/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/roadmap/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/sessions/page.js +1 -1
- package/.next/standalone/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page.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 +2 -2
- package/.next/standalone/.next/server/app/social/page.js +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 +3 -3
- package/.next/standalone/.next/server/app-paths-manifest.json +13 -13
- package/.next/standalone/.next/server/chunks/3644.js +1 -1
- package/.next/standalone/.next/server/chunks/{7809.js → 3794.js} +103 -2
- 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 +7 -4
- package/.next/standalone/data/copy/landing-landing-page-2026-02-20.md +1 -1
- package/.next/standalone/data/heartbeat-sessions.json +211 -10
- package/.next/standalone/data/hypotheses.json +2 -2
- package/.next/standalone/data/ideas.json +958 -449
- package/.next/standalone/data/implementations.json +136 -2
- package/.next/standalone/data/positioning.json +1 -1
- package/.next/standalone/data/reports/visuals/promo-launch.png +0 -0
- package/.next/standalone/data/reports/visuals/promo-ship-fast.png +0 -0
- package/.next/standalone/data/reports/visuals/promo-while-you-slept-v2.png +0 -0
- package/.next/standalone/data/reports/visuals/promo-while-you-slept-v3.png +0 -0
- package/.next/standalone/data/reports/visuals/promo-while-you-slept.png +0 -0
- package/.next/standalone/package.json +2 -2
- package/.next/standalone/scripts/analyze.ts +2 -2
- package/.next/standalone/scripts/implement.ts +5 -5
- package/.next/standalone/scripts/skills/social-media.ts +310 -9
- package/.next/static/chunks/{444-125b7b0fa8cbdb81.js → 444-1826396aef4dab2f.js} +1 -1
- package/.next/static/chunks/app/hypotheses/[id]/{page-65032da79ae146c5.js → page-8999ee91b824d378.js} +1 -1
- package/.next/static/chunks/app/hypotheses/page-6206bce440c44569.js +1 -0
- package/.next/static/chunks/app/ideas/[id]/{page-dc9746061e58eea5.js → page-89e3625db9017166.js} +1 -1
- package/.next/static/chunks/app/{page-fb66ff080390f20a.js → page-8ba52ac74c75461b.js} +1 -1
- package/.next/static/chunks/app/roadmap/[id]/{page-c8c4baf233e0d480.js → page-f437e783039534c4.js} +1 -1
- package/.next/static/chunks/app/roadmap/{page-b15554a207ed2813.js → page-6177b8774b4af79f.js} +1 -1
- package/.next/static/chunks/app/social/{page-6c61fb0c2546313e.js → page-69e480936711ccf2.js} +1 -1
- package/README.md +1 -1
- package/dist/bin/vibebusiness.js +22 -0
- package/dist/scripts/analyze.js +4 -3
- package/dist/scripts/chat.js +10 -2
- package/dist/scripts/generate-idea.js +1 -0
- package/dist/scripts/heartbeat.js +2265 -653
- package/dist/scripts/implement.js +5 -4
- package/dist/scripts/init.js +5 -0
- package/dist/scripts/scan.js +2 -1
- package/package.json +2 -2
- package/templates/commands/setup-posthog.md +116 -0
- package/.next/static/chunks/app/hypotheses/page-8314da4be7c533bd.js +0 -1
- /package/.next/static/{Tko0dnk2wKPorUxfNnm0x → zIIaTqrawBK1MmHg37JOr}/_buildManifest.js +0 -0
- /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
|
|
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
|
|
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
|
|
682
|
+
Implemented by AI Product Manager
|
|
682
683
|
Idea: ${idea.id}` : `feat: ${idea.title}
|
|
683
684
|
|
|
684
|
-
Implemented by AI
|
|
685
|
+
Implemented by AI Product Manager
|
|
685
686
|
Idea: ${idea.id}`;
|
|
686
687
|
exec(`git commit -m "${commitMsg}"`, workspacePath);
|
|
687
688
|
} else {
|
package/dist/scripts/init.js
CHANGED
|
@@ -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);
|
package/dist/scripts/scan.js
CHANGED
|
@@ -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
|
|
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.
|
|
4
|
-
"description": "AI-powered autonomous
|
|
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()}]);
|
|
File without changes
|
|
File without changes
|