-
-
Data pipeline architecture and multi-agent synthesis flow
-
Track & Field Image: "Daily momentum rankings for Team USA sports."
-
Skateboarding Image: "Detailed sentiment and press coverage analysis."
-
Cricket Image: "Athlete pipeline and Olympic debut tracking."
-
General Bracket Image: "Comprehensive Team USA LA28 momentum bracket."
SECTION 1: PROJECT NAME
Road to LA28
Inspiration
On July 14, 2028, the Opening Ceremony of the Los Angeles Olympic Games will light up SoFi Stadium and the LA Memorial Coliseum simultaneously in an unprecedented dual-venue celebration that has never happened in Olympic history. Fifteen thousand athletes from around the world will compete across 36 sports and 800 events in front of a home crowd that has been waiting 44 years for this moment. On August 15, 2028, Los Angeles will host its very first Paralympic Games, an event the city has never experienced in its history.
America is ready. But which Team USA sports are actually building toward something special, and which ones are quietly losing ground?
Not which ones won medals last year. Not which ones have the biggest budgets. Which ones are on a genuine upward trajectory, supported by championship results, growing press momentum, a deepening athlete pipeline, and strong Paralympic representation, all converging at exactly the right moment for a home Games?
That question inspired Road to LA28. The answer changes every day as new results come in, new articles are published, and new athletes qualify. We wanted to build something that changed with it.
What It Does
Road to LA28 is a fan-first momentum intelligence platform that ranks every Team USA sport heading into the 2028 Los Angeles Olympic and Paralympic Games. It uses a seven-agent Gemini AI pipeline to analyze world championship trajectory, press coverage from trusted sources, athlete pipeline depth, and Paralympic representation. It synthesizes all of it into a living ranked bracket that updates every single day.
Every sport is placed into one of three momentum tiers.
🔥 High Momentum means the sport is peaking. Championship results are strong, the press story is building, and the athlete pipeline is deep. This is a sport worth clearing your calendar for.
📈 Rising means the sport is building fast. The signals are trending upward and the trajectory suggests something meaningful could come together by Opening Ceremony.
🌱 Building means the potential is real but the road ahead is longer. These are the sports to watch rather than bet on.
Beyond the ranking, every sport receives a fan-facing story. A headline that captures the moment. A clear answer to why a casual fan should care. A plain-English momentum summary drawn from the actual data. A forward-looking LA28 prediction that tells fans what could happen if the current trajectory holds.
The result is not a leaderboard. It is a prediction engine that reads like sitting down with the most knowledgeable Team USA analyst in the room, one who has absorbed everything about the program and wants to tell you exactly what is building and what to watch.
How I Built It
The core of Road to LA28 is a parallel multi-agent pipeline built entirely on Gemini, deployed on Google Cloud, and architected so that regular users never trigger a Gemini API call.
Request arrives
│
▼
Agent 0: Orchestrator
Pure JavaScript. Zero API calls. Completes in under 5ms.
│
├──── Promise.all — all four fire simultaneously ────┐
│ │
▼ ▼ ▼ ▼ │
Agent 1 Agent 2 Agent 3 Agent 4 │
Medal Trend Press Coverage Athlete Pipeline Paralympic │
Parity │
│ │ │ │ │
└──────────┴───────────────┴───────────────┘ │
│
▼
Agent 5: Contradiction Detector
Reviews all four outputs together.
Flags signal disagreements of 20 or more points.
│
▼
Agent 6: Synthesis Judge
Applies weighted composite scoring.
Produces the final ranked bracket.
│
▼
Agent 7: Narrative Agent
Writes a fan story for every sport.
Agent 1: Medal Trend evaluates Team USA's world championship trajectory using an Exponentially Weighted Moving Average with a decay factor of 0.75, giving more importance to recent cycles than older ones. A sport that has been improving steadily for four years scores dramatically higher than one with a single strong year followed by decline. The EWMA is calculated in JavaScript before the prompt is built, so the agent reasons about what the trend means rather than how to compute it.
$$\text{EWMA}t = 0.75 \times \text{EWMA}{t-1} + 0.25 \times \text{count}_t$$
Agent 2: Press Coverage reads full article excerpts, not just headlines, from a hardcoded whitelist of trusted sources including the Associated Press, Reuters, ESPN, USOPC, World Athletics, NBC Sports, The Athletic, and official federation sites. Random internet content is filtered out entirely before it reaches the pipeline. The agent is instructed to surface specific facts, named programs, and concrete developments from the excerpts rather than summarizing headlines.
Agent 3: Athlete Pipeline evaluates junior athlete depth, qualification slots earned, youth program expansion, and growth signal count. The five new Olympic sports at LA28, Flag Football, Lacrosse, Squash, Cricket, and Baseball/Softball, have no Olympic history to draw from. For these sports, pipeline depth is the primary signal and is weighted at 50 percent instead of 30 percent.
Agent 4: Paralympic Parity runs simultaneously with the other three agents and applies real score modifiers based on Paralympic competitive strength. This is not a display label. It is a structural agent whose output affects actual rankings. The LA28 Paralympic Games begin August 15, 2028, making it the first Paralympic Games ever hosted in Los Angeles, and Road to LA28 treats that story with the same analytical depth as the Olympic program.
Agent 5: Contradiction Detector is the agent that makes the system genuinely intelligent rather than just automated. After the four parallel agents complete, this agent reviews all outputs together and flags meaningful disagreements, defined as a normalized score delta of 20 or more points between two agents for the same sport. A sport with a dominant championship record but weak press coverage tells a fundamentally different story than one where every signal agrees. This agent surfaces that distinction. No single-prompt approach can replicate it.
Agent 6: Synthesis Judge applies the weighted composite formula with Contradiction Detector overrides where applicable.
$$\text{composite} = (T \times 0.40) + (P \times 0.30) + (D \times 0.30) + \text{parity_modifier}$$
Where T is Medal Trend from 0 to 100, P is Press Coverage normalized to 0 to 100, D is Athlete Pipeline from 0 to 100, and the parity modifier ranges from negative five to positive five points based on Paralympic representation quality.
Agent 7: Narrative Agent converts every ranked sport into a fan story with a headline, a reason to watch, a momentum summary, and an LA28 prediction, all written for someone who follows the Olympics every four years rather than someone who analyzes sports data professionally.
The infrastructure is built around one principle: Gemini quota is a finite resource that should be spent on analysis, not on serving page traffic. A Google Cloud Scheduler cron job runs once per day at 6 AM UTC and triggers the full seven-agent pipeline. When it completes, the results are written to a JSON file in Google Cloud Storage. Every page load fetches that file in roughly 50 milliseconds with zero Gemini calls involved. Gemini is called exactly seven times per day regardless of how many users visit the platform.
Agent memory lives in Google Cloud Firestore. Each agent saves its conclusions after every run and receives them as context on the next run. A sport's score can only move more than three points if new evidence in the data justifies the shift, which builds a genuine momentum curve over time rather than producing noisy daily fluctuations.
Every article processed is fingerprinted using SHA-256 and saved to Firestore. Agents only analyze articles they have not seen before, so the same content is never processed twice across daily runs.
For the project demo I have included a real button for to trigger all the agents to showcase to the judges that the platform works in real time. Overtime, I am gonna remove that button and let cron job makes a single run every 24hrs.
Challenges I Ran Into
The most persistent technical failure was the synthesis agent returning broken JSON on every run. After extensive investigation we identified the root cause: in the prompt builder function, every data variable was written as \${} instead of ${}. JavaScript never injected the actual scores into the prompt string. Gemini received the literal text ${JSON.stringify(data)} and generated long invented responses to fill the gap, consistently hitting the output token limit mid-JSON. One misplaced backslash caused the entire synthesis pipeline to fail every single time. Finding it was humbling and clarifying. Real systems break at the smallest details.
Building genuine Paralympic parity into the ranking required treating it as an architectural concern rather than a display one. Placing a label next to a Paralympic sport is straightforward. Building a dedicated parallel agent with real score modifiers that change actual rankings required a fundamentally different level of commitment. The distinction matters to the fairness and integrity of the final output.
Managing API quota responsibly was a design constraint we had to solve before the product could be considered deployable. Running seven Gemini calls on every user session would have exhausted the quota within hours of launch. The cron-plus-Cloud-Storage architecture reduces Gemini usage from an unpredictable number to exactly seven calls per day at a known time, making the platform genuinely scalable.
Accomplishments That I am Proud Of
I am proud that the Contradiction Detector works correctly in production. The idea that four parallel agents produce outputs which a fifth agent then evaluates for meaningful disagreements, flagging conflicts and recommending weight adjustments that the Synthesis Judge applies, is not trivial to implement under real time constraints. Watching it correctly identify that a sport with a strong championship record and weak press coverage represents a fundamentally different momentum story than one where all signals align was a genuinely rewarding moment.
I am proud of the Paralympic parity system. It would have been easy to add a visual badge next to Paralympic sports and consider the requirement fulfilled. Instead we built a dedicated parallel agent that evaluates Paralympic competitive strength independently and applies score modifiers that structurally enforce parity in the final ranking. The first Paralympic Games ever held in Los Angeles deserve that level of treatment.
I am proud of the caching architecture. Building an AI product that serves real users requires thinking about infrastructure with the same rigor applied to the model itself. The platform serves every visiting fan with a 50 millisecond cached response while running Gemini exactly once per day. That is the correct design for a production AI product.
I am proud of the narrative output quality. When a user reads that Track and Field is ranked first because Team USA has been among the world's top medal-winning nations at every major championship for four consecutive years, and that a rising wave of young athletes entering the pipeline could extend that dominance, and that if current trends hold the program could be approaching one of its strongest showings in a generation, that is not a template. That is an AI analyst reading real data and finding a real story. Building the system that produces it consistently was the central achievement of this project.
What I Learned
I learned that the architecture around the model matters as much as the model itself. A single large prompt produces generic outputs because the model must satisfy too many constraints simultaneously. Splitting the problem into seven specialized agents, each with a focused domain, appropriate temperature setting, and schema-enforced output structure, produces analysis that is substantially more specific, more credible, and more useful to a real user.
I learned that placing a reasoning field first in every output schema, before any score fields, meaningfully improves the quality of the scores that follow. When Gemini reasons through a conclusion before committing to a number, the numbers are more grounded and the logic is more defensible. The ordering of fields in a structured output schema is not a cosmetic decision. It is an architectural one.
I learned that output token management is the hardest practical challenge in multi-agent systems at scale. Processing 20 sports in a single synthesis call consistently hit the output ceiling. Batching sports into groups of five to seven, pre-computing all arithmetic in JavaScript before building the prompt, and enforcing strict one-sentence limits on string fields resolved the problem entirely and improved output quality at the same time.
I learned that specificity in prompt instructions matters more than length. A prompt that instructs the model to be specific produces generic output. A prompt that shows a concrete example of a poor output alongside a concrete example of a strong output, with a clear explanation of why the poor one fails, produces substantially better results. Negative examples carry as much instructional weight as positive ones.
What's Next for Road to LA28
The Opening Ceremony is 797 days away. World championships are happening right now. Athletes are qualifying. Coaching staffs are being rebuilt. New programs are emerging across the five sports making their Olympic debut at LA28.
The immediate next step is expanding the data pipeline to ingest new championship results and trusted news articles automatically as they are published, without requiring manual dataset updates. Every new world championship result, every major coaching announcement, and every qualification milestone will be incorporated into the next daily analysis run without human intervention.
The score history time series that Firestore already captures, one data point per sport per day, will be surfaced in the frontend as a visual momentum curve showing fans exactly how each sport's ranking has evolved over the months leading to the Games. Fans will be able to see whether Swimming has been climbing consistently for three months or whether a previously strong program has been quietly fading since Paris.
Paralympic coverage will be expanded to full parity with the Olympic bracket. The current dataset includes 17 Olympic sports and 3 Paralympic sports. The goal is equal representation across all LA28 Paralympic disciplines before the Games begin.
By the time the torch is lit at SoFi Stadium on July 14, 2028, Road to LA28 will have built 797 daily data points for every sport in the bracket, a complete and evidence-based record of which Team USA programs rose to the moment and which ones faded under the pressure of a home Games.
That is the road. I am building it one day at a time.
Built With
- api
- cloud
- cron
- express.js
- firestore
- gcloud
- gemini
- github
- javascript
- node.js
- react
- schedular
- vite