Web to mobile port · Build
Your web app on iOS and Android, reusing the code you have
We port one real screen first, count how much of your web code runs on a phone, then quote. In our own port, 102 of 1,077 lines were written for mobile.
EngagementHourly · remote
Hours9–18 CET · 4 h overlap
StackReact Native · Expo · Next.js
Proof2 case studies
The service in 4 parts
01 · Who it’s for
A company with a working web app and a mobile app on its roadmap, which does not yet know how much of the web code will actually run on a phone.
02 · What we’ve built
- Our own marketing page, ported to a phone and run in Expo Go. Of the 1,077 lines that run on the device, 102 were written for mobile, and no section of the page was rewritten.Blog post →
- Our design system’s login screen calls its components with byte-identical code in all three of its apps: Next.js, a Vite SPA and React Native. Only the wrapper around it differs per platform.Case study 01 →
- On a US marketplace, the dashboards and the mobile app draw on more than 200 shared components in one monorepo. Only side effects differ between the platforms.Case study 04 →
03 · How we work
01 · ONE REAL SCREEN FIRSTWe port one real screen and sort its code into four groups: shared, split, web only and native only. That count is the estimate.
02 · DIFFERENCES IN THE LOWEST LAYERPlatform differences go into the primitive components, one layer below the place where screens call them, so the screens above stay shared.
04 · Stack
React NativeExpoNext.jsViteTypeScriptshared design tokens
Proof
Where we’ve done this before
WritingTesting a design system on a real page: 7 components and 8 gapsOur own marketing page, ported to a phone and run in Expo Go. Of the 1,077 lines that run on the device, 102 were written for mobile, and no section of the page was rewritten.Read the post →Case study 01 · Platforms74 / 678Our design system’s login screen calls its components with byte-identical code in all three of its apps: Next.js, a Vite SPA and React Native. Only the wrapper around it differs per platform.Read the case study →Case study 04 · MarketplaceZero outagesOn a US marketplace, the dashboards and the mobile app draw on more than 200 shared components in one monorepo. Only side effects differ between the platforms.Read the case study →
FAQ
Questions about this service
You get a figure once the first screen is ported. On our own marketing page, 91% of what the phone draws was reused unchanged. An earlier estimate said 62%, because it classified the code of the entire site before anything ran on a device. Both figures are correct, since they divide by different totals.
In our own port, none were. All the web-only code came down to four elements in one layout file, which a 55-line native counterpart replaced. The first screen we port for you shows whether your web-only code sits in one place like that or is spread across the app.
The app shell: routing, sticky bars, skip links, page landmarks, and links for mail and phone. In our port that came to 102 lines.
Not all of it. In our port, a native test passed for a screen that could not open, and a phone showed within seconds a crash that the compiler, the tests and the production export had all let through. That is why we also check on a real device.
Next step
Describe the problem and we’ll come back with three options.
The first call takes 30 minutes, and you’re under no obligation.