Apologies for the brief blips in uptime! Was pushing out some minor changes to add in logic for the start of the new 2026 season, and there were some unexpected issues with the site deployment.
This should be resolved now!
Apologies for the brief blips in uptime! Was pushing out some minor changes to add in logic for the start of the new 2026 season, and there were some unexpected issues with the site deployment.
This should be resolved now!
This change is being deployed now!
Regardless, I think the last thing to fix is ensuring a leaderboard containing a player with no valid PUUID can still refresh correctly (just ignoring that player) so that they don't break the whole leaderboard.
With a bit more fine-tuning of the script and running it for longer (ie. through more of the matches stored by Riot), it seems possible to recover a few more PUUIDs, but a lot of these leaderboards are inactive.
There were approximately 300 summoners with "dangling entries" where their PUUID was unresolvable via simple lookup.
I wrote a script to go back through related players' match histories to try to search for games with both players in them, and this was able to resolve ~200 of those records.
Pushed another change that should fix the issue with new leaderboard creation. At this point I think the site is back to normal, with the possible exception of some users who name-changed after the last time they refreshed on the site, leaving them PUUID-less (investigating ways to solve this).
I noticed some entries in the database were missing PUUIDs (the new identifier that I needed to migrate to), so I wrote a quick script to backfill whatever values were possible โ this should help "fix" more refresh problems.
Fix for leaderboard creation is still pending.
I've pushed a new release that appears to fix refreshes for existing leaderboards.
There's still a small issue with trying to create new leaderboards, but I figured it was better to push out a smaller change that fixes the majority of usage while figuring out the issues with the rest.
Someone just informed me that data refreshes have been broken since around June 20 โ it turns out that a Riot API endpoint that zeal.gg relies on was removed, and I didn't receive the announcement of the deprecation.
I'll be working on a fix for this over the next few days.
Looks like OP.GG changed its summoner-search URL format a few days ago, which broke the way that zeal.gg links out to people's profiles on the leaderboard page.
This should be fixed now (thanks to the anonymous Reddit user who reported this bug to me)!
Once I do a bit more testing, I should be able to launch support for VN and TW as well, assuming the Riot API access works the same as it does for everywhere else.
The site did not support SEA until now because back when the SEA servers were run by Garena, the Riot API did not return any data for the region, and I didn't realize that Riot took over server management from Garena back in 2023.
Thanks to the Reddit user who pointed this out to me!
Support for the SEA region has just been added to zeal.gg!
I've also been noticing some 500 errors coming back from the Riot API appearing in logs. As far as I can tell, these are sporadic errors from Riot's end, and retrying usually fixes things.
I'll throw some simple retry logic onto the backlog.
Embarrassingly, it seems like ever since Riot changed accounts to be tag-based, name-updates have been broken on zeal.gg (data was being updated correctly, but names were not changing on the site).
This should now be fixed!
Partial screenshot of the Los Ratones leaderboard on zeal.gg. It shows all datasets stopping at January 9, and a cyan dot much further down the y-axis for January 10, which corresponds to Rekkles starting to play his placement games for 2025 and being placed in Diamond.
Pushed an improvement to how season resets are being handled. The backend should now understand if two "rank entries" span the new season boundary, and the frontend will represent this graphically by creating a discontinuity in the line graph.
I also bumped up the Redis instance on Heroku to accommodate the extra load that the site has been experiencing.
(I happened to notice some 500s being reported, and it was due to the RQ workers not being able to establish a connection to Redis due to the max client cap being reached.)
Partial screenshot of zeal.gg display Caedrel's rank between December 13 and December 25. The tooltip is pointing to the December 25 datapoint and reads "Master (245 LP) โข 7Wโ2L" (showing the new win-loss record display), and the line extends horizontally off the left side of the screenshot with no additional dots, indicating that no games were played in this period.
Made a few quality-of-life improvements that were long overdue, such as showing the daily win-loss record on the tooltip when hovering on the chart, and removing data points from the graph on days where no games were played.
Caedrel looked at the custom @zeal.gg leaderboard I made for Los Ratones on-stream during his Challenger climb today!
It was super exciting to see him pull it up in front of >16k viewers on Twitch and play around with it, even if it was just for a couple minutes. ๐
I'd also like to localize into other languages, prioritizing Japanese (since that's where most of my audience is), but I want to do this properly rather than rush it.
Fortunately, I intentionally used minimal writing in the UX, so I like to think it's fairly useable regardless of language already.
One thing that will be much harder to build due to zeal.gg being written as a React SPA is dynamic OpenGraph images, which would allow link previews to render the chart.
This would be super nice, but involves figuring out how to prerender these images dynamically on the backend.
There are a few roadmap features that I'd like to build soon:
- One-click exports of the chart image for easy social sharing.
- Custom date range picker to better visualize "climb challenges" (to hide months of past data from the graph).
Added "example leaderboards" to the home page that appear if you have no starred leaderboards, which hopefully make it easier for people to figure out what @zeal.gg is about on their first visit.
Currently using Los Ratones as an example "group leaderboard" and Faker for a "solo leaderboard".
Going to try using Bluesky as the new place to make announcements about zeal.gg going forward!