Wynshop's mobile app is the grocery storefront for more than twenty retailers, each on its own banner. I joined the core mobile team to make the global React Native app faster and more reliable while shipping new features.
- 20+
- Retail organizations on one React Native app
- 45 → 15 min
- Build time after moving CI to a Mac Mini
- 4
- Developers on the team when I joined
Platform
One app, twenty-plus banners
One React Native codebase serves more than twenty grocery retailers, each on its own banner with staging and production builds. I wrote the onboarding docs used to stand up new ones.
Performance
Faster lists and storage
FlashList replaced FlatList for list rendering and MMKV took over local storage. API caching got smarter and unused dependencies came out.
Modernization
A modern runtime
I migrated the app to bridgeless React Native, adopted Redux for state, and upgraded React Query from v3 to v5.
Build
Builds in a third of the time
Moving CI to a Mac Mini and streamlining the scripts took build time from 45 minutes to 15.
Role
- Platform: Expo and React Native, bridgeless
- Multi-banner configuration with staging and production banners
- Key features: Made-to-Order, global rollouts
- Wrote the app and brand onboarding documentation used to stand up new banners
What I shipped
Performance
- Faster local storage with MMKV
- FlashList in place of FlatList for list rendering
- Better API caching and response handling
- Pruned unused dependencies
Modernization
- Migrated to bridgeless React Native
- Adopted Redux for state management
- Upgraded React Query from v3 to v5
Build and process
- Moved builds to a Mac Mini and streamlined the scripts
- Cross-team coordination and documentation for banners and deploys
The app


Tech stack
Mobile
- Expo
- React Native
- React
- TypeScript
- Redux
- React Query
Backend
- GraphQL
- Apollo
- Prisma
- PostgreSQL
- Node
- Express
- Go
Tooling
- Docker
- AWS
- Jest
- Material UI
- Figma