SHSaddam Hilles

Case study · MadRewards / Savers App

Savers Club

Cashback mobile app — offers, hub, and travel

Role
Senior Frontend Engineer
Company
MadRewards / Savers App
Status
Production
Savers Club screen 1
Savers Club screen 2
Savers Club screen 3
Savers Club screen 4

Overview

The consumer CLO platform: a native iOS/Android app, a mobile-web twin partners can embed, and an npm SDK that launches encrypted hosted sessions with native bridges for maps, dialer, and travel.

React NativeExpo / RN WebTypeScriptTanStack QueryNativeWindGoogle MapsSupercluster

The problem

Partners needed the same cashback product inside their own apps without rebuilding enrollment, offers, maps, travel, and payouts. Members needed a native-quality experience whether they opened Savers Club directly or a partner shell.

Approach

  1. 01

    One product model across clo-app (React Native CLI) and m.saversapp.com (Expo + react-native-web), sharing navigation, offer feeds, and map UX.

  2. 02

    Nearby offers with Supercluster, custom markers, and haversine distance — list and map stay in lockstep.

  3. 03

    Hosted-app session lifecycle: AES-GCM launch payloads, token injection, OAuth/SSO, and a PostMessage contract so native shells can open maps, dial, or end a session.

  4. 04

    Travel as a coordinated dual-WebView flow into Traveler Cashback, not a bolted-on iframe.

Outcome

A platform surface, not a single app. Partners embed Savers through @savers_app/react-native-sdk; members get maps, biometrics, Branch deep links, donations, and cashback in one family of clients.

Native and hosted, same product

clo-app is the flagship SaversClub client: OTP auth, card enrollment, hub, inbox, referrals, Face ID / Touch ID, Vision Camera, Branch attribution, and React Query prefetch so tab switches feel instant. m.saversapp.com is the same CLO experience compiled to the web — Hub, Explore, Offers (list + map), Travel, Cashback, Inbox, Profile — designed to run standalone or inside a partner WebView.

Maps at product scale

Offers are a geospatial product. Clustering, custom SVG markers, and radius-aware feeds keep thousands of in-store locations usable. Filters for earn type, distance, sort, and minimum cashback are wired through the live offers API so pagination stays correct on both list and map.

The SDK is the distribution layer

hosted-app-react-native-sdk publishes @savers_app/react-native-sdk (and a sandbox twin). HostedAppComponent runs dual WebViews (Hub + Travel), decrypts qP launch payloads, and speaks a typed host protocol: OPEN_MAP, SHOW_DIAL_PAD, END_SESSION, OAuth identifiers, URL regeneration. That contract is what makes white-label distribution possible without forking the product.

Savers Club screen 1
Savers Club screen 2
Savers Club screen 3
Savers Club screen 4

Next

Let’s build the surface people actually keep.

I am looking for senior frontend work on products with real complexity — platforms, marketplaces, and systems that have to hold up in production.