Dynasty League Roaster
AI-powered fantasy football roast generator connected to the Sleeper API.
What I built
A tool that pulls live results from a dynasty fantasy football league via the Sleeper API, processes the weekly matchup data, and generates personalised roast messages for each manager based on their performance. It’s AI-assisted chaos for a group chat that takes fantasy football more seriously than is probably healthy.
The generator looks at actual game data — scores, player usage, waiver wire decisions, historic patterns — and produces something that reads like it was written by someone who has watched the league closely, rather than a generic template. The specificity is what makes it funny.
What problem it solved
The problem it solved is that our dynasty league group chat goes quiet after deadline day because everyone’s too embarrassed to talk about their team. This makes it worse for everyone. A weekly automated roast gives people something to react to and restores a bit of energy to a long season.
The less frivolous framing: it’s a practical example of using AI for something genuinely situated and context-specific, rather than generic content generation. The tool has no value without the specific league data. It’s only useful in the context it was built for, which is exactly the kind of AI application I find more interesting than general-purpose generation.
What I learned
The Sleeper API is surprisingly well-documented and genuinely usable — the hardest part of the project was prompt engineering, not data retrieval. Getting roasts that feel specific and sharp without tipping into mean or repetitive is a calibration problem. It took more iteration than expected to get the tone right.
Also learned that “built for chaos” is actually a legitimate design brief. Not everything needs to be enterprise-grade. Some things just need to make twelve people laugh on a Monday morning.
Tech used
Sleeper API for all league data — rosters, matchups, transactions, standings. JavaScript handles the data fetching and processing. Claude (Anthropic) provides the generation layer. The whole thing is lightweight and stateless — no database, no accounts, no stored data.