A year ago I presented Full-Page Recommender at RecSys 2025. It was the only paper there about building a whole recommendation page, with rows and themes, instead of one ranked list. At RecSys 2026 there were four. I am still working on this problem, so I read them as a map of where the area moved.
The shared change is simple to explain but has a big impact in practice. The thing we optimize is the page. Items on a page compete for attention, repeat each other, and change what the rows around them mean. A score for one title does not see that.
Where I started
Full-Page Recommender keeps the usual steps and adds the page at the end. First, rank items for the user. Then group them into collections with a label, such as a genre or a theme. Then place those collections into rows with a greedy layout. The layout balances relevance, diversity, coherence inside a row, and deduplication across the page.
I still like this split. Each part can be checked, and the balance between goals is a set of weights. The problem is the same split. The ranker does not see the page, and the layout can only reorder what the earlier steps already made.
The work I do now is the same problem with a different method. A transformer builds the page in one pass, row by row and item by item. The training signal is a score of the finished page: relevance, duplication, diversity, similarity inside a row, and coverage. These are the goals from the 2025 paper. The model tries to reach them together.
Netflix generates the homepage
GenPage does this in production. Netflix replaces the multi-stage homepage stack with one transformer. The user and the request are the prompt. The model writes the homepage as the answer: the rows, and the titles inside them. They first train on pages people actually engaged with. Then they train more, either with weighted binary classification or with reinforcement learning.
In an online test, the classification version beat their production homepage by 0.24% on the engagement metric they use for launches. Serving was 20% faster. Offline, two results stood out. A richer prompt helped more than a bigger model. Reinforcement learning made the homepages more diverse, even though diversity was not in the objective.
In my 2025 layout, diversity was a weight I had to set. In GenPage it showed up from a reward that never mentioned it. Their reward comes from real engagement. Mine is a utility I can write down and change, on public data. I want to learn which page properties appear on their own, and which ones I still have to add.
Disney+ ranks the homepage
DRanker is the other choice. GenPage removes the separate ranker. DRanker keeps it, and makes it the model for the whole Disney+ homepage. It is an encoder-only transformer over a person’s watch history. It has two outputs: whether the person engages with a title, and how long that engagement lasts. A small extra part corrects for bias in the logged data.
They tried more complex versions. The simpler ones were better, offline, in qualitative checks, and in production. After a global launch, the ranker is above 1% on their main engagement metric and 0.5% on daily active users.
DRanker orders titles. It does not choose the row, and it does not see if the next row repeats the same titles. That is the part my page utility is for. GenPage asks one model to do both the order and the rows. DRanker shows that a simple ranker, already serving the homepage, is enough to move engagement when another system still builds the page.
eBay treats the page as a sequence of modules
From Placements to Pages also builds the page step by step, but the steps are modules, not titles. On eBay, several placements on a page each had their own bandit. That assumes the choice of one module does not change the value of the next. Their Sequential Transformer Neural Bandit drops that assumption: each module is chosen from the modules already on the page.
This is the same idea as GenPage, and as the generator I am training, one level up. A title is worth more or less depending on the row before it. A module is worth more or less depending on the modules above it. Doing this for every placement is slow, so eBay does the sequential step only for the placements people see first. The rest of the page is scored in one batch. A second layer mixes engagement with later purchases. On the View Item page, revenue from promoted listings went up, and the wider marketplace metrics stayed in place.
GenPage generates the full page this way. eBay does it only where the position is visible. Below that, the modules are independent again, which is the DRanker setup: each placement scored on its own.
Pinterest scores the creative in the context of the grid
PinDCO still picks from candidates, like DRanker, but the score depends on the page, like the eBay sequence. New generative tools created many ad variants per campaign. PinDCO scores each part of a creative on its own — image, title, layout — and then combines the scores. On Pinterest the layout is a waterfall grid, so the size of one creative changes what can sit next to it.
A pixel-aware adjustment changes the score based on that size, so the model cares about the screen and not only about the click. A smaller model removes weak candidates early. Online, ad click-through rate went up by 3.09%, and the whole-page metrics moved up too.
In the 2025 layout, the item score is computed before the page exists, so it cannot know the space a choice will take or what will sit beside it. eBay learns that by picking the next module after the previous ones. PinDCO learns it by letting size change the score. I put it in the utility of the finished page, which is why the generator is trained on the whole page.
What changed in a year
In 2025 I split the carousel page into ranking, collections, and layout. In 2026 the same three parts show up in production, and they overlap. DRanker is the ranking step, strong enough that the homepage moves. GenPage removes that step and writes the page. eBay keeps separate modules, but each one depends on the modules above it, until latency runs out. PinDCO keeps a score per candidate and lets the grid change it.
The model I am training follows GenPage, with the 2025 goals as the reward: relevance, duplication, diversity, similarity inside a row, and coverage. DRanker is what that model has to beat if a plain ranker is enough. eBay shows that using the page so far has a cost, and that the cost is worth it at the top of the page. PinDCO shows that the rest of the page also means how much space a choice takes. I want to study this with an objective I can take apart, on data anyone can rerun.