Placements
A placement is a named serving surface — a home feed, an article sidebar, a "you might also like" row. It binds a set of strategies and an item limit, and every request runs through the same ranking pipeline before it returns.
The building block
A placement has a slug your app requests by, a set of strategies it draws candidates from, and a limit. Ask for it by slug and it assembles a ranked set from whatever its strategies have materialized — personalized when you pass a profile, general when you don't.
{
"slug": "home_feed",
"name": "Home Feed",
"maxItems": 20,
"strategyIds": ["personalized", "trending"]
}The serving pipeline
Every request runs the candidate pool through the same fixed sequence. It's what turns a raw set of candidates into a feed that feels considered — fresh, personal, and varied.
Anything the viewer hid is dropped up front.
The same item from two strategies keeps its highest score.
Recent content gets a boost so the surface never goes stale.
Scores tilt toward the categories this person favors.
A per-category cap keeps one topic from taking over.
A score floor drops weak candidates; the rest is cut to the limit.
Quality on the surface
Two controls keep a placement honest. A score floor drops candidates the engine isn't confident about, so a thin surface shows fewer results rather than weak ones. A per-category cap keeps any single topic from crowding out the rest.
Keep exploring
How candidates are generated, ranked live, and tuned by feedback.
The candidate generators — trending, co-engagement, and the live model.
Turn profile attributes and segments into what personalizes a feed.
The trained recommender, its quality gates, and built-in A/B testing.