Skip to content

Adaptive Discovery

Adaptive Discovery is Relewise's feed-based recommendation experience. It delivers a continuous, personalized stream of products and content that updates as shoppers interact.

Experience overview

Adaptive Discovery replaces isolated recommendation widgets with an endless feed that learns from behavior in real time. The result is a discovery surface that feels closer to social feeds, but tuned for commerce.

Mockup of an Adaptive Discovery experience showing a continuous feed of Products and Content on a mobile device.

Illustrative mockup of Adaptive Discovery shown on a mobile device. The feature itself is not limited to mobile and can be implemented across storefront experiences.

This visual highlights the core idea behind Adaptive Discovery: a continuous experience that mixes Products and Content, responds to shopper interactions, and feeds those signals back into personalization over time.

Key value

  • Drives longer sessions through continuous, relevant content.
  • Captures high-quality intent signals beyond clicks.
  • Enables reuse of engagement data across Search and Recommendations.
  • Maintains merchandising control while staying personalized.

Core concepts

Feed sessions and continuation

The feed starts with an initialization request and continues with a continuation token. This keeps the scrolling experience stable and allows results to adapt as the session progresses.

Mixed entities

Each feed response returns an ordered list where every item is either a Product or Content entity. The mix ratio is controlled by request preferences, with room for future algorithmic tuning.

Engagement-driven learning

Adaptive Discovery learns from new signals that capture attention and preference. These complement existing behavioral tracking and enrich the user profile in the same Relewise APIs you already use.

Merchandising and control

Ranking can be influenced through merchandising and request-level parameters, so discovery stays aligned with business goals.

Tracking signals

Adaptive Discovery introduces new events alongside existing behavioral tracking:

  • FeedDwell: Indicates time spent viewing feed items. See Dwell tracking guidelines.
  • FeedPreview: Captures preview interactions when your UI supports previewing items.
  • FeedClick: Indicates a click on a feed item.
  • FeedFeedback: Captures likes, dislikes, and favorites using the User Engagement model.

These signals can be used immediately for personalization and reporting.

Reporting and measurement

Feed exposure and downstream purchases are reported in My Relewise using existing analytics dashboards. This connects feed performance to revenue outcomes without introducing a separate reporting stack.

Implementation outline

The demo shop uses the Feed Recommendation API and updated tracking events. See the Relewise Demo Shop for the full storefront context. These are the exact calls used:

Initialize the feed

The first request creates the feed session, returns the first results, and yields an initializedFeedId for continuation.

ts
const builder = new FeedRecommendationInitializationBuilder(
    settings,
    { minimumPageSize: 20 }
)
    .setSelectedContentProperties(selectedContentProperties)
    .setSelectedProductProperties(selectedProductProperties)
    .allowProductsCurrentlyInCart()
    .addComposition({
        options: {
            type: 'Product',
            count: { lowerBoundInclusive: 1, upperBoundInclusive: 1 },
        },
    })
    .addComposition({
        options: {
            type: 'Content',
            count: { lowerBoundInclusive: 1, upperBoundInclusive: 1 },
        },
    });

const response = await recommender.recommendFeedInitialization(builder.build());
const feedId = response?.initializedFeedId;
const results = response?.recommendations ?? [];

Load more items

Continuation requests use the initializedFeedId from the initialization response.

ts
const builder = new FeedRecommendationNextItemsBuilder({ initializedFeedId: feedId });
const response = await recommender.recommendFeedNextItems(builder.build());
const results = response?.recommendations ?? [];

Track clicks

Feed item clicks are tracked with trackFeedItemClick.

ts
const item = type === 'Product'
    ? { productAndVariantId: { productId: id } }
    : { contentId: id };

tracker.trackFeedItemClick({ user, feedId, item });

Track dwell

Dwell tracking is sent as a batch using trackFeedDwell with visible items and an aggregated dwell time window. See the Dwell tracking guidelines before implementing.

ts
tracker.trackFeedDwell({
    user,
    feedId,
    visibleItems: [
        { productAndVariantId: { productId: '...' } },
        { contentId: '...' },
    ],
    dwellTimeMilliseconds: 2500,
});

These calls are used alongside existing behavioral tracking and User Engagement to personalize the feed and report performance.

Implementation guidelines

Dwell tracking

Dwell tracking should prioritize accuracy over volume. It is a weaker signal than a click, but still valuable when a shopper shows interest without selecting an item. A recommended starting point:

  • Do not send dwell events until the shopper has scrolled at least once.
  • Start or reset the dwell timer every time new items enter the viewport.
  • Only send dwell events when scrolling resumes, not when the user leaves the screen.
  • Include only items that were at least 90% visible during the dwell window.
  • Suggested thresholds: 2000 ms on list-style feeds, 1500 ms on detail-style feeds.

Don't know us? Don't worry - you can find more information about us, by visiting our main page www.relewise.com