Inspiration
Sports fandom usually starts with identity before it starts with stats. We wanted to build something that helps a casual or curious fan feel personally connected to Team USA without asking them to already know the sports, the categories, or the storylines. Instead of making another static dashboard, we asked a fan-centric question for Challenge 5:
What kind of Team USA fan are you, and which LA28 Games sports could matter most to you?
That led us to Tribe28, a short interactive experience that turns Team USA history, LA28 Games program data, and community signals into a personalized fan journey. We also wanted the project to reflect the spirit of the hackathon rules: use Gemini, deploy on Google Cloud, maintain Olympic/Paralympic parity, and avoid athlete-level NIL exposure in the user-facing product.
What it does
Tribe28 is a fan discovery app built around a simple idea: instead of asking people to browse dozens of sports and figure out what they might like, the app meets them where they are and guides them into a personalized Team USA fandom path.
The experience starts with a short, game-like walkthrough. Users answer a sequence of questions about what kinds of competition, movement, pace, and atmosphere they are drawn to. The tone is designed to feel playful rather than analytical, so even a user with no sports background can move through it quickly and still feel like the app is learning something meaningful about them.
At the end of the walkthrough, the user is placed into one of 12 fan tribes. Each tribe represents a distinct pattern of sports interest and fan temperament. Instead of just showing a label, the app gives the user a tribe identity, a short tribe description, and a sense of belonging inside a larger fan community.
From there, Tribe28 generates a personalized LA28 Games watchlist. Rather than giving generic recommendations, it highlights sports that fit the user’s profile and explains why they might connect with them. The app is designed to balance obvious picks with more surprising ones, so users discover sports they may not have considered before.
The experience does not stop at recommendations. Users can also see an anonymous community view of their tribe, including where similar fans are coming from, which sports are trending inside that tribe, and which nearby tribes share overlapping interests. To make that social layer feel alive, each tribe also has its own anonymous forum, where users can browse threads, post, react, and see how other fans in the same tribe are talking about the sports they follow.
The result is part quiz, part recommendation engine, and part fan community product.
How we built it
We built Tribe28 as a full-stack web app on Google Cloud, with Gemini on Vertex AI handling grounded narrative generation and ML pipelines shaping the recommendation and tribe assignment logic.
Architecture
| Layer | Implementation |
|---|---|
| Frontend | React 18, TypeScript, Vite, React Router |
| Backend | FastAPI, Pydantic v2, Python 3.12 |
| Hosting | Cloud Run |
| CI/CD | Cloud Build |
| Container Registry | Artifact Registry |
| LLMs | Gemini 2.5 Pro + Gemini 2.5 Flash via Vertex AI |
| Analytics / Storage | BigQuery, Cloud Storage |
| ML | BigQuery ML, scikit-learn, pandas, pyarrow |
Google Cloud services used
| Google Cloud service | How we used it |
|---|---|
| Cloud Run | Hosts the production app as a containerized web service |
| Cloud Build | Builds and deploys the app from source |
| Artifact Registry | Stores the built container image |
| BigQuery | Stores aggregated Team USA data, cluster outputs, community stats, and fact-pack views |
| Vertex AI | Runs Gemini 2.5 Pro and Gemini 2.5 Flash |
| Cloud Storage | Caches fact-pack and offline artifact data |
Data sources
| Source | Purpose | USA rows / scope |
|---|---|---|
| Kaggle: 120 Years of Olympic History | Historical Team USA athlete-event records | 18,853 USA rows |
| Kaggle: Paralympic Dataset 1960–2018 | Historical Team USA Paralympic records | 3,059 USA rows |
| LA28 Games program pages | Current LA28 Games sports program | 75 sports |
ML and recommendation pipeline
| Component | What it does |
|---|---|
| Quiz projection model | Converts user answers into a 6-axis fan profile |
| BigQuery ML K-means | Learns 6 athlete archetypes from historical Team USA data |
| Offline tribe clustering | Fits 12 fan tribes from derived athlete-axis positions |
| Hybrid sport scorer | Ranks LA28 Games sports using affinity, tribemate signal, novelty, and parity |
| Paralympic parity guard | Guarantees Paralympic representation in recommendations |
| Community aggregation | Builds k-anonymous tribe stats from fan session behavior |
Gemini usage
| Model | Role |
|---|---|
| Gemini 2.5 Pro | Writes personalized, grounded sport explanations |
| Gemini 2.5 Flash | Verifies grounding and rejects weak or unsafe outputs |
We used a composer -> critic -> fallback pipeline: Gemini Pro drafts the explanation, Gemini Flash checks whether it is grounded in the structured fact pack, and if verification fails, the system falls back to deterministic template text.
We also built explicit compliance protections:
- NIL banlist checks on generated text
- Anonymous forum identities only
- No athlete-level output
- No finish times or specific scoring results
- US-only filtered data
- k-anonymous community aggregates
Challenges we ran into
- Balancing personalization with compliance. The hackathon rules are strict about NIL, athlete-level outputs, and prohibited data. We had to design the entire system so it stayed insightful without ever surfacing individual athlete identities.
- Keeping Olympic and Paralympic parity real, not cosmetic. We did not want parity to be a paragraph in the README. We enforced it directly in the scoring layer so the recommendations themselves reflect it.
- Making Gemini outputs reliable. Narrative generation is useful, but only if it stays grounded. That is why we added a second Gemini model as a critic and built deterministic fallbacks.
- Combining multiple signals cleanly. The recommendation engine had to merge quiz affinity, historical structure, novelty, and community behavior without becoming opaque or unstable.
- Turning raw historical data into a fan-facing product. Historical sports datasets are not naturally shaped for consumer UX. We had to transform them into tribes, watchlists, fact packs, and community views that actually feel usable.
Accomplishments that we're proud of
- We built a live Google Cloud-deployed product, not just a notebook or static demo.
- We created a recommendation experience that feels personal while staying within strict hackathon compliance rules.
- We used Gemini in a structured way, with generation and verification separated into distinct roles.
- We built a real ML-backed fan identity system instead of using shallow tags or manual categories.
- We maintained Olympic/Paralympic parity in both the data pipeline and recommendation outputs.
- We added an anonymous tribe forum, which makes the project feel like a community product rather than just a quiz.
- We turned public Team USA data into something interactive, interpretable, and fan-centered.
What we learned
- Grounded AI needs guardrails. Gemini was most useful when paired with structured fact packs, verification logic, and clear failure behavior.
- Classical ML still matters. K-means clustering, feature engineering, and deterministic scoring gave the project structure that generative AI alone would not provide.
- Compliance shapes product design. Working around NIL and output restrictions did not just affect implementation details; it changed the entire way we thought about user experience.
- Parity has to be encoded in systems. If fairness goals are important, they need to exist in ranking logic, data models, and tests.
- Fan products benefit from identity and community. The tribes and forum made the app more compelling than a pure recommendation dashboard would have been.
What's next for Tribe28
- Expand the tribe community features with richer moderation, better thread discovery, and stronger cross-tribe discussion tools.
- Add more dynamic signals into the ranking system, including fresher momentum indicators and better session-based personalization.
- Improve the fact-pack pipeline so Gemini explanations can cover more sports nuance while staying fully grounded.
- Add deeper explainability for tribe assignment so users can understand how answer patterns shaped their result.
- Introduce longitudinal fan journeys, where a user can return over time and see how their tribe identity and watchlist evolve.
- Strengthen analytics around which recommendations actually drive engagement, forum participation, and sport exploration.
Built With
- cloud-run
- gcp
- gemini
- google-bigquery
- google-cloud
- vertex-ai
Log in or sign up for Devpost to join the conversation.