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.