304 lines
6.1 KiB
Markdown
304 lines
6.1 KiB
Markdown
# Vibn Phase-Based Project System
|
|
|
|
⚠️ **LEGACY DOCUMENTATION** - This document describes the old phase system.
|
|
|
|
**The new system is documented in `/lib/ai/types.ts` and uses a workflow-based architecture.**
|
|
|
|
New phases:
|
|
1. **Collector** - Document intake (conversational)
|
|
2. **Extractor** - Insight extraction (JSON)
|
|
3. **Vision** - Vision synthesis (JSON)
|
|
4. **MVP** - MVP planning (JSON)
|
|
5. **Marketing** - Marketing strategy (JSON, parallel)
|
|
|
|
See `/lib/ai/orchestrator.ts` for the state machine implementation.
|
|
|
|
---
|
|
|
|
## The 5 Phases (Legacy)
|
|
|
|
### Phase 1: Gathering
|
|
**Agent:** Gathering Agent
|
|
**Goal:** Collect and analyze all project materials one item at a time
|
|
|
|
**What it does:**
|
|
- Goes through each context source (docs, GitHub, sessions)
|
|
- Extracts key insights from each
|
|
- Confirms each insight with user
|
|
- Stores confirmed insights
|
|
|
|
**Firestore Schema:**
|
|
```javascript
|
|
{
|
|
currentPhase: 'gathering',
|
|
phaseStatus: 'in_progress', // 'not_started' | 'in_progress' | 'completed'
|
|
phaseData: {
|
|
gathering: {
|
|
startedAt: timestamp,
|
|
insights: [
|
|
{
|
|
id: 'insight_1',
|
|
source: 'Patient History Overview',
|
|
sourceType: 'document',
|
|
sourceId: 'QeC8EIDSkud1jrt6xSyF',
|
|
insight: 'Using evidence-based diagnostic methods',
|
|
extractedAt: timestamp,
|
|
confirmed: true,
|
|
confirmedAt: timestamp,
|
|
usedInVision: false,
|
|
category: 'feature'
|
|
}
|
|
],
|
|
completedAt: timestamp
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Completion Criteria:**
|
|
- All context sources analyzed
|
|
- All insights confirmed by user
|
|
- User says "That's everything" or "Ready to proceed"
|
|
|
|
---
|
|
|
|
### Phase 2: Vision
|
|
**Agent:** Vision Agent
|
|
**Goal:** Extract Product Vision Board from confirmed insights
|
|
|
|
**What it does:**
|
|
- Reads all confirmed insights from Phase 1
|
|
- Extracts the 8 vision nodes
|
|
- Fills out 4-block Product Vision Board
|
|
- Gets user approval
|
|
|
|
**Firestore Schema:**
|
|
```javascript
|
|
{
|
|
currentPhase: 'vision',
|
|
phaseStatus: 'in_progress',
|
|
phaseData: {
|
|
vision: {
|
|
startedAt: timestamp,
|
|
data: {
|
|
vision: 'One-sentence vision',
|
|
who: 'Target users',
|
|
need: 'Problem they face',
|
|
product: 'Solution features',
|
|
validation: 'Go-to-market strategy'
|
|
},
|
|
approved: true,
|
|
approvedAt: timestamp,
|
|
completedAt: timestamp
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Completion Criteria:**
|
|
- Vision board complete
|
|
- User approves with "Yes" or "Looks good"
|
|
|
|
---
|
|
|
|
### Phase 3: Scope
|
|
**Agent:** Scope Agent
|
|
**Goal:** Define V1 MVP features
|
|
|
|
**What it does:**
|
|
- Takes vision board from Phase 2
|
|
- Helps user prioritize features (must-have, should-have, nice-to-have)
|
|
- Defines timeline estimate
|
|
- Creates V1 feature list
|
|
|
|
**Firestore Schema:**
|
|
```javascript
|
|
{
|
|
currentPhase: 'scope',
|
|
phaseStatus: 'in_progress',
|
|
phaseData: {
|
|
scope: {
|
|
startedAt: timestamp,
|
|
v1Features: ['Feature 1', 'Feature 2'],
|
|
timeline: '3-6 months',
|
|
priorities: {
|
|
mustHave: [],
|
|
shouldHave: [],
|
|
niceToHave: []
|
|
},
|
|
completedAt: timestamp
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Phase 4: Blueprint
|
|
**Agent:** Blueprint Agent
|
|
**Goal:** Technical architecture design
|
|
|
|
**What it does:**
|
|
- Takes V1 scope from Phase 3
|
|
- Defines tech stack
|
|
- Designs database schema
|
|
- Plans API structure
|
|
|
|
---
|
|
|
|
### Phase 5: Build
|
|
**Agent:** Build Agent (Future)
|
|
**Goal:** Implementation guidance
|
|
|
|
---
|
|
|
|
## Why Phase Tracking?
|
|
|
|
### ✅ Prevents Repetition
|
|
Once Phase 1 is complete, you never re-analyze documents. Phase 2 uses the stored insights.
|
|
|
|
### ✅ User Confidence
|
|
User sees clear progress: "Gathering: ✅ | Vision: ✅ | Scope: 🔄"
|
|
|
|
### ✅ Resumable
|
|
User can leave and come back. The agent knows exactly where they left off.
|
|
|
|
### ✅ Traceable
|
|
Every insight is linked to its source. Vision board items trace back to specific documents.
|
|
|
|
---
|
|
|
|
## API Usage
|
|
|
|
### Get Current Phase
|
|
```typescript
|
|
GET /api/projects/phase?projectId=xxx
|
|
|
|
Response:
|
|
{
|
|
currentPhase: 'gathering',
|
|
phaseStatus: 'in_progress',
|
|
phaseData: { /* phase-specific data */ },
|
|
phaseHistory: []
|
|
}
|
|
```
|
|
|
|
### Start a Phase
|
|
```typescript
|
|
POST /api/projects/phase
|
|
{
|
|
projectId: 'xxx',
|
|
action: 'start',
|
|
phase: 'gathering'
|
|
}
|
|
```
|
|
|
|
### Complete a Phase
|
|
```typescript
|
|
POST /api/projects/phase
|
|
{
|
|
projectId: 'xxx',
|
|
action: 'complete'
|
|
}
|
|
```
|
|
|
|
### Save Phase Data
|
|
```typescript
|
|
POST /api/projects/phase
|
|
{
|
|
projectId: 'xxx',
|
|
action: 'save_data',
|
|
data: { /* phase-specific data */ }
|
|
}
|
|
```
|
|
|
|
### Add Gathering Insight
|
|
```typescript
|
|
POST /api/projects/phase
|
|
{
|
|
projectId: 'xxx',
|
|
action: 'add_insight',
|
|
data: {
|
|
id: 'insight_1',
|
|
source: 'Document Name',
|
|
sourceType: 'document',
|
|
sourceId: 'doc_id',
|
|
insight: 'Key finding...',
|
|
extractedAt: timestamp,
|
|
confirmed: true,
|
|
confirmedAt: timestamp,
|
|
usedInVision: false,
|
|
category: 'feature'
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Agent Selection Logic
|
|
|
|
```typescript
|
|
// In /api/ai/chat/route.ts
|
|
|
|
// 1. Check project phase
|
|
const projectPhase = project.currentPhase || 'gathering';
|
|
const phaseStatus = project.phaseStatus || 'not_started';
|
|
|
|
// 2. Select appropriate agent
|
|
let agentPrompt;
|
|
switch (projectPhase) {
|
|
case 'gathering':
|
|
agentPrompt = GATHERING_AGENT_PROMPT;
|
|
break;
|
|
case 'vision':
|
|
agentPrompt = VISION_AGENT_PROMPT;
|
|
break;
|
|
case 'scope':
|
|
agentPrompt = SCOPE_AGENT_PROMPT;
|
|
break;
|
|
// ... etc
|
|
}
|
|
|
|
// 3. Pass phase data to agent
|
|
const contextPayload = {
|
|
...existingContext,
|
|
currentPhase: projectPhase,
|
|
phaseStatus: phaseStatus,
|
|
phaseData: project.phaseData || {}
|
|
};
|
|
```
|
|
|
|
---
|
|
|
|
## Migration Plan
|
|
|
|
### For Existing Projects
|
|
Run a migration script to add phase fields:
|
|
|
|
```javascript
|
|
// scripts/add-phase-tracking.ts
|
|
const projects = await adminDb.collection('projects').get();
|
|
|
|
for (const doc of projects.docs) {
|
|
await doc.ref.update({
|
|
currentPhase: 'gathering',
|
|
phaseStatus: 'not_started',
|
|
phaseData: {},
|
|
phaseHistory: []
|
|
});
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
1. ✅ Phase tracking schema created
|
|
2. ✅ Phase API endpoints created
|
|
3. ✅ New projects auto-initialize with gathering phase
|
|
4. ⏳ Create Gathering Agent prompt
|
|
5. ⏳ Update chat route to use phase-based agent selection
|
|
6. ⏳ Build UI to show phase progress
|
|
7. ⏳ Create migration script for existing projects
|
|
|