GenAI-Powered Personalized Homepage Carousels for Food Delivery

doordash · E-commerce · 2025 · source Agentic: no · promotional bias: med · summary-only (no fetched source) · extracted with prompt 0.5.6 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: food-delivery homepage personalization

DoorDash needed to replace a limited heuristic homepage carousel system with personalized, diverse, and relevant carousel generation that could scale to millions of users while improving merchant discovery and engagement.

Constraints:

Architecture

DoorDash built a five-stage GenAI personalization pipeline for homepage carousels. Spark batch jobs create prompts from consumer profiles and part-of-day context, call LLMs to generate personalized carousel titles and metadata, moderate titles with a three-model LLM jury, embed carousel metadata and merchant/dish profiles into a shared semantic space, retrieve stores and dishes with GPU exact KNN inside delivery-radius masks, and block-rerank candidates by blending existing engagement ranker scores with embedding similarity.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  consumer-profiles["Consumer profiles"] --> spark-batch-generation["Spark batch generation"]
  spark-batch-generation --> llm-carousel-generator["LLM carousel generator"]
  llm-carousel-generator --> llm-moderation-jury["LLM moderation jury"]
  llm-moderation-jury --> carousel-embedding["Carousel embedding"]
  llm-carousel-generator --> carousel-embedding
  merchant-and-dish-embeddings["Merchant and dish embeddings"] --> gpu-exact-knn-retrieval["GPU exact KNN retrieval"]
  delivery-radius-masks["Delivery-radius masks"] --> gpu-exact-knn-retrieval
  carousel-embedding --> gpu-exact-knn-retrieval
  gpu-exact-knn-retrieval --> block-reranker["Block reranker"]
  existing-engagement-ranker["Existing engagement ranker"] --> block-reranker
  block-reranker --> homepage-carousel-surface["Homepage carousel surface"]
  homepage-carousel-surface --> a-b-testing["A/B testing"]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Consumer profiles User-level cuisine, taste, dish, order-history, and interaction signals used to personalize carousel generation. Spark batch generation
Spark batch generation Cost-effective offline job that prepares prompts and calls LLM APIs in batch for many users. LLM carousel generator
LLM carousel generator Generates personalized carousel titles and auxiliary metadata from consumer profiles and part-of-day context. LLM moderation jury, Carousel embedding
LLM moderation jury Three-model moderation process that independently reviews titles and vetoes any title flagged by a juror. Carousel embedding
Carousel embedding Embedding representation of carousel title plus metadata for retrieval. GPU exact KNN retrieval
Merchant and dish embeddings Embedded merchant profiles and dish profiles formatted to share semantic space with carousel queries. GPU exact KNN retrieval
Delivery-radius masks Pre-generated masks that limit retrieval to deliverable stores for user geolocations and items within selected stores. GPU exact KNN retrieval
GPU exact KNN retrieval Online cosine-similarity retrieval over unmasked embeddings using matrix multiplication and top-K selection. Block reranker
Existing engagement ranker DoorDash's existing carousel ranker optimized for click-through and conversion signals. Block reranker
Block reranker Partitions baseline ranked lists into blocks and reranks within each block by blending engagement ranker score with embedding similarity. Homepage carousel surface
Homepage carousel surface Customer-facing homepage placement where personalized store carousels are shown and A/B tested. A/B testing
A/B testing Online measurement in San Francisco and Manhattan for click, conversion, relevance, and marketplace discovery outcomes. Homepage carousel surface

Data flow

Consumer profiles and time-of-day context feed Spark batch jobs that call LLMs to generate carousel titles and metadata. The titles are moderated by three LLM jurors, then concatenated with metadata and embedded. Merchant and dish profiles are also embedded. At serving time, KNN retrieval finds relevant stores inside a user's delivery radius and relevant dishes within stores, then the existing ranking framework partitions candidates into blocks and reranks each block using both engagement score and embedding similarity before showing homepage carousels.

3 supporting quotes
“The production system follows a five-stage pipeline architecture designed with two primary considerations: scalability to handle millions of users globally, and cost-effectiveness given the expense of external LLM API calls.”summary, stated
“The pipeline stages include carousel generation, carousel embedding generation, content moderation, store/item retrieval, and store ranking.”summary, stated
“The bulk content generation approach uses Spark jobs to generate prompts and calls LLMs through batch requests”summary, stated

Why this architecture

The design balances personalization quality, cost, safety, and production integration. Batch LLM generation controls API cost; metadata expansion makes short titles retrievable; exact GPU KNN preserves retrieval quality and latency; a moderation jury blocks unsafe titles; and block reranking lets DoorDash add embedding relevance without replacing its existing engagement ranker.

3 supporting quotes
“This batch-oriented architecture reflects a practical tradeoff between freshness and cost—the system doesn't generate carousels in real-time for each user visit but rather pre-generates them in bulk processing runs.”summary, stated
“This metadata expansion transforms generic titles into personalized, context-rich queries that significantly improve retrieval relevance.”summary, stated
“The blocked re-ranking approach represents a pragmatic middle ground between completely replacing the existing ranking system and ignoring the new relevance signals from embeddings.”summary, stated

