Case Study
Podium
One React Native codebase, three Saudi storefronts
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

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