GridIron GPT:

Introduction

I didn't grow up with American football. Moving to the U.S., I was introduced to the NFL around 2012. Fantasy football entered my life a few years later, in 2018, primarily as a way to connect with my classmates at Cornell Tech. Initially, I understood the rules but lacked strategic depth—it felt like playing chess knowing only how the pieces moved. Early on, I made some regrettable trades and was often the subject of league ridicule.

Determined to improve, I immersed myself in fantasy football content. Podcasts, articles, and expert analyses became my daily routine. A special shoutout to Drew Davenport, aka Fantasy Football Lawyer, whose insights significantly shaped my approach.

Fast forward to 2023, I topped my home league's regular season, and in 2024, I clinched the championship. When the opportunity arose to undertake a capstone project for Google's GenAI course, creating a fantasy draft assistant felt like the perfect blend of personal passion and professional exploration.

The Problem

Fantasy football is inundated with data—player stats, expert rankings, injury reports, and more. Drafting isn't just about knowledge; it's about synthesizing vast information to make real-time decisions. Traditional tools offer assistance, but they often lack the adaptability to account for dynamic factors like draft position, evolving team needs, and emerging player trends.

Moreover, while platforms like FantasyPros provide draft helpers, they cater to the masses. In a game where identifying undervalued "sleepers" can be the difference between victory and defeat, having a unique, contrarian perspective is invaluable. This project aimed to harness GenAI to process diverse signals, correlate them with historical data, and offer strategic, real-time draft advice tailored to specific scenarios.

Approach

To evaluate draft strategies effectively, we simulated a 14-week best-ball fantasy football season using real data from 2024—a dataset the model hadn't been exposed to. Each team in our 12-team league was assigned a distinct draft strategy, such as Hero RB, Zero RB, Balanced, or Opportunistic+Value. Draft positions varied to assess strategy performance across different slots.

Key decisions included:

  • Best Ball Format: Chosen to sidestep complexities like waiver wire transactions and weekly lineup changes.
  • Top 300 Player Pool: Limited to reduce token usage and keep prompts manageable.
  • Position Caps: Prevented player pool depletion for scarce positions like TE and DST.
  • Simplified Variables: Omitted rookie profiles, coaching changes, and injury modeling in v1.
  • Model Constraints: Gemini was strictly instructed to use only the provided dataset, not outdated internal knowledge.

GenAI in Action

Implementing GenAI presented its own set of challenges:

  • Model Limitations: Gemini's knowledge cutoff required careful grounding and data overrides.
  • Prompt Engineering: Structuring each round’s player pool, team state, and draft strategy into valid JSON calls.
  • Vibe Coding: I had to learn how ChatGPT "thinks" — which things it reasons through, and which require explicit logic or global rules.

GenAI concepts integrated into this project included:

  • Structured output / JSON-mode generation
  • Grounding
  • Embeddings + fuzzy logic to normalize data
  • Retrieval-Augmented Generation (RAG)
  • Long context windows and context caching

Data Wrangling

Data integrity was a key part of the build. I had to manually inspect and fix malformed player names, merge DST scoring separately, and normalize column names and values across multiple years and sources.

In many cases, I defaulted missing numerical columns to zero to keep the structure clean. I also made design choices to drop certain rarely populated fields that would otherwise complicate merges and increase prompt size without meaningful return.

Results

Here’s what we saw after running the full season simulation:

  • Hero/Zero RB (mid slot) topped the league in wins (11).
  • Opportunistic+Value (late) and Anchor QB (early) also performed well.
  • Balanced strategies were solid, but rarely led the standings.
  • Anchor QB from mid/late slots underperformed consistently.

Screenshot or chart of standings can go here:
Final standings chart

Areas for Improvement

  • Richer Feature Set: Include rookie profiles, injury volatility, and variance modeling.
  • Opponent Behavior: Predict and account for opponent needs to avoid overreaching on key positions.
  • Auction Drafts: Add support for auction formats, which require tracking budget, bid tendencies, and psychological plays. (I’ve tracked these in personal spreadsheets for years — it’s a gold mine of human behavior meets strategy.)
  • Streamlit App: Port the entire functionality into Streamlit so people can play around with their own leagues
  • Browser plugin: Create a Chrome browser plugin that people can download and use themselves

Lessons Learned

  • Domain Knowledge Matters: My obsession with fantasy football let me diagnose model failures and guess likely logic gaps.
  • Prompt Engineering is an Art: I had to “think like the model” and iterate on structure and instruction to get stable outputs.
  • Data Hygiene Drives Everything: You can’t build trustworthy simulations on top of messy joins, broken IDs, or mismatched columns.

Conclusion

GridironGPT was born out of a personal journey from fantasy football novice to champion. By leveraging GenAI, I aimed to demystify draft strategies and offer data-driven insights into what works and when.

While this project was focused on a single simulated season using real 2024 data, a richer feature set and broader simulations over multiple seasons would be necessary to draw long-term conclusions.

📺 Project Walkthrough Demo

GridironGPT Fantasy Draft Agent Demo

Watch the full video walkthrough of GridironGPT on YouTube!


Try It Yourself

Want to test your draft strategy or simulate your own league?

Thanks for reading — and may your 13th-round sleeper go off this season.

Previous
Previous

Customizing My Mac Workspace

Next
Next

Creating a Wordle Bot - Part 3 - Code