DEV Community

Jitender
Jitender

Posted on Fully Autonomous

How We Built a Video-First Shopping Feed on Top of Shopee, Lazada and Amazon Catalogs

Scroll-first shopping is how a lot of people in Southeast Asia already discover products: they watch a short clip, swipe, and buy. Marketplaces like Shopee and Lazada have huge catalogs, but their apps are built around search and category trees, not a feed.

We built Nexora (for Blue Stingers Information Technology) to close that gap: one vertical feed that pulls product videos and photos from Shopee, Lazada, Amazon and other affiliate sources. You watch, swipe for photos, tap Buy Now, and checkout happens on the original store. Nexora never touches payment.

This post walks through the architecture decisions and what we'd do the same way again.

The constraints

  1. Zero checkout. Every purchase is an affiliate hand-off. That removes PCI scope and refunds, but it means attribution links must be correct and fast.
  2. Media-heavy, catalog-light. The feed is mostly video and images; product metadata is small but changes often (price, stock).
  3. Two platforms plus web from a small team. iOS, Android and a web presence had to ship together.

Stack at a glance

Layer Choice Why
Backend / ingestion Rust Predictable latency and low memory while normalising thousands of catalog items
Mobile Flutter One codebase for iOS and Android, smooth video scrolling
Web Next.js SEO-friendly landing pages and shareable product pages
Deploy Docker Same images locally and in production

1. Normalise every source into one product shape

Each marketplace returns data in its own format. The first thing the Rust service does is map every source into a single internal Product:

pub struct Product {
    pub id: String,            // stable internal id
    pub source: Source,        // Shopee | Lazada | Amazon | ...
    pub title: String,
    pub price_minor: i64,      // store money in minor units, never floats
    pub currency: String,
    pub media: Vec<Media>,     // video first, then images
    pub affiliate_url: String,
    pub updated_at: i64,
}
Enter fullscreen mode Exit fullscreen mode

Two habits paid off immediately:

  • Money in minor units (centavos, cents) as integers. Floating-point prices across currencies are a bug factory.
  • source as an enum, not a string. Adding a new marketplace becomes a compile error everywhere it needs handling, which is exactly what you want.

2. Rank for "watchability", not just relevance

A search engine ranks by query match. A feed has no query, so the ranking question becomes "will this hold attention for the next three seconds?" Our first-pass signals were simple and cheap:

  • Has a real product video (not a slideshow)?
  • Media loads fast on a mid-range Android phone on mobile data?
  • Price and stock refreshed recently?

Simple, explainable signals beat a clever model you can't debug in week two.

3. Make video scrolling feel native in Flutter

Most of the perceived quality of a feed app comes from the scroll:

  • Preload one item ahead, dispose two behind. Keeping every player alive will exhaust memory on lower-end Android devices, which are common in the Philippine and Indonesian markets.
  • Show a poster frame instantly, then swap to video when ready. A black rectangle feels broken even if it's only 300 ms.
  • Pause on app background and on scroll start, resume on settle.

4. Treat the affiliate hand-off as a critical path

The Buy Now tap is the only moment that earns revenue, so it gets the same care as a checkout:

  • Resolve and validate affiliate URLs server-side; never build them on the client.
  • Open the marketplace app if installed (deep link), otherwise the browser.
  • Log the hand-off event so attribution issues can be traced.

5. Ship web for discovery

The Next.js site isn't an afterthought: shareable product and landing pages are how new users arrive from social media and search, and they need server-rendered metadata so previews look right in Messenger, WhatsApp and Viber.

What we'd tell another team building in this space

  • Start with one marketplace, end-to-end, before generalising the ingestion layer.
  • Budget real time for low-end Android performance in Southeast Asia.
  • Keep ranking explainable until you have enough engagement data to justify a model.

Nexora is live on the App Store and Google Play. If you're planning a commerce, feed or marketplace app for Southeast Asia, we're happy to compare notes. We're I Plus T Solution, a software and AI development team in Gurugram, India: https://www.iplust.in/

Top comments (1)

Collapse
 
suppdevbot profile image
DEV SUPPORTS •
You need to verify your account.
Enter fullscreen mode Exit fullscreen mode

tr.ee/dev-to