01 — Why it mattered
Customers were getting prices and availability that had already moved on. Trust in the booking step was eroding.
A travel agency platform that handles flights, hotels, and packages without lying to the customer about availability.
02 — Problem
The legacy frontend re-fetched on every interaction and still ended up showing stale inventory. Conversion fell off a cliff between price-quote and checkout.
03 — Approach
Restructured the search-to-checkout flow around a single source of truth per session. Skeletons during fetch, optimistic filters, honest "hold expired" states instead of pretending nothing had changed.
04 — Build
Two months end-to-end. Wired the new components into the existing Next.js codebase, replaced the old data layer page-by-page so the team could ship the rewrite without freezing the site.
05 — Outcome
Booking-step abandonment dropped, support tickets about "the price changed" fell off, and the team finally trusted what the page was showing.
06 — Reflection
The strongest move was refusing to paper over staleness. Honest UX scaled; the workarounds did not.
