Inspiration
We're big fans of LoL and Arcane but had absolutely no experience building a "real" project with AWS. But being the absolute chonky Poros we are, decided to build something immensely enjoyable and beautiful in a span of just 4 weekends. We might have even succeeded, who knows!
We know the best way to put anyone to sleep is by recanting a large number of interesting statistics to them. In our project we focused on insights and presentation to build a shareable "Poroscope" summarizing player performance over the year.
Insight first! Ask questions while Insight-ing!
Data is mostly presented in plain english, wherever we use charts, they're simple and just a card's width. We sacrificed flexibility for engagement, making it super fun to view your performance against three major dimensions.
- Player Carry = We focused on MVP and Skew metrics and used Gini Coefficients for summarizing skewed stats. We made tilt and streak charts, as well as a Github inspired contribution chart for performance.
- Champion Mastery = We used GenAI for cute champion fanart and highlighted important Champion Mastery vs actual Performance stats in a fun and relevant way
- Team Dynamics = We focused on things that you could do better in your team, and things that the team could do better for you
What it does
Deploys Strands Agents using Amazon Bedrock with Amazon Nova:Micro Models in order to perform analysis on data fetched from the Riot APIs. This we discovered keeps costs quite low, while being powerful enough to focus on just a single tool. We use Agent Orchestration where every agent focuses on a unique dimension (structured output) and each insight from individual agent is then collated into a whole.
Data is fetched dynamically (we maxed out on Lambda size and number to orchestrate this and return in time) with a Dynamo DB backed Cache, and is for the user and region specified while signing up. We save a publicly shareable permalink on user click, and we provide a Dashboard with User Account details and Editing.
Basically we took data from all available Riot APIs and used intelligent agents in a coordinated manner in order to make any actual sense of them!
How we built it
Here's a (simplified) architecture diagram. We used the below AWS services backend to frontend (and loved them, honestly, the credits came in super handy!). We did not use any external process or service.

- Lambdas = Honestly where would we even be without serverless? All our processing is done on Lambdas, from validating a Riot ID, to fetching Summoner Profile, to Match Data.. everything
- Strands SDK = This made it super easy to deploy multiple agents on Lambda. We ended up using FIVE agents, orchestrated to form one cohesive insight!
- Amazon Bedrock:Nova Micro = We focused on keeping costs low, and splitting tasks and separating concerns across agents
- Dynamo DB = We cached data and added public access policies wherever the user made a shareable Poroscope.
- API Gateway = We used this for calling the lambdas as a specific resource (we also bypassed it and called high processing time Lambdas directly with authentication backed security)
- Amazon Cognito = We used this for user signup and signin, with custom fields to specify your Riot ID and Region to allow us to fetch data
- Amazon Amplify = Honestly this is probably the goat service, it coordinates between all the other services. The learning curve is steep but the reward is good.
- Amplify UI = We built the frontend using the React+Vite quickstart available in the Amplify Docs.
Challenges we ran into
We had a few challenges on Lambdas timing out. We expected this to happen, what we did not expect was AppSync timeout. So while Lambdas can be timeout specified (600 seconds for us!) AppSync cannot and this turned out to be a showstopper for us. Also we needed compute optimized Lambdas, maybe 16CPU with 2GB RAM, but this was inconsistent so we ended up maxing out on 10GB RAM for the max CPU. We also had trouble customizing Amplify React Components for Cognito Auth. Thankfully AWS is so comprehensive there are multiple ways to achieve something, irrespective of how complicated it might seem in the beginning.
We also faced challenges with rate limiting, since we started development later, we could not apply for a production key in time, so any substantial summoner data would immediately be rate limited (it's tricky navigating 100 requests in 2 mins, please only retain the 20 req/s so we can develop much better using personal api keys)
Accomplishments that we're proud of
We feel like AWS veterans now, capable of shipping anything. While that might not be true we find ourselves with a beautiful presentation of complex data and that in itself is probably the greatest joy anyone may have.
What we learned
AWS is a complicated beast but learning is its own reward! There's multiple ways to do things, and differing levels of abstraction for each of them too making AWS a useful tool for any sort of data driven project. But mostly, we learnt something about ourselves, we love making data look beautiful and delivering actual insights to end users.
What's next
Applying for an Application API Key for Production for sure. The API rate limit is killing us!
Log in or sign up for Devpost to join the conversation.