Skip to content
Recommendation backend · Multi-store

Multi-Store Product Recommendation Infrastructure

The backend behind a guided eyewear recommendation running on two storefronts at once: one recommendation service, one catalogue reader, and per-store configuration rather than two forks.

Production RecordedClient ContributionCloud & Infrastructure
Overview

Two optical storefronts — Ópticas LUX and Más Visión México — share a catalogue model and a recommendation experience but not a theme, a domain or a product set. The infrastructure is built around that: an Express service holding the recommendation logic, a React client embedded into each storefront, catalogue reads through the Shopify Storefront API, and per-store configuration passed in rather than compiled in. Historically it ran on Heroku; the newer architecture work is on Google Cloud.

What EcomLabs did

  • Built the recommendation service in Node.js and Express, with per-store configuration as an input rather than a fork.
  • Built the embedded client in React on a Vite toolchain, so it loads inside a Shopify theme without owning the page.
  • Read catalogue data through the Shopify Storefront API so each store keeps its own products and availability.
  • Instrumented the experience so the steps people abandon are visible.

Capabilities

  • One recommendation service serving more than one storefront.
  • Per-store configuration instead of a forked codebase per brand.
  • Catalogue reads through the Shopify Storefront API.
  • An embedded React client that lives inside a Shopify theme.
  • Step-level analytics on the guided flow.

Stack

  • Node.js
  • Express
  • React
  • Vite
  • Shopify Storefront API
  • Google Cloud Run
  • REST API
Related work

Related work

APIIn development

Private Document Upload API

Private document upload API built with Node.js and Express, handling multipart uploads to cloud storage with CORS and API authentication.

Private Client ImplementationAPIFile UploadNode.js
Let's build

Have a project in mind?

Tell us your goals and current setup — we'll come back with a clear, honest plan.