ARAM Academy is an ARAM-exclusive statistics aggregator for League of Legends. We provide leaderboards, rank badge estimates, and champion-level winrates across the entirety of a players ARAM data provided by the Riot API.
Visit us today at https://aram.academy and join our Discord
ARAM Academy is hosted on a t2.medium AWS instance. Our MongoDB instance is hosted on Mongo DB Atlas.
src- Front end UI. Written in React and styled with Material UI.app.jsis the main entrypoint andindex.jsdoes the URL routing.resources.jscontains some hardcoded champion data (e.g. converting DB names MonkeyKing => Wukong). A note about images: webpack grabs and packages images into thedist/staticdirectory. It will automatically pick up any image references you make, but you mustrequire.contextthem (like theresources.jsfile does)backend- Our backend is implemented withexpress. backendAPIRouter.js handles API calls to our ARAM data infrastructure (infra_entrypoint.js) as well as other GET and POST requests for things like MMR from WhatIsMyMMR, current patch from DDragon. We await on our infra calls, but limit the number of concurrent async requests being processed.dist- Images generated from webpacklogs- Error logs generated from infrainfra-infra_entrypoint.jsis the main entrypoint. Calls to Kayn API are sectioned intokayn_calls.js. Utility definitions of enums, constants, and data manipulation functions are found inutils.js.leaderboard_update.jshandles updating the leaderboard on a daily basis. It grabs all high elo games from a recent time period and checks MMR from WhatIsMyMMR.champion_icons.pyloads champion icons from DDragon.models- mongoDB table models
When a user enters their summoner_name, a request is directed to the Users page and a request is made to backendAPIRouter, which calls into processUser of infra_entrypoint. For new users infra aggregates all games available to the Riot API, otherwise the MongoDB record for that user is returned. Users page then refreshes on load depending on if the summoner name is valid or not. Update button runs very similarly - when update is clicked, infra calculates a 'delta' of all ARAM games since the last_processed_game timestamp of this user. These timestamps are attached to the match record data from the Riot API, which we store in MongoDB.
We implement separate React components for mobile UI which are served using the isMobile npm package.
Leaderboard runs separately from our main server, and updates daily overnight.
We welcome open source contributors of all types! Please join our Discord community and our team can help with setup.
-
Install
node.js -
Install node dependencies with
npm install -
Install
nodemonglobally withnpm install nodemon -gin same directory -
Whitelist IP in MongoDB Atlas project
-
Start server with
npm run start -
Create a
.envfile in the root folder with the following definitions. For keys and DB URIs please either make your own or contact us in the ARAM Academy Discord.
RIOT_API_KEY=key
DEV_MODE=dev
DB_URI=uri

