Roadmap · built in deliberate phases
Roadmap
The optimization engine
LiveEvery recommendation explains its own weighting
A deterministic scoring model. Every itinerary is scored 0–100 on Cost, Comfort, Upgrade Potential, Award Value, Flexibility, Risk, and Time, then weighted by the priorities you ranked. Out comes a recommendation, a Top Five comparison, upgrade and award strategy, purchase timing, and up to eight trip-specific insights. Live fares run through this same engine (see phase 5), and a Points Intelligence panel carries dated valuations and transfer bonuses.
The four-page site
LiveSomething to run a real trip through
Index (the optimizer itself), About, Guide, and this Roadmap: a static, no-build site deployed to Netlify, styled to match the rest of the portfolio.
GitHub repo
LiveParity with the rest of the portfolio's deploy pipeline
The same continuous-deployment model as the sibling sites: push to main, Netlify auto-deploys. Commits are made from Cowork sessions and pushed from Susan's own machine, since no GitHub credential lives in the cloud session.
iOS app
LiveOne tap from the Home Screen before a trip
An installable version that adds itself to the Home Screen with its own icon and no browser chrome. Same site, no separate codebase: a web app manifest and an icon set, nothing more.
Live fare & award data
Live (fares + scans)A real, bookable answer, not a documented estimate
A server function searches real Google Flights results on every run, merges in fares you've scanned yourself from Kayak or Booking, and scores them through the same seven-dimension engine. Every alternative links out to review and buy. If nothing real comes back for a route, the site says so plainly rather than guessing. Award-space availability (seats.aero-style) is the remaining data gap.
Date-range score sweep
LiveSee the cheapest date in one chart, not ten re-runs
Sample the top itinerary's score and price across a 30–60 day window at 3–5 day intervals, and chart it, instead of re-running the optimizer by hand to find the cheapest date. Each sampled date is a real live search (capped at 6 per click to protect the shared daily quota); the interval widens automatically, and says so, rather than silently sampling fewer days than asked.
A real domain
LiveOne address, not a netlify.app subdomain
travelintelligence.org, registered and connected via Netlify DNS, matching the rest of the portfolio. TLS provisions automatically within a few minutes of connecting.
Saved preferences & trip memory
LiveGets better at optimizing for you specifically, trip over trip
Avoided airlines, disliked airports, stops tolerance, and travel style auto-save and reload across sessions, alongside the wallet of cards and 13 loyalty balances. They reshape which offer ranks highest, not just what gets remembered. A saved travel style steers the optimization lens only when the trip's own signals haven't already picked one. Preferred airlines, alliances, and departure and arrival windows feed real Comfort scoring as of 2026-08-07, and each announces itself in the results insights whenever it fires. Four saved fields stay reference only: preferred seat, preferred hotel brand, checked bags, and carry-on-only. Live fare data carries nothing about seats, hotels, or bags, so scoring them would be invention. The fare watcher holds up to 6 trips, re-searches roughly every other day, and shows day-over-day price changes, budgeted against SerpApi's real 100-search monthly quota.
Loyalty balance integration
LiveSee instantly whether your miles cover the trip
Shows your saved United MileagePlus balance and Chase Ultimate Rewards balance on the trip page, hand-entered and dated. It does not yet check whether a balance covers a specific redemption -- that comparison is still ahead.
Protect watched trips
LiveA shared link can't quietly spend your watch slots
Watching a trip spends a metered live search every other day against a shared store, so watch/unwatch now require a shared edit key (remembered per device, same pattern used across the portfolio), enforced server-side, not just in the browser. Running the optimizer and browsing results stay open to anyone with the link.
2026 simplicity pass
LiveEvery number on screen is a real quote, never a guess
The input form shrank to a single short Trip card, with every remaining refinement folded into an optional Refine panel that remembers whether you left it open. The synthetic modeled-fare fallback was deleted outright on 2026-07-26. With no live fare or scan data for a route, the site now says so instead of showing an invented number. Fonts moved to self-hosted files across the whole portfolio.
Concert Radar hooks
LiveKnow who's playing where you're headed, before you go
A two-way link with Vinyl Scout's Concert Radar (vinylscout.org). Watch a trip here and you'll see whether an artist you follow, from your catalog, wishlist, or venue listings, is playing near your destination while you're there. The same match shows up on Concert Radar's own page. Only destination, coordinates, and date range cross between the two sites, never fares or points data, and the search radius is a fixed 25 miles. A slow or unreachable Vinyl Scout never blocks anything on this page.
Exact-match city fields
LivePick the airport, not just the city
Shipped 2026-08-21. Clicking a suggestion, or picking one with the keyboard, now fills the field with the airport as well as the city, so Origin reads “Paris–Orly (ORY)” rather than a bare “Paris” that could mean any of three. That surfaced a real correctness bug underneath: the resolver matched on the city name and threw the code away, so every secondary airport quietly became its metro’s primary. Choosing Orly searched Charles de Gaulle, LaGuardia searched JFK, Midway searched O’Hare, Gatwick searched Heathrow. A trailing code is now read as a literal and settled before any typo-matching runs, so the pick is exactly what it says. Two things followed from making those airports reachable at all: they needed real names, since results and watched trips had been rendering them as a bare “ORY”, and they needed to be searchable by name, since typing “orly” or “laguardia” had found nothing at all. Typo tolerance, country lookups, and the ranking that keeps Paris ahead of Paraguay are all unchanged.