38980-vm/app-9w9pd00g5j41/PERSONA_PRICING_SUMMARY.md
2026-03-04 18:25:09 +00:00

7.2 KiB
Raw Permalink Blame History

Persona-Based Lead Pricing Implementation Summary

Overview

Successfully implemented persona-based pricing multiplier system for LetsGoCappadocia lead management. The system automatically adjusts lead prices based on tourist persona profiles, optimizing revenue while providing fair pricing.

Implementation Details

1. Database Layer

New Functions

  • apply_persona_multiplier(p_price INTEGER, p_tourist_persona JSONB)
    • Applies persona-based multiplier to lead price
    • Multipliers:
      • very_high: 1.5x (Romantic Couple, Luxury Traveler)
      • high: 1.3x (Content Creator, Group Tour)
      • medium: 1.0x (Family Explorer, Solo Adventurer)
      • low: 0.8x (Budget Backpacker)
    • Returns adjusted price rounded to nearest integer

Updated Functions

  • calculate_lead_price(p_base_price, p_planned_activities, p_trigger_source, p_tourist_persona)

    • Added p_tourist_persona parameter
    • Pricing calculation chain:
      1. Base price (default: 20 credits)
      2. Activity multipliers (balloon: 2.0x, ATV: 1.5x, guided tour: 1.4x)
      3. AI recommendation premium (1.75x)
      4. Persona multiplier (0.8x - 1.5x) ← NEW
    • Final price = base × activities × AI × persona
  • update_lead_pricing() (Trigger Function)

    • Updated to pass tourist_persona to calculate_lead_price
    • Automatically recalculates price when persona changes
    • Trigger fires on: INSERT or UPDATE of base_price, planned_activities, override_price, trigger_source, tourist_persona

Updated Views

  • leads_for_providers
    • Added tourist_persona column (visible to all providers)
    • Added persona_confidence column (visible to all providers)
    • Persona information shown regardless of purchase status (to incentivize purchase)
    • Contact information (email, whatsapp) still masked until purchased

2. Migration Files

00089_add_persona_pricing_multiplier.sql

  • Creates apply_persona_multiplier function
  • Updates calculate_lead_price function with persona parameter
  • Updates update_lead_pricing trigger function
  • Recreates trigger with persona support
  • Updates existing leads with persona-based pricing
  • Grants necessary permissions

00090_update_leads_view_with_persona.sql

  • Drops and recreates leads_for_providers view
  • Adds persona columns to view
  • Maintains security (contact info masking)

3. Frontend Integration

Existing Components (Already Working)

  • PersonaBadge Component (/src/components/planner/PersonaBadge.tsx)

    • Displays persona with emoji, label, and color-coded badge
    • Shows description optionally
    • Color coding based on spend_potential
  • LeadDetailModal Component (/src/components/provider/LeadDetailModal.tsx)

    • Shows persona information in dedicated card
    • Displays emoji, sales_label, description, confidence score
    • Shows spend_potential badge
    • Purchased leads: Shows recommended services
    • Unpurchased leads: Shows teaser message with lock icon
    • Incentivizes purchase by showing persona type before purchase
  • Persona Detection (/src/utils/persona-engine.ts)

    • Analyzes trip data (travelers, interests, activities, budget)
    • Returns persona type and confidence score
    • Used in useTripEvents.ts during lead creation

Lead Creation Flow

  1. User creates trip plan in TripPlanner
  2. User clicks on AI tour recommendation
  3. LeadCaptureModal opens for contact info
  4. On submit:
    • detectPersona() analyzes trip data
    • Returns persona type and confidence
    • leadsApi.create() called with persona data
    • Database trigger calculates final price with persona multiplier
    • Toast shows persona emoji and label
  5. Provider sees lead with persona badge and adjusted price

4. Pricing Examples

Example 1: Budget Backpacker

  • Base price: 20 credits
  • Activities: None
  • AI recommendation: No
  • Persona: Budget Backpacker (low)
  • Final price: 20 × 0.8 = 16 credits

Example 2: Romantic Couple with Balloon

  • Base price: 20 credits
  • Activities: Hot air balloon (2.0x)
  • AI recommendation: Yes (1.75x)
  • Persona: Romantic Couple (very_high)
  • Final price: 20 × 2.0 × 1.75 × 1.5 = 105 credits

Example 3: Luxury Traveler with Full Package

  • Base price: 20 credits
  • Activities: Balloon (2.0x) + ATV (1.5x) + Guided tour (1.4x)
  • AI recommendation: Yes (1.75x)
  • Persona: Luxury Traveler (very_high)
  • Final price: 20 × 2.0 × 1.5 × 1.4 × 1.75 × 1.5 = 441 credits

Example 4: Family Explorer

  • Base price: 20 credits
  • Activities: Guided tour (1.4x)
  • AI recommendation: No
  • Persona: Family Explorer (medium)
  • Final price: 20 × 1.4 × 1.0 = 28 credits

5. Security & Privacy

Persona Information

  • Visible to all providers (before purchase)
  • Helps providers assess lead quality
  • Incentivizes purchase of high-value leads

Contact Information

  • Masked until purchased (email: ***@***.***, whatsapp: +90 *** *** ****)
  • Full access after purchase
  • Hidden until purchased (shows teaser with lock icon)
  • Full list visible after purchase

6. Benefits

For Providers

  • See lead quality before purchase (persona type, spend potential)
  • Make informed purchase decisions
  • Optimize budget allocation
  • Target high-value leads

For Platform

  • Dynamic pricing based on lead value
  • Increased revenue from high-value leads
  • Fair pricing for budget travelers
  • Better lead-provider matching

For Users

  • Fair pricing based on travel style
  • Better service recommendations
  • Improved provider matching

7. Testing

Lint Check

npm run lint
# Result: Checked 244 files in 3s. No fixes applied. ✅

Database Functions

  • apply_persona_multiplier function created
  • calculate_lead_price updated with persona parameter
  • update_lead_pricing trigger updated
  • Trigger fires on persona changes
  • Existing leads updated with persona pricing

Frontend Components

  • PersonaBadge displays correctly
  • LeadDetailModal shows persona information
  • Persona detection works during lead creation
  • Toast shows persona emoji and label
  • Provider dashboard shows persona badges

8. Files Modified/Created

Database Migrations

  • supabase/migrations/00089_add_persona_pricing_multiplier.sql (NEW)
  • supabase/migrations/00090_update_leads_view_with_persona.sql (NEW)

Documentation

  • TODO.md (UPDATED)
  • PERSONA_PRICING_SUMMARY.md (NEW - this file)

Existing Files (No Changes Needed)

  • /src/types/persona.ts (Already exists)
  • /src/types/lead.ts (Already exists)
  • /src/utils/persona-engine.ts (Already exists)
  • /src/components/planner/PersonaBadge.tsx (Already exists)
  • /src/components/provider/LeadDetailModal.tsx (Already exists)
  • /src/pages/TripPlanner/hooks/useTripEvents.ts (Already uses persona detection)
  • /src/db/api.ts (Already accepts persona parameters)

Conclusion

All requirements successfully implemented

  • Persona-based pricing multiplier active
  • Database functions and triggers working
  • Frontend integration verified
  • Security and privacy maintained
  • Lint checks passed
  • No breaking changes

The system is production-ready and will automatically apply persona-based pricing to all new leads.