Power Rankings Hackathon Project
Inspiration
As a dedicated gaming enthusiast, the Power Rankings Hackathon instantly caught my attention. The rise of esports and its parallel with traditional sports, especially in the realm of analytics, fascinates me. Unlike regular sports, esports data is inherently digital and structured, making it more accessible and easier to work with. This hackathon presented a unique opportunity to dive into this data-rich world and envision the future of esports analysis applications.
What I Learned
Working with a 700GB JSON dataset from 2023 was both intimidating and enlightening. It took me a full week to fully grasp the structure of the data, parse it, and ingest it into a local Postgres database. This process was crucial for building meaningful queries to drive the application's interface. The journey was fraught with challenges, particularly ensuring data integrity from the source and within my own code. Despite these hurdles, the project opened my eyes to the endless possibilities and potential screens that could be built for esports analysis.
Building the Project
I aimed to create an end-to-end application, leveraging technologies I am well-acquainted with:
- Frontend: NextJS
- Backend: NextJS
- Database: Postgres
The goal was to develop a comprehensive API to power a dashboard-style analysis application, providing insightful and valuable information for esports enthusiasts and analysts.
Rankings System
Depending on the type of ranking / comparison that was being done, I would implement a different algo depending on the needs
Tournament Ranking
This was one of the more "simpler" ones, as the scope of data would be less, Team performance was based off each player, based on various stats such as
- Gold earned
- Champions killed
- Minions killed
- Team wins
- Deaths (This would induce a minus in their points)
And a few other metrics, I would have liked to include baron control though I did not have the time to do it, So all of these metrics would be added up for each player, and "points" are awarded depending on how much as a whole the team was able to accumulate
E.g
- For every 1000 gold earned it could be 10 points
- For every death, 1 point would be educated
Due to the differences in the number of games, and time constraints, I decided to use a naive averaging system, Where team's total score would be averaged based on the number of games that the team played
The end result would be an "Average points per game" - the higher this result was - the higher the team's ranking would be.
Improvements on this
- I would have liked to include the teams ELO rating into consideration here, but due how I had to stitch the whole app and work on other parts I was constrained with time
Team Ranking
- This used the same calculations as the algorithm above
Global Ranking
This used the same metrics as tournament rankings to get a teams "Average points per game", Though I also added in the elo rating into consideration,
Teams start with a base ELO of 1500, If they lost to another team they would lose ELO rating, and a win would increase this,
Then if a lower rating ELO team won against a higher rated won, the points earned / lost would be greater depending on different threshold gaps,
Once all the data was parsed for the history of 2023 - this would result in their final ELO rating
Challenges Faced
Embarking on this journey solo and joining the hackathon mid-way posed significant challenges. My aspirations for the project were high, and the time constraint added an extra layer of pressure.
Additionally, revisiting AWS, a stack I had not used extensively in recent times, proved to be a learning curve. I had to brush up on my knowledge of security groups to ensure seamless communication between different parts of the application, as well as with external servers. This was essential for serving an API that could meet the needs of users.
My initial understanding of "rankings" was very naive at first, and I thought it would be a simple system, though as I dived more into thought about considerations, such as differences in the number of games played, what happens when a lower rank team beats a higher rank team etc? I started to understand how much of a difficult task it is indeed.
Parsing the data so I could store it in the DB took some time, honestly almost a week of effort was put into understanding, and trying to sanitize the data as I found that there were some discrepancies with some players from the mapping_data.json not being found in the players.json - so I would create a player "in their place" to try and keep the data as intact as possible
Given more time
I hope the application I built portrays the concept of what I was trying to achieve, The amount of details stats that could have been provided for a single resource such as a player, a game, a champion were endless - and I wanted to try and cram in as much as possible
I would have loved to have incorporated A.I into a match prediction model, or even a concept of where users would select teams, and generate their own "tournament" and the A.I would be able to predict possible outcomes based on the rosters and teams recent performance
Essentially this could open up doors for a "Dream team" concept - which is popular in many sports today
Conclusion
Despite the challenges and steep learning curve, this hackathon was a remarkable journey. It allowed me to merge my passion for gaming with my technical skills, culminating in a project that I believe has the potential to contribute meaningfully to the world of esports analytics.
Built With
- javascript
- nestjs
- nextjs
- node.js
- postgresql

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