Inspiration

I had a few ideas from the start. Since I was high elo and used to play very competitively, I'm very passionate about ranked and wanted to help others rank up too. I first wanted to make an AI helper that would review your stats and figure out ways you aren't climbing. However, LLMs are just too unreliable and often give mediocre to downright bad advice.

So, I pivoted to trying to compare stats against someone better than you instead, that way you can tell what they're doing better. I first tried comparing against players around your rank, just a little bit higher (e.g. Gold vs Diamond), but I ran into API rate limiting issues. In the end, I settled for comparing against pro players, and I realized that the comparison would be so huge that it would be funnier than useful. So, I leaned into it being hilarious. I decided to make it roast you by comparing your stats to pro player stats, but even grabbing pro player stats had its issues.

In the end, I made a prototype for roasting your stats with an optional feature to compare against pro players. However, I got hooked on just roasting your stats alone as I saw that it had real potential. I refocused all my efforts on making that feature good, and now I think it can be pretty funny! LLMs are still very unpredictable, so sometimes it gives some mediocre one-liners, but I think that's what makes it funny too, you'll never really know what you'll get!

What it does

It pulls the latest 100 games you played in ranked in 2025 and tries to find ways to roast you with postcards. It's been designed to be witty, leaning more toward dry humor, as I realized LLMs are better at jokes that are "so stupid it's funny". If your stats are really good though, it might not even find ways to roast you and just give you half-compliments instead. There are many ways it can go! Give it a try!

How we built it

Python + FastAPI for the backend, React + Vite for the frontend, AWS Bedrock (Claude 3.5 Sonnet) for AI text generation, and Riot Games API for match data. Deployed on Railway (backend) and Vercel (frontend).

Challenges we ran into

The main challenge was starting the project late, so even if there were solutions to some of the issues I faced, I didn't have time to figure them out.

Beyond that, the biggest problem is how unpredictable LLMs can be. It was hard to tune it to give good roasts, and there's only so much you can do. I basically gave it prompts and tweaked them until I liked the direction it was going. Model quality also matters significantly as I compared outputs between models and noticed a clear increase in quality with better models.

Another challenge is API rate limitations. The Riot API is limited to 100 requests every 2 minutes, so I capped it at pulling 100 recent ranked games max. This actually causes some issues. For example, the LLM will think the user only played 100 games in 2025, when in reality they could have hundreds or thousands of games, resulting in roasts based on incomplete context. Even when I explicitly prompted it not to make these assumptions, there are still caveats. For instance, if a player played over a hundred Tristana games but only 100 games are pulled, the AI might think they're a Tristana one-trick when in reality Tristana might not even be in their top 3 played champions.

So most limitations and challenges revolved around LLMs and the API. There were a few coding challenges, but they were generally easy to fix, things like API misuse or frontend coloring/design.

The last thing I would have liked to do is make the postcards prettier. I was hoping to add League-related icons or even GIFs/memes related to each postcard's topic, but that would've required external APIs. I decided to focus on improving roast quality over adding more features and polish since it would have taken much longer to develop.

Accomplishments that we're proud of

Since I started this project late, I'm happy that the end result was passable by my standards. There are rough edges, but it's a fun enough product that I'm willing to share with my friends. The AI gives some genuinely funny quotes sometimes that make me laugh. I hope people will like it!

What we learned

There are many things I learned. One is time management, as I learned to focus on crucial tasks over minor ones. I also learned new technologies like AWS Bedrock, which I'd never used before, and FastAPI for building Python web APIs. It's also cool to have deployed a full product, even if it's a prototype. Putting something out there for the world and not just yourself isn't always easy.

What's next for League Rekap-pa

If I had more time, I'd love to make the roasts better. I can definitely improve them with ideas like fine-tuning the model, using a better model (with a bigger budget), or better prompt engineering.

I'd also like to improve the postcards. I would have liked to lean more into the social aspect with sharing funny quotes. This app isn't serious, it's a fun and memey app that hopefully puts a smile on your face. Adding more visual elements (like league related designs) would make it more vibrant, and I'd like to explore that next.

Lastly, I'd still like to try roasting players by comparing their stats to pro stats. I think it would be fun to compare yourself against your favorite pro. It was already half-working, but I removed it to focus on the main roasting feature. I'll have to fix and polish it up. One issue I faced was deciding how to grab pro player stats. There are two kinds: competitive stats (LCK, LPL matches) and solo queue stats. Solo queue stats are much harder to track because pros frequently hop between accounts and sometimes play on hidden accounts to avoid leaking strategies.

Built With

Share this project:

Updates