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:- Pre-compute a user interest profile (embedding) from their activity
- Store this profile and update it when behavior changes
- Match the user profile against product profiles using vector similarity
- Serve personalized recommendations instantly
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:- Use their Primary Interest Category from profile setup
- If no profile yet → show Trending/Popular content
- 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 calculationserver/src/recommendation/listeners/user-embedding.listener.ts- Event handlers for updatesserver/src/recommendation/processors/user-embedding.processor.ts- Background job processing