Skip to content
useffect.sh
Book 30 min with a senior
EPSOR · UNIVERSAL APP

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.

Book 30 min

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