Skip to content

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:

  1. Use YeboID for auth
  2. Use YeboSafe for payments
  3. 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 delivery

Technical 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 offers

AI 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 ​

WeekTasks
1-2Auth migration to YeboID
3-4Escrow integration
5-6Agent adapter (sell flow)
7-8Agent adapter (buy flow)
9-10Mobile 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 questions

Technical 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 status

Timeline ​

WeekTasks
1Auth migration to YeboID
2Matching algorithm
3Agent search adapter
4Auto-apply flow
5Interview scheduling
6Interview 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 profile

Technical 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 teaches

Course 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 certificates

YeboJobs 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 ​

WeekTasks
1-2Database schema, course model
3-4Content management, video hosting
5-6Progress tracking, quizzes
7-8Certificates, YeboJobs integration
9-10Agent 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 positions

Sell → Source → Sell

Sell phone cases (success)
    ↓
Agent notices demand
    ↓
Suggests sourcing from YeboNa
    ↓
(Phase 3)

Shared Data ​

DataOwnerConsumers
User identityYeboIDAll
User walletYeboSafeYeboShops, YeboJobs
User skillsYeboJobsYeboLearn
CertificatesYeboLearnYeboJobs
ReputationYeboShopsYeboJobs

Success Metrics ​

MetricTarget
YeboShops transactions500/month
YeboJobs applications1,000/month
YeboLearn enrollments500/month
Agent-assisted actions50% 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

One chat. Everything done.