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. The gap between price-quote and checkout was where customers left.
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
The fastest paint in the portfolio — 616ms LCP across 93 requests — and a perfect zero on cumulative layout shift, which is the metric that matters when prices are still resolving on screen. The page stopped moving under the customer.
06 — Reflection
The strongest move was refusing to paper over staleness. Honest UX scaled; the workarounds did not.
