Spaces:
Sleeping
Sleeping
Commit History
-
Add benchmark mode: freeze system date to 2026-04-01 for deterministic behavior
Set BENCHMARK_PASSCODE env var to any non-empty value to activate. All backend date.today()/datetime.utcnow() calls and frontend default dates lock to Apr 1 2026, making prices and search windows reproducible. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>bc18056
-
Fix booking price mismatch: carry selected price through to payment
Round-trip same-airline discount and fare tier multiplier were lost between flight selection and the booking/payment pages. Now the computed price (with discounts) is passed from ResultsPage through BookingOptionsPage to the backend booking API. Also includes multi-city support, search form improvements, and rebuilt frontend dist. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>587a735
-
Add connection-type MCT, overnight/short-connection warnings
Backend: - Replace single MIN_LAYOVER_MINUTES with MIN_CONNECTION_MINUTES dict keyed by (domestic/international) pair: D-D 45m, D-I 75m, I-D 90m, I-I 120m - Compute is_overnight per segment using timezone-aware .date() comparison (arrival_dt.date() != departure_dt.date() on ZoneInfo-aware datetimes) - Add LayoverInfo model with duration, overnight, short_connection flags - Compute layover warnings server-side using local dates at the hub airport - Add SHORT_CONNECTION_MINUTES=90 threshold to config Frontend: - Add Google Flights-style amber warnings in expanded flight detail: segment "Overnight", layover "Overnight layover", "Short connection" - Use backend-provided warnings instead of client-side date comparison - Remove unused getBadgeColor function (fixed TS build error) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>d6def07
-
Fix destination section alignment, add cheapest-date search, dynamic origin
- Align all sections to max-w-4xl (was max-w-6xl for destinations, max-w-3xl for FAQ) - Backend: scan next 90 days for cheapest price per route, return cheapest_date - Frontend: clicking a destination fills departure date and navigates to results - Add dynamic origin selector above destinations — click to search any airport - Origin defaults from geolocation IP but can be changed interactively - Prices now show "Lowest fares in the next 3 months" instead of a fixed 14-day price Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>d8c3cfa -
Add currency context and swap formatPrice across all pages
- Add GeolocationResponse, CurrencyRatesResponse, DestinationCard types - Add getGeolocation(), getCurrencyRates(), getPopularDestinations(), getCheapFlights() API functions - Create CurrencyContext with provider, useCurrency hook, localStorage persistence - Wire CurrencyProvider in App.tsx with geolocation-based default currency - Add currency selector dropdown to Header - Replace static formatPrice imports with useCurrency().formatPrice in: FlightCard, SelectedFlightBanner, BookingPage, BookingOptionsPage, ConfirmationPage Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>02df639
-
Add flight booking flow with payment validation
- Backend: booking store with cardholder-based payment validation, generic error messages, flexible expiry format (1227 / 12/27) - Frontend: BookingPage, ConfirmationPage, booking API client - Wire up Book button in FlightCard for one-way and round-trip flows - Also includes short-distance surcharge and advance pricing tweaks Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>d6f7eeb
-
Add Google Flights-style step-based round-trip booking flow
Replace outbound/return toggle with a two-step selection flow: users first pick a departing flight (showing "from $X round trip" preview prices), then see return flights priced as round-trip totals with same-airline discounts applied per-selection rather than blanket. Backend: move same-airline discount (0.92x) from server-side blanket application to client-side per-selection; return discount rate in API. Frontend: add step breadcrumb, SelectedFlightBanner, pricing utilities, and round-trip-aware sorting. One-way searches unaffected. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>c090f53 -
Add flight amenities: legroom, WiFi, power/USB, video per segment
Generate amenities deterministically based on aircraft type, cabin class, and flight distance. Shown in Google Flights-style right-side panel in the expanded flight card view, with icons and strikethrough for unavailable. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>ab345fa -
Add Google Flights-style "Best/Other" sections, emissions, rich detail view
Backend: - Add emissions_kg to FlightOffer (ICAO methodology: 0.09 kg/km economy, scales by cabin class) - Add is_best flag: top 3 flights by composite score (45% price + 35% duration + 20% stops) tagged as "best departing flights" - New config constants for emissions rates and best-flight weights Frontend — Google Flights-inspired redesign: - "Best departing flights" section (top 3) with info tooltip explaining ranking methodology, separated from "Other departing flights" by horizontal divider - Flight card shows: dep-arr times, airline names, duration, stops, layover airports, CO2 emissions per passenger, price, cabin class - Expanded detail view with timeline UI: departure/arrival cities with times, travel time per segment, airline + flight number + aircraft, layover duration and airport in styled box, total travel time and emissions summary at bottom - All elements have data-testid attributes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>8c371f4 -
Add flight booking website (Google Flights clone)
Full-stack flight search app for computer-use agent testing: - Backend: FastAPI with deterministic pricing engine, route finder (direct + 1-stop + 2-stop via hub detection), timezone-aware flight generation, airport autocomplete, calendar pricing - Frontend: React + TypeScript + Tailwind CSS with search form, autocomplete, results page, filters, sorting, URL-driven state - Docker: Multi-stage build (Node frontend → Python backend) - Data: 3,770 airports, 55,627 routes, 604 airlines from airline_routes.json loaded in-memory (~21 MB) - All elements have data-testid attributes for agent testing - Same search params always produce same results (SHA-256 seeded) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>2e50ccd