The Personalization Gap
Despite having 2.4M customers and 18 months of purchase history, the brand was showing the same "bestsellers" to a first-time visitor from New York and a loyal customer who had bought 12 times. The homepage was static. Email campaigns were batch-and-blast. The brand was leaving significant revenue on the table by not using the customer data they already had.
The Recommendation Architecture
We built a hybrid recommendation system combining three signals: (1) Collaborative filtering β "customers like you also bought" β using matrix factorization to find customers with similar purchase patterns. (2) Content-based filtering β recommending products similar to what the customer has already bought, based on product attribute embeddings (style, color, category, price range). (3) Contextual signals β time of day, device type, current session behavior, and seasonal trends.
These three signals are combined using a learned weighting model that determines which signal is most predictive for each customer segment β new customers rely more on content-based signals; loyal customers rely more on collaborative filtering.
Real-Time Personalization at Scale
The system generates personalized recommendations for all 2.4M customers in a nightly batch job, storing the results in Redis for sub-10ms retrieval. For real-time session signals (what the customer is browsing right now), we built a streaming pipeline using Kafka that updates recommendations within 30 seconds of new behavioral signals.
Email Personalization
The most impactful application was email. We replaced batch-and-blast campaigns with individually personalized product blocks β each customer's email contains the 6 products most likely to drive a purchase for them specifically. Email CTR improved from 1.4% to 3.9% (2.8x), and email-attributed revenue increased by 180% in the first quarter.