Because I Felt Like It
- Rick Pollick
- 17 hours ago
- 7 min read
Updated: 8 hours ago
How I Turned Fantasy Football Into an AI-
Powered Data Playground

Let me start where most people start—with the question, “Isn’t this a silly waste of time for a game?” On the surface, sure. It’s fantasy football, not a hedge fund. But here’s the principle that pushed me to build it anyway: because I could, because I love deciphering messy data, and because it makes the game more fun. Building is play for me. Finding signal in the noise is play. Turning Sunday-morning coin flips into explainable decisions is peak play.
Football FantasyIQ available here - https://fantasyiq.rickpollick.com/
*Runs best on a desktop view
For years, my fantasy football process was a juggling act: injury blurbs here, projections there, a weather tab, a couple of “expert” takes that didn’t care about our league’s funky scoring or deep benches. I’d still make decent calls, but it felt like “research-flavored guessing.” Sleeper is a very popular fantasy football platform/app. A collegue, in my fantasy league was talking to be about how they could use AI to decipher player data, but it was old data. So I built my own co-pilot: Fantasy Football Analyzer, a targeted, AI-powered platform that actually knows my Sleeper leagues—our rules, rosters, schedules, and the way our managers trade—and then explains its recommendations in plain English. No clickbait. No one-size-fits-all rankings. Just league-aware analytics and explainable AI.
What I Wanted to Fix

Generic advice is rarely league-aware, it goes stale the minute inactives get announced, and it doesn’t explain why. I wanted one place that understood our settings, updated live, showed its work, and reduced decision stress. I also wanted to enjoy the engine: simulations, optimization, and AI reasoning side-by-side with the data they’re built on. Less tab-hopping, more clarity. Less vibes, more receipts.
How It Works When I Actually Use It

I log in and the app already remembers my league (saved against my profile). The current
matchup view is the weekly hub: starters vs. bench with positions and position labels, live scoring as games tick, and the running score. Then I press the button I wish existed everywhere else: simulate.
The simulator runs Monte Carlo iterations using a sensible scoring cascade. If

a player already has points this week, those anchor the sim with a tight ±5% variance (because real points beat projections). If not, we use Sleeper’s projections with a realistic ±10% variance. If projections aren’t available, we fall back to season-average PPG with ±20% (because averages are noisier). Out comes a win probability, an average simulated score, and a score distribution that tells me whether this matchup is steady or swingy. Every player line is tagged with the scoring source (actual / projection / average), so I can see where the risk lives.
If the sim says I’m in a coin flip, I run the optimal lineup tool. It respects our roster rules and FLEX logic, ignores injured and bye-week players, and surfaces the best legal lineup. It also tells me the “points left on the bench” if I do nothing—a small metric that has saved me from lazy mistakes.

When two players are close, I open Start/Sit. This is where the AI earns its keep. It weighs recent performance trends, opponent difficulty, weather, injuries, Vegas lines and implied totals, and even historical matchups, then gives me a recommendation with a confidence rating and a written explanation. It’s not “trust the bot blindly”—it’s “here’s the synthesis you were going to cobble together from six tabs, made consistent and readable.”

Between matchups, I scout. A team comparison view lets me put any two rosters side-by-
side with records, points for/against, average scoring, and position depth—perfect for evaluating trade partners or scouting opponents. The power rankings combine

record, raw scoring, points against, recent form, and roster strength, and show momentum with little up/down arrows.

For the big picture, the playoff odds tool simulates the remaining season 10,000 times, factoring current records, schedule strength, historical performance, and variance, then shows likely seeding outcomes along with clinching/elimination paths.
Trades are where the platform feels like a secret weapon.

The Trade Builder lets me assemble single- or multi-team deals (players and picks), and the AI trade analyzer scores fairness on a -10 to +10 scale while explaining the positional impact, depth changes, playoff implications, and buy-low/sell-high angles specific to our league. There’s a live trades feed pulling from Sleeper’s transactions API, so I can watch the league meta evolve in real time and run quick analyses on deals I didn’t make.

When I want a coach’s-eye view of my roster, I open Team Improvement Suggestions. The AI audits my whole lineup and league context, then gives a prioritized plan: shore up TE with these waiver targets, move WR depth for an RB upgrade with these specific teams, flip this bench piece before his schedule tightens, and so on—justified, not hand-wavy. If I want to get nerdy on a single player, Player History & Trends shows game logs, usage and target-share trajectories, injury timelines, regression signals, and a rest-of-season outlook.
And because I love pictures that tell the truth, Team Performance Charts visualize weekly

