Roster
Free coaching tool · League of Legends · amateur teams · EUW

Nobody tells you they are drifting away. The last game they played does.

Roster is a coaching tool for amateur League of Legends teams: five to ten players and a coach, joined by private invite. It is built by a volunteer coach for his own amateur team, to replace the spreadsheet and the Discord threads he was maintaining by hand. It reads the games the players already play, so the three to five hours a coach actually has each week go to the team rather than to data entry.

  • Free, no ads
  • Anyone can create a team, players join by invite
  • No public profiles
  • No leaderboards
  • Riot data, team-internal
Who it is for

A coach with an evening job and five players who are not always there

I never ask what my mid's CS per minute is. I ask whether we will be five on Tuesday at nine. the coach who built Roster

An amateur roster is not a professional one. Nobody is paid, nobody reviews the full VOD, and the coach works in fifteen minute blocks from a phone between Monday and Thursday. Most of that time goes to logistics: who has stopped playing, who missed the last two evenings, whether there will be five players tonight.

The competition is a Discord server and a Google Sheet, and they work. So Roster only asks for what a spreadsheet cannot do: read the games the team already played and turn them into the few facts a coach acts on. What is left to write is written where it is useful, on the game itself, in a few sentences.

What a player has to do: create an account, enter their Riot ID once, and that is the whole setup. They never fill in a form, never report a result, never maintain anything. The one time the app asks them for something is after a game, when the coach requests feedback: a link in Discord, a few sentences, nothing to keep up to date afterwards.

What it does

What the coach reads, and what nobody has to declare

Each entry below states what a coach sees, and where that comes from. The right-hand column is the design rule of the product: anything a Riot API can answer is never asked of a person, and what is left to write has to be worth the minute it costs.

An evening the coach opens, a game at a time

The coach starts the evening from one button and picks its type: flex, scrim or tournament. Game 1 exists before it is played, so the win conditions can be written while they still change something. The ranked matches then attach themselves to the game he created. If a synchronisation is missed, the unattached match is offered on the game it belongs to, not on the evening as a whole. Custom games are not exposed by the Riot API, so on a scrim or a tournament the coach types the score.

Source
The coach: start, type, win conditions
Match-V5, attached on sync
Opened by hand, filled in on its own

Who is playing and who is drifting away

The roster is sorted by the oldest last game, so the player who has stopped playing is at the top rather than buried in an average. Next to each name: their last game across all their linked accounts, and their attendance over the last eight sessions.

Source
Match-V5, last ranked game
Desktop agent, local presence
Automatic

Champion pools derived from ranked history, not from a form

A pool a player fills in on sign-up day is out of date a month later, and it is the stale one a coach would read before a draft. Roster derives the pool from the recent ranked games instead: champions actually played, by role, with games and win rate.

Source
Match-V5, queues 420 and 440
Data Dragon, champion names
Automatic

The picks your own players struggle with

Rather than a meta tier list, the preparation view looks at the team's own ranked history: which champions each player actually wins on, which ones they keep losing on, and which roles have no depth at all behind the starter.

Source
The team's own stored matches
Automatic

The game is the unit of work, not the evening

Each game carries the win conditions written before the launch, the observations taken while it ran, and the conclusion written once it ended. An evening of five games is five short records rather than one long one, because that is the grain at which a decision was actually made or missed.

Source
The coach, before and after each game
Typed by hand

Five answers, written without reading each other

At the end of a game the coach asks his players for feedback. Each one gets a link in Discord, opens the game with the win conditions the coach had set, and writes a few sentences. A player only sees the other answers once his own is in, so the first to speak does not steer the four others the way he does in a spoken round. The coach then reads the five side by side with his own observations.

Source
The players, one answer per game
Typed by hand
Interface

Two screens

Design mockups of the interface currently being rebuilt, rendered here with the product's own component system. Names, ranks and results are sample data.

The roster Sorted by the oldest last game, so the player who is drifting away comes first.

Roster

5 starters · 2 substitutes Sort by role Invite

Members

7 Oldest last game first, unlinked accounts at the bottom
Player
Last game
Attendance
Riot accounts
Role
Status
AUAube
12 d ago
3/8
Aube #EUW
SUP
Starter
NYNyko
9 d ago
5/8
Nyko #EUW
ADC
Starter
NANael
6 d ago
4/8
Nael #EUW
JGL
Substitute
KAKaelys
4 d ago
7/8
Kaelys #EUW+ 1 account
TOP
Starter
VYVyx
2 d ago
8/8
Vyx #EUW
JGL
Starter
SOSorren
yesterday
7/8
Sorren #EUW+ 2 accounts
MID
Starter
THThéo
No linked account
2/8
None
SUP
Substitute
In game Online Offline Presence not measured for 3 players without the agent
11 accounts followed for 6 of the 7 members. Théo has linked none: neither his games nor his rank are read, only his attendance is recorded. Last game and attendance are computed across every linked account of a member.

