Case Study

Podium

One React Native codebase, three Saudi storefronts

podium.algarawigroup.com · App Store & Google Play · React Native, TypeScript

An Arabic-first fashion commerce app for Algarawi Group in Saudi Arabia, built as a white-label monorepo: every screen, hook and test lives in one shared core, and three branded apps — Podium, Shoe Palace and Algarawi Kids — ship from it.

3 apps · 1 codebaseEN/AR at full key parity290 tests · 78 suitesReact Native 0.86 · React 19Published 2026
Podium app icon

The white-label problem

Three storefronts that are the same app, differing only in identity.

  • All product code lives in one shared core package; each app is a thin native shell with its own bundle id, Xcode target and Gradle project.
  • The core reaches the active brand through exactly three module aliases — brand, environment, and native specs — so a feature never knows which app it is running inside.
  • A shared change lands in all three at once: nothing to port, sync, or cherry-pick between apps.
  • One typecheck, one test run, one CI pipeline for the whole repo, plus a test that fails the build if an app's dependencies drift from the core.

Commerce, end to end

  • Server-backed cart for guests and signed-in users alike, merged on login, with variant and quantity switching.
  • Checkout across cash on delivery, online card payment, in-app wallet, and branch pickup — with guest OTP verification, Saudi National Address validation, coupons, and saved addresses.
  • Orders with a tracking timeline, bill view, and full returns creation and tracking.
  • Wallet and loyalty points: balance, transaction history, points ledger, and redemption.
  • Product listing with a full facet filter sheet — category, brand, colour, size, price, rating — plus search with suggestions, history, and recently viewed.

Arabic-first, not Arabic-added

The app is built for a Saudi audience reading right to left by default.

  • English and Arabic at complete key parity, with a native in-app language switch.
  • RTL is the baseline layout assumption rather than a pass applied at the end.
  • An error taxonomy that maps transport failures to human copy in both languages, while server-authored business messages pass through untouched.

Built to ship, and to be fixed after shipping

  • A server-driven page-builder home: announcement strip, header tiles, and category navigation are all composed by the backend.
  • Remote config with a kill switch and a force-update gate, so a bad release can be contained without waiting on store review.
  • Over-the-air updates for JavaScript fixes, on top of signed release builds and CI that typechecks, lints, tests, and compiles Android.
  • Deep links over both a custom scheme and https App Links / Universal Links, with consume-once launch handling and share sheets that emit real product URLs.
  • GA4 analytics through Firebase covering the full funnel from screen view to purchase revenue, with crash reporting attributed to the user, and push notifications that route into the same deep-link handler.

Get the app