For You

Personalized tile rankings per shopper. Same query different per-customer; reranking from purchase, browse, and segment history.

For You in production — screenshot from the 🛒 E-commerce demo
🛒 E-commerce_recommendE-commerce
Production anchorPersonalized tile rankings per shopper — same query different per-customer; re-ranking from purchase, browse, and segment history.

The problem

The For-You feed is the load-bearing surface in any e-commerce or content product. It is the page where personalization either obviously works or obviously doesn't. Most catalog tools default to manually curated tiles plus a generic "popular" sort; personalization gets added as a separate ranking model that has to be trained, monitored, and re-tuned. The cost of building it is what keeps For-You feeds stuck at curated-default in most products.

The signal that should drive the feed is in the data already. Every customer's purchase history, browse pattern, segment membership, and engagement signal is queryable. The feed is asking the wrong question: "what's popular?" The right question is "what is this customer likely to want?" — and that is a _recommend query against the available signals.

How it works

_recommend ranks the candidate tiles per customer based on the conditional probability of click or purchase. The query takes the customer ID (or session ID for new visitors), the candidate set (categories, products, content), and returns the ranked list with calibrated probabilities. The application renders the top-N as the For-You feed.

Re-ranking adapts continuously. Every click and every purchase enters the index immediately; the next refresh reflects the new signal. New products get baseline ranking until impressions accumulate; products with no clicks for a segment fall in that segment's ranking while staying high in other segments where they perform.

{
  "from": "impressions",
  "where": {
    "customer_id": "CUST-04812"
  },
  "recommend": "product.category",
  "goal": { "click": true },
  "limit": 8
}

For the full architecture, see the technology overview. For the broader narrative across multiple use cases, read The Predictive Application.

See it live

This use case runs in the 🛒 E-commerce demo today. Click through to the live application and inspect the queries that produce the result. Source is on GitHub under Apache 2.0.

Open the live demo →

Frequently asked

How does this compare to traditional recommender systems (collaborative filtering, neural CF)?

Same conceptual family; different implementation. _recommend runs the conditional probability at query time from indexed signals; collaborative filtering and neural CF build offline models. The query-time approach is cheaper to operate and reflects new data immediately; the offline approach has a small accuracy edge on dense data.

What about new visitors with no history?

Cold-start gets the population-baseline ranking. As soon as 3-5 impressions accumulate, the system can usually place the visitor in a behavioral segment and the conditional ranking begins to apply. Cold-start visitors see the general feed; identifiable visitors see the personalized one.

Can the For-You feed mix content types (products, articles, categories)?

Yes. _recommend works on any column with a candidate set; mix product IDs, category IDs, and content IDs as the target attribute. The application renders the mixed result. Many deployments run separate queries per content type and merge in the UI for editorial control.

How quickly does the ranking update after new clicks?

Immediately. Click enters the index, next query reflects it. There is no batch update or retraining schedule. Seasonal patterns, trend shifts, new product launches — all visible in the ranking within seconds.

Can the feed be controlled with editorial rules (boost X, demote Y)?

Yes. Add boost/demote modifiers in the application layer; the prediction provides the baseline ranking; the editorial layer adjusts. Most deployments run a hybrid: prediction provides the personalization signal, editorial rules handle the merchandising overrides.