Scroll sideways to see the full screen.

A session Every evening the coach opened, game by game, with what the team said about each.

Sessions

12 sessions · last one Jul 15
New session

July

7
Date
Type
Opponent
Result
Games
Latest conclusion
Jul 15
Scrim
Vertigo Academy
3-2 No Riot match
5
The pit falls every time we give up the wave
···
Jul 14
Flex
Various opponents
3W 2L
5
We recall late and lose the wave twice
···
Jul 12
Tournament
Sablier Gaming
2-0
2
Closed both games before 30 minutes
···
Jul 10
Scrim
Les Ourses Blanches
1-3
4
Drake taken without vision, three times
···
Jul 8
Flex
Various opponents
2W 2L 1 match to attach, game 3
4
No conclusion yet
···
Jul 5
Tournament
Les Ourses Blanches
1-2 No Riot match
3
No counter-engage in the draft for Aube
···
Jul 2
Scrim
Vertigo Academy
2-2
4
Rotations after the bot turret arrive late
···

June

5
Jun 28
Scrim
Les Ourses Blanches
2-3
5
Objectives taken without a pushed wave
···
Jun 25
Flex
Various opponents
4W 1L
5
No conclusion yet
···
Jun 21
Tournament
Sablier Gaming
0-2
2
The side lane held until the herald
···

Scroll sideways to see the full screen.

Riot APIs

What Roster calls, and why

All calls go to the europe routing value and to the euw1 platform. A player may link several accounts; their statistics are aggregated across them.

Account-V1Once, at account linking
Resolves a gameName#tagLine entered by the player into a PUUID. It is the only place where a player types a Riot identifier.
Summoner-V4 · League-V4Scheduled, daily
Current rank of each linked account, so the coach sees the roster's level without asking for a screenshot. One refresh per account per day, plus a manual refresh capped at once per hour and per account.
Match-V5Scheduled, incremental
Ranked history, queues 420 and 440. This single feed produces three things: the champion pool derived from what players actually play, the last game of each member, and the matches that attach themselves to the games the coach opened, matched on the linked accounts and the start time. Custom games are not exposed by this endpoint and are never requested.
Data DragonOn version change
Champion names and images. Cached on our side, never fetched per page view.

Traffic profile. Expected scale is a few dozen teams and a few hundred linked accounts within a year. Requests come from two scheduled jobs, a daily rank refresh and an incremental match sync, both globally rate limited and cached in Redis. Application screens read our own database and never call Riot directly, so page views do not generate API traffic.

The desktop agent. An optional Windows tray application reads the player's own local client to show presence, that is whether a teammate is online or in a game. It never contacts a Riot endpoint, and the product works without it. Every member is free not to install it; the roster simply reports that presence is not measured for them.

What Roster is not. No public profile, no player search, no leaderboard, no MMR estimation, no betting, no gameplay automation, no paid tier. Users only ever see their own data and their teammates', inside a team they joined by invitation.

Privacy policy

What Roster keeps, and what it deletes

Roster stores the minimum needed to show a team its own games. Data is strictly team-internal: a member sees their own data and that of the teammates in the teams they belong to, and nothing else. Nothing is sold, rented, shared with a third party, or used for advertising. There is no advertising and no analytics on this page.

Stored

  • The PUUID of each linked Riot account
  • Its game name and tag line
  • Its current rank, refreshed daily
  • Match data for the linked accounts: date, queue, duration, champions, result and per-player statistics
  • An email address and a password hash for signing in to Roster
  • What the team writes: win conditions, observations and conclusions from the coach, feedback from the players

Never stored

  • No Riot password, ever
  • No Riot sign-in credentials of any kind
  • No data from accounts that were not deliberately linked
  • No data belonging to players outside the team, beyond what a match already contains
  • No tracking across other sites, no advertising identifier

Deletion

  • Unlinking a Riot account deletes that account's Riot data: PUUID, identifier, rank and matches
  • Deleting a Roster account deletes everything attached to it
  • Deletion is available from the account page, without asking anyone
  • A team's coach can remove a member, which ends that member's access to the team

Riot account linking is manual and explicit: a player enters their own gameName#tagLine and confirms. A player who links nothing keeps a working Roster account, with no Riot data attached. Questions about your data go to the contact address below, and are answered by the person who wrote the code.