Phase 2: Core Products
Rebuild core products with agent integration.
Timeline: Q2 2026 (10-12 weeks) Goal: Commerce, jobs, and learning all accessible via agent
What We're Building
Phase 1 gave us identity, payments, and a basic agent.
Phase 2 rebuilds the core products to:
- Use YeboID for auth
- Use YeboSafe for payments
- Be accessible via the agent
2.1 YeboShops — Commerce Rebuild
Current State (Vavu)
- ✅ Basic marketplace exists
- ❌ Separate auth (not YeboID)
- ❌ No escrow (direct payment)
- ❌ Not agent-accessible
- ❌ Poor mobile experience
Target State
User: "Sell these shoes"
[Drops 3 photos]
Agent:
→ AI generates titles, descriptions, prices
→ Creates listings on YeboShops
→ Distributes via Eneza
→ Handles buyer inquiries
→ Collects payment via YeboSafe
→ Notifies seller to ship
→ Releases funds on deliveryTechnical Spec
Database Migration
sql
-- Add YeboID link
ALTER TABLE users ADD COLUMN yeboid_user_id UUID UNIQUE;
-- Update existing users
UPDATE users SET yeboid_user_id = (
SELECT id FROM yeboid.users WHERE phone = users.phone
);
-- New escrow integration
ALTER TABLE orders ADD COLUMN escrow_id UUID;
ALTER TABLE orders ADD COLUMN escrow_status VARCHAR(20);API Changes
-- Deprecate
POST /auth/login → Use YeboID
POST /auth/register → Use YeboID
-- New
GET /listings/agent → Agent-optimized listing search
POST /listings/agent → Create listing from agent (photos + AI)
POST /orders/escrow → Create order with escrow
-- Agent Adapter
POST /agent/sell → Full sell flow
POST /agent/buy → Full buy flow
POST /agent/offer → Make/accept offersAI Listing Generation
javascript
async function generateListing(photos) {
const analysis = await gemini.analyzeImages(photos);
return {
title: analysis.suggestedTitle,
description: analysis.suggestedDescription,
category: analysis.detectedCategory,
suggestedPrice: analysis.estimatedPrice,
condition: analysis.detectedCondition
};
}Escrow Integration
javascript
async function createOrder(buyerId, listingId, amount) {
// 1. Create escrow in YeboSafe
const escrow = await yebosafe.createEscrow({
buyerWallet: buyerId,
sellerWallet: listing.sellerId,
amount,
orderRef: orderId
});
// 2. Collect payment
await yebosafe.fundEscrow(escrow.id, buyerId);
// 3. Create order
return await db.orders.create({
listingId,
buyerId,
sellerId: listing.sellerId,
escrowId: escrow.id,
status: 'paid'
});
}Timeline
| Week | Tasks |
|---|---|
| 1-2 | Auth migration to YeboID |
| 3-4 | Escrow integration |
| 5-6 | Agent adapter (sell flow) |
| 7-8 | Agent adapter (buy flow) |
| 9-10 | Mobile UI improvements |
Definition of Done
- [ ] All users auth via YeboID
- [ ] All transactions use YeboSafe escrow
- [ ] Agent can list items (photos → listing)
- [ ] Agent can facilitate purchases
- [ ] Agent handles negotiations
2.2 YeboJobs — Enhancement
Current State
- ✅ Job board works
- ✅ Employer posting works
- ❌ Separate auth
- ❌ No agent integration
- ❌ No auto-apply
Target State
User: "Find me React jobs in Lagos"
Agent:
→ Searches job database
→ Matches to user profile
→ Ranks by fit score
→ Shows top matches
→ Applies to selected jobs
→ Schedules interviews
→ Preps interview questionsTechnical Spec
Database Migration
sql
-- Add YeboID link
ALTER TABLE users ADD COLUMN yeboid_user_id UUID UNIQUE;
-- Add matching fields
ALTER TABLE job_seekers ADD COLUMN skills JSONB;
ALTER TABLE job_seekers ADD COLUMN experience_years INTEGER;
ALTER TABLE job_seekers ADD COLUMN preferred_locations TEXT[];
ALTER TABLE job_seekers ADD COLUMN salary_expectation JSONB;
-- Application tracking
ALTER TABLE applications ADD COLUMN applied_by VARCHAR(20); -- 'user' or 'agent'
ALTER TABLE applications ADD COLUMN match_score DECIMAL;Matching Algorithm
javascript
function calculateMatchScore(seeker, job) {
let score = 0;
// Skills match (40%)
const skillOverlap = seeker.skills.filter(s =>
job.requiredSkills.includes(s)
).length;
score += (skillOverlap / job.requiredSkills.length) * 40;
// Experience match (25%)
if (seeker.experienceYears >= job.minExperience) {
score += 25;
}
// Location match (20%)
if (seeker.preferredLocations.includes(job.location) || job.remote) {
score += 20;
}
// Salary match (15%)
if (seeker.salaryExpectation.max >= job.salaryMin) {
score += 15;
}
return score;
}Auto-Apply Flow
javascript
async function autoApply(userId, criteria) {
// 1. Find matching jobs
const jobs = await searchJobs(criteria);
const matches = jobs.filter(j => calculateMatchScore(user, j) >= 80);
// 2. Apply to each
const applications = [];
for (const job of matches.slice(0, 20)) {
const app = await createApplication({
jobId: job.id,
userId,
appliedBy: 'agent',
matchScore: calculateMatchScore(user, job),
coverLetter: await generateCoverLetter(user, job)
});
applications.push(app);
}
// 3. Notify user
await notifyUser(userId, `Applied to ${applications.length} jobs`);
return applications;
}Agent Adapter
POST /agent/search-jobs → Search with criteria
POST /agent/apply → Apply to specific job
POST /agent/auto-apply → Apply to all matching jobs
POST /agent/interview-prep → Generate prep materials
GET /agent/applications → List applications statusTimeline
| Week | Tasks |
|---|---|
| 1 | Auth migration to YeboID |
| 2 | Matching algorithm |
| 3 | Agent search adapter |
| 4 | Auto-apply flow |
| 5 | Interview scheduling |
| 6 | Interview prep generation |
Definition of Done
- [ ] Auth via YeboID
- [ ] Agent can search jobs with natural language
- [ ] Agent can auto-apply to matching jobs
- [ ] Agent can schedule interviews
- [ ] Agent can generate interview prep
2.3 YeboLearn — New Product
What We're Building
From scratch:
- Course catalog
- Progress tracking
- Certifications
- Agent accessibility
Target State
User: "I want to learn React"
Agent:
→ Shows React courses
→ Enrolls user
→ Tracks progress
→ Sends reminders
→ Issues certificate on completion
→ Adds to YeboJobs profileTechnical Spec
Database
sql
-- Courses
courses (id, title, description, category, level, duration_hours, price)
course_modules (id, course_id, title, order, content_type)
course_content (id, module_id, type, content, duration_minutes)
-- Progress
enrollments (id, user_id, course_id, enrolled_at, status)
progress (id, enrollment_id, module_id, completed_at)
certificates (id, enrollment_id, issued_at, certificate_url)
-- Integration
skills (id, name, category) -- Shared with YeboJobs
course_skills (course_id, skill_id) -- What skills course teachesCourse Structure
javascript
{
id: 'react-fundamentals',
title: 'React Fundamentals',
description: 'Learn React from scratch',
category: 'programming',
level: 'beginner',
durationHours: 10,
price: 0, // Free for MVP
modules: [
{
title: 'Introduction to React',
content: [
{ type: 'video', url: '...', duration: 15 },
{ type: 'text', content: '...' },
{ type: 'quiz', questions: [...] }
]
},
// ...
],
skills: ['react', 'javascript', 'frontend']
}Agent Adapter
POST /agent/courses/search → Find courses by topic
POST /agent/courses/enroll → Enroll in course
GET /agent/courses/progress → Get current progress
POST /agent/courses/complete → Mark module complete
GET /agent/certificates → List certificatesYeboJobs Integration
javascript
// When certificate issued
async function onCertificateIssued(enrollment) {
const course = await getCourse(enrollment.courseId);
// Add skills to user's YeboJobs profile
await yebojobs.addSkills(enrollment.userId, course.skills);
// Add certificate to profile
await yebojobs.addCertificate(enrollment.userId, {
name: course.title,
issuer: 'YeboLearn',
date: new Date(),
url: enrollment.certificateUrl
});
}Timeline
| Week | Tasks |
|---|---|
| 1-2 | Database schema, course model |
| 3-4 | Content management, video hosting |
| 5-6 | Progress tracking, quizzes |
| 7-8 | Certificates, YeboJobs integration |
| 9-10 | Agent adapter, initial courses |
Definition of Done
- [ ] Users can browse courses
- [ ] Users can enroll and track progress
- [ ] Certificates issued on completion
- [ ] Skills sync to YeboJobs
- [ ] Agent can recommend and enroll
Phase 2 Integration
Cross-Product Flows
Learn → Work
Complete React course
↓
Skills added to profile
↓
Agent finds matching jobs
↓
Auto-apply to 15 positionsSell → Source → Sell
Sell phone cases (success)
↓
Agent notices demand
↓
Suggests sourcing from YeboNa
↓
(Phase 3)Shared Data
| Data | Owner | Consumers |
|---|---|---|
| User identity | YeboID | All |
| User wallet | YeboSafe | YeboShops, YeboJobs |
| User skills | YeboJobs | YeboLearn |
| Certificates | YeboLearn | YeboJobs |
| Reputation | YeboShops | YeboJobs |
Success Metrics
| Metric | Target |
|---|---|
| YeboShops transactions | 500/month |
| YeboJobs applications | 1,000/month |
| YeboLearn enrollments | 500/month |
| Agent-assisted actions | 50% of total |
| Escrow completion rate | >90% |
Phase 2 Exit Criteria
Before moving to Phase 3:
- [ ] YeboShops: Full sell/buy flow via agent
- [ ] YeboJobs: Auto-apply working
- [ ] YeboLearn: Courses live, certificates issuing
- [ ] Cross-product: Skills syncing, reputation visible
- [ ] Escrow: All commerce using YeboSafe
Next: Phase 3: Intelligence