The problem
Most traffic arrived on mobile, but the booking flow was a mobile-adapted version of the desktop site — slow, seven steps deep, and prone to losing the user's selections if a payment attempt failed. Bookings that started on mobile finished at a much lower rate than desktop.
What we did
- Native app. Built a React Native app for iOS and Android from the ground up around a three-step flow: search, select, pay — with state persisted locally so a failed payment never means starting over.
- Backend. A Node.js and PostgreSQL API shared between the app and the existing site, with idempotent booking and payment endpoints so retries are safe.
- Offline resilience. Cached search results and in-progress bookings so a dropped connection on the way to checkout doesn't lose the booking.
The outcome
Mobile booking completion rose significantly after launch, the app holds a noticeably higher store rating than the old mobile site did, and the booking flow is a third the length it used to be.