
Inspiration
We believe one of the steepest learning curves in League is the initial struggle to learn new champions, and to remember all 600+ abilities intuitively. From personal experience, we know that the best way to learn matchups and each champions' key identities is to play them ourselves.
That's why we created Heimer, a personal coach that analyzes the player's gameplay using a mix of heuristics and ML to offer concrete steps for players to expand their skills and champion pool, with the knowledge they already know. We think the next step of League API applications is actionable, personal feedback, not just generic, old-school analytical tools like op.gg.
Main features
Champion Recommender:
Learning new champions can often be confusing with drastically different abiltiies and playstyles. We beleive that the best way to learn League of Legends is to play a couple different roles to step into the shoes of your allies and enemies alike. To do this, we wanted to ease the player into champions that follow similar playstyles from those they are most familiar with.
- Based on the champions they've most played before, players are recommended new, similar ones to play based on mastery data collected across tens of thousands of fellow players.
- Again, this means that learning new champions aren't as so daunting as it was before, because they're now customized to have similar playstyles (i.e. you're not going from being a Sona main to learning to play Zed!)
- Execution: To do this we scraped summoner's profiles using a depth-first search algorithm to find their top 5 highest champion masteries. We then built out a graph using Amazon Sagemaker which represents the highest co-occurance rate (e.g. We found Zed players are highly likely to also play Talon)
Ability Similarity Calculations:
The next step was to learn the champion. A common trend we observed was that after players decide on a champion, they may read their champion's abilities or even watch a guide. To aid in this onboarding process, we created an ability similarity calculator designed to teach new champions using a familiar mindset.
- We then teach the player the new champion by making references to other champions they've played before by referencing these comparisons (e.g. "Ezreal's Q is 90% similar to Xerath's E, which you've played before!")
- This means players can draw from previous knowledge from champions they've played before to learn new champions, drastically decreasing the learning curve.
- Execution: From the Riot Data Dragon API, we processed the descriptions of 600+ in-game abilities, we performed 200,000+ pairwise comparisons using Amazon Bedrock's provided models to quickly produce similarity scores (0.0-1.0) based on a strict custom criteria focusing on mechanical similarity, primary use case, and functional effect.
In-Depth Match Analysis:
We know that suggestions only go so far, but to really drive home our learnings, we wanted hard performance metrics. Within each match, we provided three key metrics End of Game Performance Score(EPS), Gold Efficiency, and Power Rankings Over Time. This allows us to have a hollostic view of player performance, dive into their itemization, and also identify key powerspikes and differentials in strengh.
- End of Game Performance (EPS): End of game performance was broken down into 3 subcategories. Combat Score(40% weight) computed by KDA, Kill participation, and damage participation. Economic Score(30% weight) was computed by gold per minute, CS per minute, and damage done leveraging gold. Objective score(30% weight) was computed using the damage done to objectives. This all combines to give a rough measurement of how well each player performed, and also allows us to compare team contributions.
- Gold Efficiency: We computed how efficiently each summoner was using their gold leveraging each item's stats to gold efficiencies. To determine how much an individual stat was worth, we used the cheapest way to obtain the stat using single stat items (ie, dagger is the cheapest way to obtain attack speed.)
- Power Rankings over time: To measure this, we looked at Economic Power based on your gold advantage over your laner, Power Score scored based on your AP, AD, and attack speed, and Defensive Score using Effective HP (Armor, MR, and HP) as a measure of survivability. Execution To do this, we leveraged Riot's API for Match timeline as well as Match Summaries to get timestamped metrics. We used Beautiful Soup and Riot Data Dragon to determine gold efficiencies and ratios, and map item ID's to combine into our three key metrics.
Heimer AI
We built Heimer AI to be more than just a stats display. It's a personalized League of Legends coach (although we aren't liable if he roasts you!), capable of interpreting performance data, identifying improvement areas, and providing context-aware insights. Heimer AI shows us three major functions, each expanding its functionality and intelligence.
- Navigation & Assistance:
The initial Function of Heimer AI served as a help and navigation assistant, guiding users through the platform. It provided context-sensitive support, helping users locate match reports, interpret metrics like EPS and Gold Efficiency, and navigate between different data visualizations. This was our foundation for user interaction and experience. - Match Analysis & Performance Insights:
The second function introduced data interpretation and personalized feedback. Heimer AI began analyzing performance metrics such as End of Game Performance Score, Gold Efficiency, and Power Rankings Over Time to deliver actionable insights. For example, it could highlight that a player’s Combat Score lagged due to poor kill participation or inefficient gold usage, and recommend playstyle adjustments. This made post-game analysis more meaningful, connecting raw numbers to strategic takeaways. - Champion Intelligence & Trend Analysis:
The latest function extended Heimer’s capabilities to champion-specific coaching. By aggregating a player’s performance data over multiple games, Heimer AI identifies long-term trends, like how well a player performs on Lux versus Ahri, or whether their Power Score peaks earlier or later than average for their champion. It combines End Game Performance, Cumulative Power Score, and lane matchup outcomes to build an evolving understanding of player mastery. - Execution: Heimer AI integrates with Amazon Bedrock to leverage LLM-powered interpretation, feeding in structured game data, player progress, and computed metrics from our match analysis pipeline. The system combines Riot’s match timeline data with our derived statistics, allowing Heimer to explain not only what happened, but why, and how to improve next time.
Minor features
- We let you track which champions you want to improve on to view later!
- We add themes from different regions and a toggleable nostalgia League soundtrack out of our love of the game and its lore :)
How to Use Rift Rewind
Step 1: Create Your Account
- Visit the landing page
- Click "Start Analyzing"
- Sign up with your email and password
- Go to your email (check spam if needed!) to verify your account.
Step 2: Link Your League Account
- A popup will appear asking for your Riot ID
- Enter your Game Name (e.g., "Hide on bush")
- Enter your Tag Line (e.g., "NA1")
- Select your Region (Americas, Europe, Asia, etc.)
- Click "Link Account"
- Wait 2-3 minutes while we fetch your match history (we are rate-limited by Riot API)
Step 3: View Your Dashboard
- You'll see your personalized dashboard with:
- Your top champions by mastery
- Your recent 10 matches
- Click any champion card to see detailed stats
- Click any match card to see full match breakdown
- Click "Load More" to see additional matches
Step 4: Analyze Your Champion Performance
- From the dashboard, click on any champion
- View your performance statistics:
- Win rate, KDA, EPS/CPS scores
- Performance trends over time
- Recent matches with that champion
- If you have 2+ games, click the Heimerdinger button (floating on right)
- Wait for AI to generate your personalized analysis
- Click "View Full Analysis" to see complete breakdown
Step 5: Get Champion Recommendations
- Click "Learn Champions" from the navigation menu
- View your top 5 AI-recommended champions
- Click any recommendation card to see:
- Why this champion suits your playstyle
- Ability comparisons with champions you play
- Click the star icon to track champions you want to learn (max 5)
- Click "View Your Stats" if you've already played the champion
Step 6: Track Your Progress
- Your tracked champions appear at the top of the recommendations page
- Play games with your tracked champions
- Return to view your updated progress and statistics
- Remove champions from tracking by clicking the star again
Step 7: Ask Questions
- Look for the Heimerdinger icon in the bottom-right corner (available on most pages)
- Click it to open the AI assistant
- Ask questions about features, stats, or recommendations
- Get instant answers to help you navigate the app
Architecture
We built Rift Rewind as a full-stack application with a clear separation of concerns, following industry best practices.
- Our backend was built with Python and FastAPI, using Pydantic for data validation.
- Our frontend was built with TypeScript and React + Vite. Data visualizations were all done with Chart.js.
- We used Supabase as our database for account authentication, account information, and summoner data caching. This was especailly useful for row-level security and user authentication with JWTs.
- Our key features, the champion recommender graph analysis was performed on Amazon SageMaker, while the pair-wise comparisons and in-site companion Heimer was performed on Amazon Bedrock (using Anthropic's Claude 4.0 Sonnet model). Without these platforms we would not have been able to complete these key features.
- External APIs: We integrated the official Riot Games and Data Dragon API to fetch all necessary League of Legends data, including summoner profiles, ability descriptions, champion images, match histories, and detailed match timelines.
Challenges we ran into
Riot API rate limiting was a huge factor that limited both real-time inference in the app as well as building our recommendation models.
- The rate limiting meant that the user would have to wait a long time before our backend could download all 100 past games. To solve this, we fetch 10 games first, display this, then load the rest of the games in the background.
- It also meant that the depth first search for the champion recommendation took hours to download enough data from the player base. Unfortunately, there was no easy work around for this.
LLM prompts were fast, but not at the scale that we were doing for the ability similarity calculations.
- According to our estimations, running 200,000+ prompts would on average literally take days.
- To get around this, we ran multi-threading operations to perform queries concurrently, shortening this to only a several hours.
LLM outputs were not as we expected, for both Heimer AI and the pairwise ability calculations.
- Crafting the right prompts for the LLM was a significant challenge. It was a struggle to go from generic, unhelpful responses to the specific, insightful, and actionable feedback that we envisioned for Heimer.
- We had to craft evaluation metrics and run the same user prompts with different system prompts to find the perfect one.
- As for the ability similarity calculations, on top of handcrafting the criteria we envisioned for the ability calculations, we also had to make the LLM understand this. This meant adding few-shot prompting examples (hand-labeling the points for some pairs) as well as using Markdown/JSON formatting for the prompt.
What's next for Rift Rewind
We have a clear vision for what's next.
- We'd like to analyze more granular in-game events, such as gold swings after objectives, efficiency of rotations, and distinguishing "good deaths" vs. "bad deaths" to provide even more nuanced feedback.
- We'd like to train a more dedicated machine learning model (e.g., using clustering algorithms) to identify similar champions based on statistical play patterns, complementing our current LLM-based approach.
- On a more fun note, we'd also like to try voice cloning of Heimer so that he can vocally say the lines that our AI outputs!
Thanks for looking through our project! We really enjoyed making it :)
- Ethan, Jessica, William and Zac
Built With
- amazon-bedrock
- chart.js
- fastapi
- python
- react
- riot-api
- sagemaker
- supabase
- typescript
- vite


Log in or sign up for Devpost to join the conversation.