Voyage Privé
Senior React Native engineering inside a European travel club's mobile team, moving its booking flow from WebView to native screens.
Visit voyage-prive.comTravel

- Client
- Voyage Privé
- Year
- 2026
- Timeline
- Since February 2026, ongoing
- Team
- Senior React Native engineer
The idea behind Voyage Privé
Voyage Privé is a members-only travel club selling hotel stays, packages and flight-inclusive holidays at private-sale prices, with iOS and Android apps localised into eleven European locales. The app is a React Native and Expo codebase owned by Voyage Privé's in-house engineers. In February 2026 we joined that team as senior mobile engineers, and we now ship inside their repositories, sprints and release process.
Our focus is the booking flow. Choosing dates, rooms and extras in the app used to hand the traveller over to the mobile website inside a WebView. We worked with Voyage Privé's engineers on the native product configurator, and we lead the native booking screens that come after it, built directly on the company's new booking API.
The app already takes real bookings, so nothing ships all at once. Remote flags turn each native step on per app version, and if anything fails mid-booking the traveller is handed back to the proven web flow.
Built with
- React Native
- Expo
- TypeScript
- Expo Router
- Zustand
- TanStack Query
- Zod
- OpenAPI
- Firebase
- Mapbox
- Jest
- GitLab CI
- EAS Build

What we built
- Native product configurator for dates, departure city, transport, rooms, menus, travellers and options, priced live from the availability calendar, built with Voyage Privé's engineers
- Native booking steps for transport, accommodation, meal plans, restaurant offers, extras and insurance on the new booking API (in progress)
- A typed API client generated from the booking API's OpenAPI spec, with every response checked against the contract at runtime
- Rollout by remote flag and minimum app version, with automatic fallback to the web booking flow
- "From" prices on showroom cards and map pins
- Deep links and push notifications that open the right screen with filters applied, including from a cold start
- Screen and booking-funnel analytics events
- Copy and layouts across eleven European locales
What was hard, and how we solved it
The hard parts
- Matching a mature web booking funnel that covers packages, flights, multi-hotel trips, restaurant offers and insurance, each with its own pricing rules
- Building against a booking API that the backend team was designing at the same time, so the contract changed while we worked
- Shipping into a live app that takes real bookings, where a pricing bug costs money and trust
- Keeping prices identical to the website across the calendar, the selection sheets and the summary
- Eleven locales with different formality conventions and currency formats
What we did about them
- Wrote a gap analysis for each product type against the web flow and the API spec, and settled open questions with the backend team before building
- Generated types from the spec and validated responses at runtime, so a contract change produces a clear error or a web fallback instead of a crash or a wrong price
- Put every native step behind flags with version gates, plus a fallback that hands the session back to the website mid-booking
- Gave the calendar and the selection sheets one shared selection state so their prices cannot drift apart, and unit-tested the pricing logic
- Tracked each ticket's acceptance criteria to tests, then checked on iOS and Android devices before release
Inside the app
Select a screen for a closer look.
Next up: Good Way App
A taxi app that offers users the ability to call a taxi and choose whether they want to ride alone, carpool or bring their pets on board.
Explore the project
Building something like this?
Tell us where you are with it. Two scoping sessions in week one end with a price and a launch date in writing.
