League Lingo was a project I started a few weeks before the start of the NFL regular season in 2024. The goal was to create income by selling hyper-personalized AI generated newsletters for Fantasy Football leagues. This project was ultimately a failure that I learned a lot from.
The Idea
I love fantasy football. I’m also a stats nerd. Combine those two things with the AI hype of 2024, and you get League Lingo—a project I built to automatically generate fantasy football newsletters for leagues.
The idea was simple: connect your Sleeper fantasy football league, and every week, you’d get a custom AI-generated newsletter breaking down matchups, standings, and league storylines. No effort required. Just vibes and trash talk.
In my head, this was a no-brainer. Fantasy football leagues are full of inside jokes, trash talk, and wild narratives that make the game fun. What if there was an AI that could capture all of that and turn it into a personalized ESPN-style recap for your league every week? It would analyze matchups, highlight key performances, and even write roast pieces about the worst teams—all fully automated.
I still think the idea is a good one. This is one of those projects that you take on because you think it will be easy, only to find its an absolute monster.
How It Worked
Here’s how League Lingo actually functioned:
- Syncing League Data – Users entered their Sleeper League ID, and we pulled everything from their league into our database—teams, rosters, weekly scores, standings, and player stats. No complicated setup. Just paste your league ID, and we handle the rest.
- AI-Generated Newsletters – Every week, Python scripts would take that data, break it into structured prompts, and send it to OpenAI’s API to generate detailed, league-specific write-ups. These included matchup recaps, power rankings, and even projections for the upcoming week.
- Email & PDF Reports – The AI-generated content was formatted into an email newsletter (or downloadable PDF) and sent out automatically. The league commissioner could set delivery times and customize content themes.
It was basically like having a personalized ESPN recap for your league—except tailored to your teams, your matchups, and your league’s ongoing narratives.
And it had really cool features. Because customization is key, I let users tweak how the AI wrote the reports by giving them the ability to add a custom system prompt. Want all the newsletters written in Shakespearean English? Done. Want the AI to trash talk one specific team? Absolutely. One guy even set his league up so the AI shit on one specific dude in every single piece it would write.
The Tech Stack
I built League Lingo using:
- Backend: Django, Python, PostgreSQL, Gunicorn
- Cloud Services: AWS S3 for media storage, SendGrid for emails
- AI: OpenAI API for content generation
- Infrastructure: Heroku for deployment
Django made it easy to handle user accounts, scheduling, and payments. PostgreSQL was rock-solid for storing all the league data, and AWS S3 handled storing media and PDFs. I used Heroku for deployment, which honestly held up better than I expected—even when running weekly cron jobs to process multiple leagues at once.
The Build
Like I said before — ultimately, this project was a failure. I made a lot of mistakes, and I will talk about those. But, I do want to call out some of the highlights of the project — the build.
First of all, I had this idea 3 weeks before the start of the NFL season. And I don’t know if I am a undiagnosed bipolar who was going through a mania wave or what — but I made every single minute of those 3 weeks count. Like I worked my ASS off. I’m talking all-nighters, every single night. Fueled by Diet Coke and a vision, I took down this beast of a project like my life depended on it.
I had never done a website with Django before. I hadn’t used Heroku yet. Additionally, my database skills were novice at best. I took an approach that I would actually do again — I prioritized the backend proof-of-concept before everything else; and built up from there. This was crucial and a key to having this project done in time. Once I knew I could automate these newsletters in python, then I shifted to the website and database.
Yeah, I leaned on AI heavily for the build of this project — so what? I use AI for everything, and if you don’t, you’re ngmi. Yeah, I said it. The end goal is to ship. Ship your product on time, and do whatever it takes to get people something. If AI can help you do that, then use it. And that is exactly what I did.
This project was a monster with a hard deadline and I got it done on-time. For me, an ADHD-riddled script kiddie who chronically hyper focuses on something for a week and then moves onto the next shiny object — turning this vision into a reality, with an aggressive self-imposed deadline — was the thing I am most proud of.
Where It Struggled
1. AI Hallucinations Were a Nightmare
The AI got things wrong constantly. It would mix up who won a game, make up stats, or completely invent matchups that never happened. Early on, the newsletters would say things like:
“Team A absolutely demolished Team B this week, dominating with a 40-point blowout.”
Except… Team B actually won.
Turns out, AI doesn’t handle structured sports data very well when given too much at once. If I fed it an entire league’s weekly results in a single prompt, it would randomly misinterpret scores, mix up teams, or flat-out make things up.
The fix? Breaking down AI prompts into smaller, hyper-specific requests. Instead of feeding it the entire week’s results in one go, we generated matchup recaps separately and stitched them together. That cut down hallucinations a lot—but didn’t eliminate them entirely. The other aspect of this was that it made article generation a lot more labor intensive. Instead of having a templatized python script with a set prompt that you could use over and over; you had to break down the script and data into multiple prompts, store all those pieces together, and then reconnect them in a way that made sense for a larger article.
2. The Novelty Wore Off
Fantasy football is already an information-heavy game. People track their teams, read waiver wire advice, and get real-time updates from ESPN, Sleeper, and Twitter. After a couple of weeks, the AI-generated newsletters started to feel redundant—like an unnecessary layer on top of everything else.
At first, league members were excited to get them. Week 1? Hype. Week 2? Still cool. By Week 5? Most people weren’t even opening the emails.
To be fair, the newsletters were redundant. Because of how laborious it became to create new articles, I ended up reusing a lot of previous weeks articles. There was always a matchup recap article in every newsletter, and it ended up being huge. People already know who won or loss – and to be frank, people really only care about their own fantasy team. Looking back, if the newsletters were tailored to your specific team, it would have been a lot more appealing.
3. Maintaining It Was Brutal
Every single week, I had to tweak AI prompts, debug hallucinations, fix stat errors, and rewrite article scripts just to keep it running. What should have been a fully automated system turned into weekly manual labor. By Week 9, the novelty had worn off, the work felt endless, and I realized—this just wasn’t worth it.
AI hallucinations still happened occasionally. The newsletters felt too predictable. Creating new articles took hours of work. Improving existing articles became risky, because it was easy to mess everything up.
The difficulty to maintain it with the novelty of the project wearing off took a toll on me, and I ended up shutting down the project.
The Business Side
Originally, I planned to charge $250 per season per league—since fantasy football players already spend money on buy-ins, research tools, and league customization. But after realizing the product wasn’t as polished as I wanted, I dropped it to $25 per league just to cover costs. I was encouraged by business friends to charge a premium price for this, but it felt wrong charging a premium price for a sub-par product.
We had a handful of paying users—all friends—but I never really pushed marketing beyond that. Could I have charged more? Maybe. But deep down, I didn’t feel good selling a half-baked product.
I did reach out to Sleeper about my idea. The dream was that they would pay me a decent chunk of change to buy the idea/scripts/etc. off me. They did actually get back to me and told me I could develop this as a plug-in for the Sleeper App. I asked if there was any financial agreement we could come to, since I didn’t want to make it free for all Sleeper users and then foot the AI bill. They declined, and that is about the furthest I got with them.
What I Learned
Even though League Lingo didn’t take off, I got a ton of valuable experience from building it:
- AI isn’t magic. You can’t just throw data at it and expect perfect results. Good AI-powered products need carefully structured prompts, post-processing, and error handling. Sometimes, less is more, and using that to your advantage is key to getting what you want from an AI.
- The product is the most important part. If I could go back and redo this project, I would spend the bulk of the time focusing on the quality of the generated articles, and the content of those articles. Had more work gone into improving the actual product, I might have had more success here.
- Start scalable. On the roadmap, I had items for building support for ESPN and Yahoo leagues. I was in such a rush to meet my deadline, that I built my database and scripts around the Sleeper API. This means that in order to add support for other leagues, I would have to rewrite all the article generating scripts and the entire database. Had I built it with scalability in mind in the beginning, this would have been much easier.
- People care about themselves. When people were reading their articles, they weren’t reading the whole thing. They were scanning for the parts they were mentioned in and focused on those. I know this because 1) I’m guilty of this and 2) Conversations with my end users. I really do think I would have had more success if the articles were tailored around your specific team and not the entire league.
- Shipping a working product is still an achievement. Despite all the flaws, League Lingo was a fully functional AI-powered SaaS product that people actually used and enjoyed (for a little while). While this one didn’t quite workout like I hoped it would, actually shipping the working product was a massive confidence boost and gave me really great perspective.
Anything you can share?
Sure! Here is a newsletter we actually sent out to one of the leagues I am in.
Here is the source code — but before you click it and start judging me, let me just say, this is not perfect and was never meant to be perfect. It is very flawed. Very deeply deeply flawed. Go easy on me.
Would I Ever Revive It?
Revive it? Absolutely not. I’ve seen too much. But if someone wants to pay me an irresponsible amount of money to rebuild it, I’ll consider it.
If you’re considering doing something like this, look into high school sports recaps, automated stock market reports, or custom fitness tracking summaries—something where the hyper-personalized AI-generated content actually adds unique, long-term value.
That said, League Lingo was a fun ride while it lasted. And now, it lives here—on my portfolio—as a reminder that sometimes, even failed projects teach you a lot.
Have a Crazy Idea? Let’s Talk.
I love building weird, experimental projects. If you’ve got an idea for something similar—or just want to talk tech—hit me up.