6.1 KiB
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:
- Collector - Document intake (conversational)
- Extractor - Insight extraction (JSON)
- Vision - Vision synthesis (JSON)
- MVP - MVP planning (JSON)
- 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:
{
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:
{
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:
{
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
GET /api/projects/phase?projectId=xxx
Response:
{
currentPhase: 'gathering',
phaseStatus: 'in_progress',
phaseData: { /* phase-specific data */ },
phaseHistory: []
}
Start a Phase
POST /api/projects/phase
{
projectId: 'xxx',
action: 'start',
phase: 'gathering'
}
Complete a Phase
POST /api/projects/phase
{
projectId: 'xxx',
action: 'complete'
}
Save Phase Data
POST /api/projects/phase
{
projectId: 'xxx',
action: 'save_data',
data: { /* phase-specific data */ }
}
Add Gathering Insight
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
// 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:
// 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
- ✅ Phase tracking schema created
- ✅ Phase API endpoints created
- ✅ New projects auto-initialize with gathering phase
- ⏳ Create Gathering Agent prompt
- ⏳ Update chat route to use phase-based agent selection
- ⏳ Build UI to show phase progress
- ⏳ Create migration script for existing projects