Models used: LLMs · LLM text embedding models · Spark · GPU exact KNN · existing carousel serving framework · store ranking models · food knowledge graph

Scale

Alternatives considered (roads not taken)

Heuristic food knowledge graph with curated carousels

Rejected because: The earlier system had insufficient diversity, broad and impersonal concepts, and relevance issues from suboptimal tagging.

“The original system was built around a food knowledge graph (FKG) that organized content into categories like "breakfast burritos," "salads," and "baked goods."”summary, stated
“this approach suffered from three critical limitations: insufficient concept diversity”summary, stated

Real-time carousel generation per homepage visit

Rejected because: Batch generation was chosen as a cost-effective strategy because external LLM API calls are expensive at global-user scale.

“cost-effectiveness given the expense of external LLM API calls.”summary, stated
“pre-generates them in bulk processing runs.”summary, stated

Short title embeddings alone

Rejected because: Brief carousel titles such as 'Hearty wraps' lacked enough retrieval context, so the LLM also generated personalized metadata aligned to merchant profiles.

“The brevity of titles like "Hearty wraps" makes them difficult to convert into useful embeddings for retrieval without additional context.”summary, stated
“DoorDash solves this by having the LLM generate auxiliary metadata for each carousel that aligns with merchant profile fields.”summary, stated

Approximate nearest neighbor retrieval

Rejected because: DoorDash used exact GPU KNN, accepting higher infrastructure cost for retrieval quality and low latency.

“DoorDash performs exact KNN search on GPU rather than approximate nearest neighbor search.”summary, stated
“accepting higher infrastructure costs for GPUs in exchange for better retrieval quality and low latency.”summary, stated

Replace the existing engagement ranker

Rejected because: DoorDash used block reranking to incorporate embedding similarity incrementally without rebuilding the production ranking system.

“bridging new GenAI capabilities with existing production systems rather than requiring a complete rebuild.”summary, stated
“an incremental path toward a fully learned ranker that could eventually incorporate embedding similarity as a native feature.”summary, stated

Patterns

batch-offline-processing (LLMOps cost control)

DoorDash pre-generates personalized carousels in Spark batch jobs instead of calling LLMs in real time for every homepage visit.

“The bulk content generation approach uses Spark jobs to generate prompts and calls LLMs through batch requests”summary, stated
“the system doesn't generate carousels in real-time for each user visit but rather pre-generates them in bulk processing runs.”summary, stated

llm-as-judge (content safety)

The moderation layer prompts three LLMs as independent jurors and applies a veto rule to block any title flagged as problematic.

“DoorDash employs an "LLM-as-jury" approach to scale the review process.”summary, stated
“The three LLMs independently evaluate each title, and their decisions are subjected to a veto process”summary, stated

rag-retrieval (semantic retrieval)

Carousel titles plus metadata and merchant/dish profiles are embedded into the same semantic space so KNN retrieval can populate carousels with relevant stores and dishes.

“After carousel titles and metadata are generated, they are concatenated into text and converted into embeddings using LLM text embedding models.”summary, stated
“merchant profiles and dish profiles are formatted as JSON and embedded using the same model to ensure semantic compatibility.”summary, stated

retrieval-ranking (recommendation ranking)

DoorDash retrieves stores and dishes by embedding similarity, then reranks within blocks using both existing engagement ranking and embedding relevance.

“The retrieval system performs two k-nearest neighbor (KNN) queries: first to identify stores with the highest cosine similarity within the user's delivery radius”summary, stated
“within each block, stores are reordered by a weighted blend of the ranker model score and the embedding similarity score.”summary, stated

eval-driven-development (quality evaluation)

DoorDash uses internal panels for subjective carousel quality, third-party labelers for store relevance, precision@K monitoring, and A/B tests for online business impact.

“DoorDash created a panel of internal users who scored carousels based on criteria including repetition frequency, specificity, diversity, and relevance.”summary, stated
“DoorDash used third-party labelers to score the relevance of stores fetched for each carousel based on predefined criteria.”summary, stated

cost-aware-routing (architecture tradeoff)

The system uses cheaper batch LLM generation where freshness can lag, but spends on GPU exact KNN where retrieval quality and low latency are business-critical.

“This batch-oriented architecture reflects a practical tradeoff between freshness and cost”summary, stated
“accepting higher infrastructure costs for GPUs in exchange for better retrieval quality and low latency.”summary, stated

human-in-the-loop-gate (prompt quality)

Internal user panels score generated carousels and feed prompt refinement for repetition, specificity, diversity, and relevance.

“DoorDash optimizes their prompts through continuous feedback from internal user panels”summary, stated
“human feedback directly shapes the production prompts.”summary, stated

Tradeoffs

LLM generation timing

Chose offline Spark batch generation over real-time LLM calls per homepage visit.

Rationale: Batch generation controls external LLM API cost at millions-of-users scale, accepting less freshness.

