Case Study
Podium
One React Native core, built for several 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 each brand is a thin native shell. Podium is live; Shoe Palace and Algarawi Kids are built on the same core and awaiting release, and a fourth brand is planned.
~10K downloads1 live brand · 2 awaiting releaseEN/AR at full key parity290 tests · 78 suitesReact Native 0.86 · React 19Published August 2026

The white-label problem
Several 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 every app at once, so there is nothing to port, sync, or cherry-pick between apps.
- The whole repo has one typecheck, one test run and one CI pipeline, plus a test that fails the build if an app's dependencies drift from the core.
Commerce
- 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.
Built Arabic-first
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.
- An error taxonomy that maps transport failures to human copy in both languages, while server-authored business messages pass through untouched.
Release safety
- 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