FIELD

OPS / AUTOMATION / TOOLS

STATUS

AVAILABLE · REMOTE

CSEXECUTION TRACE

Guru — flight search orchestration

Queue-driven flight search across Amadeus, ITA Matrix, and award programs, with market-price intelligence layered on top. Built for a luxury travel concierge team.

CONTEXT

Travel concierge firm · internal

ROLE

Search & pricing features

STACK

TypeScript, Redis, Amadeus, ITA Matrix

YEAR

2026

01 — The problem

Finding the right business-class fare for a client means checking three different worlds: market prices, award availability across airline programs, and card-program inventory. Each lives in its own system, each answers slowly, and the answer changes by route, date, and cabin. A concierge handling one request could burn most of an hour tab-hopping — and still not know whether the award seat beat the cash fare.

Guru turns that hour into a queued search: describe the trip in plain language or a form, and every provider gets swept in parallel while the team works on something else.

FIG · NEW SEARCH — NATURAL-LANGUAGE OR STRUCTURED ENTRY · CLICK TO ENLARGE

02 — Constraints

  • Flight-data providers are hostile to automation. Some award inventory isn't exposed through any API and only exists inside a rendered page.
  • Searches are long-running by nature — minutes, not milliseconds — so the system had to be a queue with resume, retry, and post-run review, not a request/response app.
  • The right search strategy differs by region and trip shape; the search model is an explicit numbered plan per route direction, not a single generic query.
  • It's an internal tool running on client work, so screenshots here are sanitized and there's no public demo.

03 — The approach

A strategy engine expands each trip request into numbered search plans, runners execute them against Amadeus and ITA Matrix alongside award sources, and results stream into a queue-backed store as they land. The results view puts award, card-program, and market prices side by side — so "book the award, pay cash, or use the card" is answered on one screen.

FIG · THE QUEUE — EVERY SEARCH RESUMABLE AND REVIEWABLE · CLICK TO ENLARGE

Three slices of it were mine. Flexible-date searches originally meant one search per candidate date; switching to ITA's own ±1-day windows made the named date the anchor and cut the redundant sweeps, with the UI showing exactly what each search covered. The market-price ramp — a Google-Flights-style bar showing where a fare sits in the observed range — went through several iterations before it earned its place above the results. And Copa's award fares, which first arrived by scraping the rendered page, eventually came through a proper API path; an API-vs-DOM diff script proved the two matched before the scraper was retired.

FIG · RESULTS — AWARD VS. CARD PROGRAM VS. MARKET, ONE VIEW · CLICK TO ENLARGE

04 — The outcome

Guru is in daily production use by the concierge team. The queue has processed just under two thousand searches; a full multi-provider sweep returns 700–1,200 flight options in roughly 13–16 minutes, unattended. Fare comparisons that used to be assembled by hand across tabs are now one shareable link.

05 — What I'd do differently

Hunt for the API before building the scraper — the Copa capture worked from the DOM for weeks before the cleaner API path turned out to have been there all along. And instrument earlier: a one-day logging change comparing API and DOM fare counts settled a question that discussion alone had circled for much longer.

← BACK TO HOME