A fan requests a multi-game trip over a WebSocket. The Core API checks the request with a guardrail, such as valid dates and times, before anything is generated. Then the separate AI service builds the itinerary. If it takes a while, the user keeps using the app, and a notification says the itinerary is ready.
If generation fails, the user gets a notification saying something went wrong and asking them to try again, so nobody waits for a notification that never comes.
A scheduled cron job fetches match schedules and game data from external sports APIs, so the event data behind itineraries stays current.
A GCP Workflows run starts every day on a schedule. It checks for new reviews and skips the work if there are none. New reviews are tagged by topic, such as safety or accessibility. The summary uses the latest 50 reviews plus a few flagged older ones, and the AI condenses them.
Whenever the AI changes, a GitHub Actions run executes the ReAct evaluation agent against itinerary and review-summary outputs, using predefined inputs and evaluation criteria. If quality holds, the change ships.
If the outputs fall short of the criteria, the gate blocks the change. It gets fixed and rerun before it ships.
The fan engagement app: news, ticket booking, live match discussions and merchandise. Trip planning is one of its features.
The app's backend, built with Node.js and Express. It is deliberately separate from the AI service.
Before anything is generated, the request is checked, for example for a valid date and time. Bad requests stop here.
A dedicated service built with FastAPI and LangChain. It builds the multi-game itinerary from team preferences, travel dates and event data.
A personalized travel plan across several games.
A notification tells the user the itinerary is ready for their days.
If generation fails, a notification tells the user something went wrong and to try again.
Runs on a schedule and pulls the latest data without anyone triggering it.
The external sources for match schedules and game-related data.
Up-to-date match and game data that the itinerary service relies on.
The summary is regenerated only when the reviews have changed, which avoids paying for the AI to repeat itself.
New reviews are tagged by topic, such as safety or accessibility, so serious issues can be found without reading every review.
Takes the latest 50 reviews, because older ones often describe problems that have since been fixed, plus a few flagged older reviews so a serious issue that is still reported isn't dropped.
An AI step condenses the picked reviews into a short summary.
The generated stadium-review summary.
Switching to a new model version, editing a prompt, or changing the generation logic all count as an AI change.
An agent built on the ReAct framework reasons about an output and checks it against predefined inputs and evaluation criteria, for both itineraries and review summaries. It runs as a GitHub Actions workflow in CI.
The regression check: if the outputs get worse, the change is blocked.
Only a change that passes the gate is deployed.