scoring trends, win/loss distributions, position-by-position production, and a consistency score (standard deviation) with overlays against league averages. It turns the season into a story I can actually see.
What the AI Actually Does (And Doesn’t)
Under the hood, I use AI for synthesis and explanation—not for inventing numbers. The analysis functions (player analysis, trade analysis, trade proposal analysis, lineup optimization explanations, opponent scouting, and full-team improvement) run through an edge function that injects structured context: my league’s roster and scoring rules, current rosters and matchups, projections or actuals, ESPN schedule/standings for strength-of-schedule, and any relevant injury/weather notes. The model’s output is an explanation with confidence, grounded in the data the app just fetched.
When hard facts exist—e.g., a player already scored 18.4 points—the AI defers to them. The simulator weights those heavily. When projections are shaky or injuries are uncertain, the model’s confidence tapers and it tells me why. The goal is explainable decision support, not mystery-box picks.
The Metrics and Trends I Care About
The app tracks the stuff I used to chase in spreadsheets and bookmarked threads. Weekly scoring trends and league-average overlays show whether a hot streak is real or schedule-fueled. The consistency score (standard deviation) tells me which teams win with steadiness vs. spiky blowups. Position performance charts surface where my points truly come from and where I’m light. Player pages collect recent usage, target share movement, injury cadence, and bye-week maps, with opponent difficulty and implied totals baked into the weekly outlook. Start/Sit and team-improvement explanations call these signals out explicitly so the “why” is always front and center.

And because Sleeper doesn’t put everything in one place, the Fantasy FootballIQ (my) app brings together areas that are not front and center in Sleeper: true league-aware start/sit rationales, Monte Carlo playoff odds and finishing distributions, trade fairness with positional balance deltas, roster-composition diagnostics, strength-of-schedule integration from ESPN, live trades timelines, and optimal lineup logic that respects every weird FLEX permutation a league can invent. It’s the connective tissue I always wished Sleeper showed me inline.
The Technical Plumbing (So You Don’t Have To Think About It)
AI also helped me expedite my design, build, and deployment of this app. All of this runs on a clean stack that stays out of the way. The front end is React 18 + Vite + TypeScript with Tailwind (dark/light themes and semantic tokens), Radix + shadcn/ui for accessible components, Recharts for charts, and React Router v6. Data fetching runs through React Query with sensible caching. Sleeper is the source of truth for users, leagues, rosters, weekly matchups, transactions, traded picks, the full player pool, and the NFL state;
I proxy it through a database edge function to avoid CORS headaches. ESPN endpoints feed schedules and standings through small serverless functions. Auth is DB Auth, and Row-Level Security ensures you only touch your own profile. The OpenAI key sits as an encrypted Supabase secret, and protected functions verify JWTs. It’s fast, typed, and appropriately locked down.
Why This Hobby Makes Me Better at My Day Job
This wasn’t just a toy—it’s a sandbox that sharpened skills I use professionally:
Decision science over dashboarding. The goal isn’t “more charts,” it’s lower decision latency with higher confidence. That maps directly to product and ops: fewer meetings to make the call, clearer rationale, better outcomes.
Explainable AI. Building prompts that inject structured context, calibrate confidence, and surface caveats taught me how to make AI auditable—the difference between “neat demo” and “production decision support.”
Simulation thinking. Monte Carlo shows distributions, not single-point delusions. I now use the same approach for forecasts, capacity planning, and risk windows—what’s the likely range, and what actually moves it?
Domain-aware analytics. “League-aware” here becomes “org-aware” at work: every metric must respect the rules of the environment (business logic, constraints, roles/permissions) or it misleads.
Secure-by-default data design. RLS, token handling, and edge-function scoping carry straight into any system that touches sensitive data.
Product taste and UX flow. The app’s rhythm—matchup → simulate → optimize → decide—translates to guided workflows in enterprise tools. Kill switching costs and cognitive overhead; make the “next best action” obvious.
Shipping small, useful slices. Edge functions with tight purposes and typed hooks keep complexity down. That’s the same muscle you need for reliable, evolvable platforms at work.
In short: building this made me faster at framing problems, better at designing explainable analytics, and more opinionated about trustworthy AI in real workflows. The feedback loop on Sundays just happens to be a lot more fun.
Why It Was Worth It
Some folks will always see this as overkill. I see it as clarity and joy—and yes, an edge. I like waking up on Sunday with a plan and a calm brain. The platform doesn’t guarantee perfection (football will always be weird), but it does make me consistently better and a lot less stressed. That’s the ROI I care about.
And, because I can’t help myself, I’ll keep tinkering—smarter push alerts for late injury pivots and trade opportunities, a real-time draft assistant, a dynasty brain, and a better waivers agent. But even now, the loop is tight: log in, understand, simulate, optimize, decide. Then close the laptop and actually watch the games. That’s why I built it—because I could, because I love cracking data puzzles, and because it makes the whole thing more fun.