Case study · MadRewards / Savers App
Savers Club
Cashback mobile app — offers, hub, and travel
- Role
- Senior Frontend Engineer
- Company
- MadRewards / Savers App
- Status
- Production
- Live
- m.saversapp.com




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.
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
- 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.
- 02
Nearby offers with Supercluster, custom markers, and haversine distance — list and map stay in lockstep.
- 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.
- 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.




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.