Loading...
User Interaction Tracking (user_interactions table)
Automatic tracking of views, bookmarks, and code copies
Session-based analytics with metadata support
Anonymous interaction support with graceful auth fallback
90-day data retention policy for privacy
Non-blocking async tracking (doesn't slow down user actions)
Affinity Scoring Algorithm (src/lib/personalization/affinity-scorer.ts)
Multi-factor scoring: Views (20%), Time spent (25%), Bookmarks (30%), Copies (15%), Recency (10%)
Exponential recency decay with 30-day half-life
Normalized 0-100 scoring with transparent breakdown
Batch processing via daily cron job at 2 AM UTC
Cached top 50 affinities per user (5-minute TTL)
Collaborative Filtering (src/lib/personalization/collaborative-filter.ts)
Item-based collaborative filtering using Jaccard similarity
Co-bookmark frequency analysis for "users who liked X also liked Y"
User-user similarity calculation for future enhancements
Pre-computed similarity matrices updated nightly
Optimized for sparse interaction data
Content Similarity Engine (src/lib/personalization/similar-configs.ts)
Multi-factor similarity: Tags (35%), Category (20%), Description (15%), Co-bookmarks (20%), Author (5%), Popularity (5%)
Keyword extraction and Jaccard coefficient matching
Related category mappings (agents ↔ commands ↔ rules)
Pre-computation stores top 20 similar items per config
15% similarity threshold for meaningful recommendations
For You Feed (/for-you page)
Hybrid algorithm blending multiple signals
Weight distribution: Affinity (40%), Collaborative (30%), Trending (15%), Interests (10%), Diversity (5%)
Category filtering and infinite scroll
Cold start recommendations for new users (trending + interests)
Personalized recommendation reasons ("Based on your past interactions")
5-minute cache with automatic revalidation
Similar Configs Section (detail page component)
Displays 6 similar configurations on every content page
Match percentage scores (0-100%)
Click tracking for algorithm improvement
Lazy-loaded for performance
Falls back gracefully when no similarities exist
Usage-Based Recommendations (src/lib/personalization/usage-based-recommender.ts)
After bookmark: "Users who saved this also saved..."
After copy: "Complete your setup with..." (complementary tools)
Extended time on page: "Related configs you might like..."
Category browsing: "Since you're exploring [category]..."
Complementarity rules (MCP ↔ agents, rules ↔ commands)
Background Processing
Daily affinity calculation cron (/api/cron/calculate-affinities)
Nightly similarity calculation cron (/api/cron/calculate-similarities)
Batch processing (50 users per batch, 1000 similarities per batch)
CRON_SECRET authentication for security
Comprehensive logging and error handling
Analytics Integration (Umami events)
personalization_affinity_calculated - Affinity scores computed
personalization_recommendation_shown - Recommendation displayed
personalization_recommendation_clicked - User engaged with rec
personalization_similar_config_clicked - Similar config selected
personalization_for_you_viewed - For You feed accessed
personalization_usage_recommendation_shown - Contextual rec shown
Bookmark actions now track interactions for affinity calculation
View tracking enhanced with user interaction logging
Copy actions record interaction events for scoring
Account library shows personalized recommendations
Navigation includes "For You" link for authenticated users
TL;DR: Intelligent personalization system with hybrid recommendation algorithms, "For You" feed, similar configs, and usage-based suggestions powered by interaction tracking and collaborative filtering.
Implemented comprehensive personalization infrastructure that learns from user behavior (views, bookmarks, copies) to deliver tailored configuration recommendations through affinity scoring, content similarity, and collaborative filtering algorithms.
User Interaction Tracking (user_interactions table)
Affinity Scoring Algorithm (src/lib/personalization/affinity-scorer.ts)
Collaborative Filtering (src/lib/personalization/collaborative-filter.ts)
Content Similarity Engine (src/lib/personalization/similar-configs.ts)
For You Feed (/for-you page)
Similar Configs Section (detail page component)
Usage-Based Recommendations (src/lib/personalization/usage-based-recommender.ts)
Background Processing
/api/cron/calculate-affinities)/api/cron/calculate-similarities)Analytics Integration (Umami events)
personalization_affinity_calculated - Affinity scores computedpersonalization_recommendation_shown - Recommendation displayedpersonalization_recommendation_clicked - User engaged with recpersonalization_similar_config_clicked - Similar config selectedpersonalization_for_you_viewed - For You feed accessedpersonalization_usage_recommendation_shown - Contextual rec shownDatabase Schema:
-- User interactions (clickstream)
user_interactions (user_id, content_type, content_slug, interaction_type, metadata, created_at)
-- Affinity scores (precomputed)
user_affinities (user_id, content_type, content_slug, affinity_score, based_on, calculated_at)
-- Similarity matrices
user_similarities (user_a_id, user_b_id, similarity_score, common_items, calculated_at)
content_similarities (content_a_type, content_a_slug, content_b_type, content_b_slug, similarity_score, similarity_factors, calculated_at)
Affinity Scoring Formula:
affinity = (
normalize(views, max=10) * 0.20 +
normalize(time_spent, max=300s) * 0.25 +
normalize(bookmarks, max=1) * 0.30 +
normalize(copies, max=3) * 0.15 +
recency_decay() * 0.10
) * 100
recency_decay = exp(-ln(2) * days_since / 30)
For You Feed Algorithm:
final_score = (
affinity_based * 0.40 +
collaborative * 0.30 +
trending * 0.15 +
interest_match * 0.10 +
diversity_bonus * 0.05
)
Collaborative Filtering:
intersection(users) / union(users)Files Added:
supabase/migrations/20250108000000_personalization_engine.sql - Complete schemasrc/lib/personalization/types.ts - TypeScript interfacessrc/lib/personalization/affinity-scorer.ts - Affinity algorithmsrc/lib/personalization/collaborative-filter.ts - CF implementationsrc/lib/personalization/similar-configs.ts - Similarity enginesrc/lib/personalization/for-you-feed.ts - Hybrid feed algorithmsrc/lib/personalization/usage-based-recommender.ts - Contextual recssrc/lib/schemas/personalization.schema.ts - Zod validation schemassrc/lib/actions/interaction-actions.ts - Interaction tracking actionssrc/lib/actions/affinity-actions.ts - Affinity calculation actionssrc/lib/actions/personalization-actions.ts - Recommendation actionssrc/app/api/cron/calculate-affinities/route.ts - Affinity cron jobsrc/app/api/cron/calculate-similarities/route.ts - Similarity cron jobsrc/app/for-you/page.tsx - For You feed pagesrc/app/for-you/loading.tsx - Loading statesrc/components/personalization/for-you-feed-client.tsx - Feed UIsrc/components/personalization/similar-configs-section.tsx - Similar configs UIFiles Modified:
src/lib/actions/bookmark-actions.ts - Added interaction trackingsrc/lib/actions/track-view.ts - Enhanced with interaction loggingsrc/lib/analytics/events.config.ts - Added 6 personalization eventsPerformance:
Security:
Privacy:
All content automatically participates in personalization algorithms. No special tagging required - the system learns from:
Configure in Vercel (or deployment platform):
Daily Affinity Calculation:
/api/cron/calculate-affinities0 2 * * * (2 AM UTC)Authorization: Bearer ${CRON_SECRET}Nightly Similarity Calculation:
/api/cron/calculate-similarities0 3 * * * (3 AM UTC) Authorization: Bearer ${CRON_SECRET}Required Environment Variable:
CRON_SECRET=your-secure-random-string-here