Web and mobile.
One codebase.
An employee-savings app that finally shares its code between web and mobile.
- Year
- 2025–26
- Duration
- 6 months
- Team
- 1 senior · 2 teams
- Stack
- Expo · Next.js · pnpm
Context
Epsor simplifies employee savings and retirement for 200,000+ employees across 1,500+ companies. The web runs on Next.js, mobile on Expo, and the team had started a package of screens shared between the two.
The challenge
Mobile lived outside the monorepo: the shared package couldn’t be tested in both apps, and React versions drifted between Next.js and mobile. Everything had to be aligned step by step, without blocking the teams still shipping on every repo.
What we shipped
- Mobile app brought into the monorepo, Expo config included
- React versions aligned between Next.js and mobile
- Shared web and mobile screen package, testable on both sides
- TanStack Query for shared, SSR-ready data
- One Storybook for web and mobile
- npm to pnpm migration, unified CI with parallel jobs
- A new app whose whole design changes per signed-in user, with design tokens stored in the database
A similar problem?
30 minutes with a senior to talk it through, free.
More work
02 / SEPHORA · MULTI-COUNTRY MONOREPO
Multiple apps.
One codebase.
One monorepo, three apps for Europe and the Middle East. Each country gets its typed settings on launch, LTR and RTL alike.
60app variants, one repo
0per-country forks
05 / TWENTY · GRAPHQL BACKEND
One GraphQL schema.
Per customer.
22 months in the core of an open-source CRM: a GraphQL API generated on the fly for each workspace, with its cache, then Twenty ORM.
224PRs merged in 22 months
1 / tenantGraphQL schema per workspace