Skip to main content

Purpose

This document outlines how we personalize the “For You” recommendations for each user. We use a weighted signal system that learns from user behavior to surface the most relevant courses and consultations.

How It Works

Instead of calculating personalization on every request, we:
  1. Pre-compute a user interest profile (embedding) from their activity
  2. Store this profile and update it when behavior changes
  3. Match the user profile against product profiles using vector similarity
  4. Serve personalized recommendations instantly
This approach is efficient - we only recalculate when the user’s preferences actually change.

Signal Categories

Strong Intent Signals (Highest Impact)

These indicate direct purchase or learning intent:

Explicit Preferences (User-Declared)

What users tell us about themselves:

Behavioral Signals (Implicit)

What we learn from user actions:

Negative Signals (Exclusions)

What we avoid recommending:

When Recommendations Update

We recalculate a user’s profile when their preferences change:

Cold Start (New Users)

For users without activity history:
  1. Use their Primary Interest Category from profile setup
  2. If no profile yet → show Trending/Popular content
  3. Build personalized recommendations after first interactions

Data Sources

Key Decisions

  • Event-driven updates only: We don’t recalculate on a schedule. If a user hasn’t interacted, their preferences haven’t changed.
  • Weighted averaging: Stronger signals (wishlist, cart) influence recommendations more than weak signals (views).
  • Recency matters: Recent views weighted higher than old ones (decay function).
  • Negative signals excluded: We never recommend already-purchased items.

Success Metrics

  • Click-through rate on “For You” section
  • Conversion rate from recommendations
  • Wishlist additions from recommendations
  • User engagement with personalized vs non-personalized content

Technical Implementation

See: docs/flows/ for integration details (if created) Key files:
  • server/src/recommendation/services/user-embedding.service.ts - Signal collection and embedding calculation
  • server/src/recommendation/listeners/user-embedding.listener.ts - Event handlers for updates
  • server/src/recommendation/processors/user-embedding.processor.ts - Background job processing

Last Updated

2025-01-27