External storefronts

Give an LLM the Airline storefront skill to adapt the built-in experience or create a separate client.

To create a custom Airline storefront, copy the skill and give it to your LLM. The skill will explain how features/storefront and the customer-facing app routes implement Airline's current experience.

After that source orientation, it will ask what you dislike, what should stay, what workflows and users matter, and what the replacement should look and feel like. It then traces the exact routes, feature slices, GraphQL calls, schema, access rules, sessions, and provider boundaries in the supplied Airline codebase before proposing work.

Skill file: /skills/openfront-airline-custom-storefront/SKILL.md

Storefront routes

Routes are top-level files under app/ (there is no route group). Most of the logic is in features/storefront/components/FlightShop.tsx, which runs in three modes: book, manage, and check-in. Carrier identity comes from features/storefront/lib/carrier.ts and the route timetable from features/storefront/lib/network.ts.

RouteTraveler journeyOperations
/Homepage with the carrier's title and description, flight search (origin, destination, date, 1 to 9 travelers), results with cabin, fare description, and included bags, then hold, passenger details, and booking. Also shows the timetablepublicCarrierIdentity, publicAirlineFlightOptions, createCustomerOffer, createCustomerBooking (named CustomerBookingCommand)
/destinationsActive routes in a timetable; each links to a prefilled searchserver-side read of routes and flights
/statusFlight status by flight number and date, with gates, times, and any published disruption summarypublicFlightStatuses
/manage-bookingRetrieve by record locator and access code. Pay now (if Stripe is active), choose seats, check in, view boarding passes, replace the access code, cancel. "Your trips" lists bookings saved in this browser. Recover access by email if SMTP is setcustomerBooking (named CurrentCustomerBooking), startCustomerCheckout, completeCustomerCheckout, assignCustomerSeat, checkInCustomerBooking, rotateCustomerBookingAccessToken, cancelCustomerBooking, recoverCustomerBookingAccess
/check-inSame retrieval, focused on seats, check-in, and boarding passescustomerBooking, assignCustomerSeat, checkInCustomerBooking
/manageRedirects to /manage-booking
/helpLinks to status, manage booking, check-in, and contact
/contactCustomer service email, phone, and hours from Storefront settingspublicCarrierIdentity

/robots.txt and /sitemap.xml redirect to handlers under /api.

Journey rules

  • Selling needs setup. Search and booking show only when the carrier has a homepage title, description, approved brand colour, and direct sales turned on. Otherwise the homepage says online booking is not available. Servicing pages still work for any saved carrier.
  • One carrier. Every public operation takes a carrierCode. It must match STOREFRONT_CARRIER_CODE, or the first carrier if that is unset.
  • Holds expire. A held offer lasts 15 minutes. Booking needs the same shopping session token used to create the offer.
  • Access codes. createCustomerBooking returns a one-time access token. The browser stores it in localStorage per record locator. A custom client must show it to the traveler and keep it safe; the server stores only a hash.
  • Payment. Without an active Stripe provider, bookings are pay-the-airline: an operator records payment in the dashboard. Unpaid storefront bookings expire after 24 hours when the worker runs.
  • Stripe return. Stripe returns to /manage-booking?ref=<locator>&checkout=<session id>. The page then calls completeCustomerCheckout, which checks the session with Stripe before recording payment and issuing tickets.
  • Rate limits. Offer, booking, manage-booking, and checkout calls are rate limited per shopping session or client.

On this page