“a cost-effective strategy for processing large volumes of users.”summary, stated
“trades some freshness for significant cost savings at scale.”summary, stated

Retrieval method

Chose exact KNN on GPU over approximate nearest neighbor search.

Rationale: DoorDash accepted GPU cost to preserve retrieval quality and low latency for business-critical personalization.

“DoorDash performs exact KNN search on GPU rather than approximate nearest neighbor search.”summary, stated
“the business value of improved relevance justifies the additional computational expense.”summary, stated

Content moderation policy

Chose multi-LLM veto moderation over manual review or majority-vote leniency.

Rationale: A conservative veto prioritizes brand safety and high recall over moderation cost and false positives.

“This conservative approach achieves 95% recall on detecting problematic titles.”summary, stated
“trades some false positives (blocking acceptable content) for high confidence in preventing inappropriate content from reaching users.”summary, stated

Ranking integration

Chose block reranking with engagement and similarity scores over fully replacing the baseline ranker or ignoring embedding relevance.

Rationale: Block reranking reduces implementation risk while making the new relevance signal usable before retraining the ranker.

“This incremental approach reduces implementation risk and provides a path to iterate toward a more sophisticated solution.”summary, stated
“The multiplicative design ensures that stores only rise to the top if they perform well on both engagement and relevance dimensions”summary, stated

Gotchas (what bit them)

Short generated titles are poor retrieval queries by themselves.

Root cause: Titles such as 'Hearty wraps' are too brief to create useful embeddings without extra context.

Resolution: Have the LLM generate auxiliary metadata aligned to merchant profile fields, personalized by user preferences and order history.

“The brevity of titles like "Hearty wraps" makes them difficult to convert into useful embeddings for retrieval without additional context.”summary, stated
“This metadata expansion transforms generic titles into personalized, context-rich queries that significantly improve retrieval relevance.”summary, stated

Generated consumer-facing titles need scalable moderation.

Root cause: Manual review cannot handle millions of unique carousel titles.

Resolution: Use three LLM jurors with a conservative veto rule to block problematic titles.

“Manual review is infeasible when generating millions of unique carousel titles”summary, stated
“if any single juror LLM flags a title as problematic, it is automatically blocked.”summary, stated

Existing rankers may not know how to use new embedding-similarity features.

Root cause: The existing engagement ranker had not been trained on the new embedding similarity scores.

Resolution: Use block reranking to blend ranker score and embedding similarity within local blocks while retaining the production ranker.

“the existing ranker hasn't been trained on the new embedding similarity scores that indicate retrieval relevance.”summary, stated
“DoorDash implements a block re-ranking approach.”summary, stated

Batch generation introduces freshness lag.

Root cause: Pre-generating carousels reduces LLM cost but cannot respond instantly to very recent user behavior.

Resolution: Accept the staleness tradeoff for cost-effective scale while focusing online computation on retrieval and ranking.

“This means carousels are pre-generated rather than created on-demand for each homepage visit, which trades some freshness for significant cost savings at scale.”summary, stated

The company write-up omits some operational failure modes.

Root cause: The available summary notes missing disclosure about output degradation, embedding drift, retrieval monitoring, costs, regeneration cadence, and weak segments.

Resolution: Treat operational monitoring and generalization as known limitations for reviewer sampling rather than asserting full observability.

“The case study also doesn't discuss monitoring and observability for the production system—how do they detect when LLM outputs degrade, when embeddings drift, or when retrieval quality decreases?”summary, stated
“we should view the claims with appropriate skepticism about whether these results will generalize to all markets and user segments.”summary, stated

Evaluation

DoorDash combined internal human scoring for subjective carousel quality, third-party labeling for carousel-store relevance, precision@K tracking for retrieval, and online A/B tests in San Francisco and Manhattan for click, conversion, relevance, bounce, exploration, and merchant-discovery impact.

Metrics: repetition frequency · specificity · diversity · relevance · precision@10 · click rate · conversion rate · homepage relevance metrics · bounce rate · merchant discovery · merchant trials

3 supporting quotes
“DoorDash employed a multi-faceted evaluation strategy during system development, combining offline evaluations with online A/B testing.”summary, stated
“The team monitored precision@K metrics, achieving improvement from 68% to 85% precision@10”summary, stated
“The combination of internal user panels for subjective quality assessment and third-party labelers for objective relevance evaluation represents a thoughtful evaluation design”summary, stated

Outcomes

The system is a production-scale marketplace personalization pipeline designed for millions of users globally. The available summary reports two-market A/B tests, double-digit click-rate improvements, precision@10 rising from 68% to 85%, and merchant-discovery impact, but it does not disclose exact LLM cost, regeneration frequency, or all segment-level results.

3 supporting quotes
“The results indicate that the homepage is becoming "more sticky" with fewer consumers bouncing off”summary, stated
“it's driving merchant trials and generating volume for small and mid-sized businesses”summary, stated
“they plan to expand carousel scope beyond taste preferences to include other dimensions such as affordability, speed, and non-restaurant shopping including groceries.”summary, stated