Skip to content
Julien de Magalhaes
All projects
WebsiteLive2026League of Legends

Arena Journey

A Spotify Wrapped-style season recap for League of Legends Arena players

The first slide of the season wrap: "Welcome home, summoner", the profile icon in a glowing ring, and "Your 2026 Arena season" under the summoner's name.

The problem

Arena is League of Legends' small-team, round-based mode, and the usual stats sites barely cover it. A group of friends wanted to see their season the way Spotify Wrapped shows a year of music: what they played, how they won, who they won with. Riot's API only hands out raw match data, a request at a time, under strict rate limits.

What I built

A Next.js 16 site where anyone can search a Riot ID and get a recap hub: a story-style wrap, a one-screen dashboard, achievements, a deep dive and share cards, plus leaderboards and per-champion pages. Behind it, a Fastify API reads only from our own Postgres database, which a crawler keeps filling with Arena matches. A separate gateway service is the only process that holds the Riot keys; it enforces each key's rate limits and serves requests through priority buckets, so a visitor's first fetch is never stuck behind the crawler.

Technical challenges

  • Rate limits as the main constraint. The crawler only does discovery, and every change to it is judged by matches stored per Riot call.
  • A mode that changes under you. Arena moved from teams of two to teams of three, and Riot has changed its queue ids. Team size, team count and queue ids are always read from each match, never hardcoded.
  • Storage. Pages read a trimmed schema that stores only what a page shows. Riot's full payloads are compressed into a separate archive database, so any dropped field can be derived again later.
  • Bad data. Some lobbies report impossible damage numbers. Those games are flagged and kept out of achievements and leaderboards.
  • Privacy. Riot's internal player ids and raw error messages never reach a visitor.

Outcome

The site is deployed and used by the friend group, with open Riot ID search, leaderboards, a full achievement set and shareable cards. Next is a public launch on a production Riot key.

  • Arena Journey's home page: the title over a dark Arena backdrop, the summoner search, the news and a King of the Ring leaderboard with a podium, and the matches and summoners counted so far.
  • A summoner's season hub: the profile icon and level, the 2026 season dates, and five cards to enter the wrap, achievements, dashboard, leaderboards and deep dive.
  • The first slide of the season wrap: "Welcome home, summoner", the profile icon in a glowing ring, and "Your 2026 Arena season" under the summoner's name.
  • The season dashboard on one screen: headline stats and a placement bar, a chart of every game's placement, two calendars of games and best finish per day, the prime-time clock, and tables of finishes and team slots.
  • The achievements page: 4,665 points with a chart of how they grew over the season, the paragon level, the progress per category, and the recently earned, almost there and rarest achievements.