Gamer · Juan Julio · @juanjulio001

Kalista ADC gameplay, Emerald

Full League of Legends games and short clips from my Kalista ADC games in Emerald. The numbers below come straight from YouTube, refreshed every three hours. How this page gets them is further down.

Subscribe on YouTube
views, all time105,697
videos208
subscribers16
uploads this week8

Browse by matchup

All recent uploads 8 uploads this week

Day by day Change from the day before

Fri, Oct 300 views · 0 subscribers
Thu, Oct 29+928 views · 0 subscribers · +2 videos
Wed, Oct 28+7 views · 0 subscribers · +1 video
Tue, Oct 27+11 views · 0 subscribers · +3 videos
Mon, Oct 26+15 views · 0 subscribers · +1 video
Sun, Oct 25+5 views · 0 subscribers · +1 video
Sat, Oct 24+4 views · 0 subscribers
Fri, Oct 23+49 views · 0 subscribers
Thu, Oct 22+1,567 views · 0 subscribers · +1 video
Wed, Oct 21+1,461 views · 0 subscribers · +2 videos
Tue, Oct 20+2,312 views · 0 subscribers · +4 videos
Mon, Oct 19+3,878 views · 0 subscribers · +3 videos
Sun, Oct 18+507 views · 0 subscribers · +3 videos
Sat, Oct 17+2,510 views · +2 subscribers · +4 videos

How it works

Copied Oct 29, 2026

A web page can’t ask YouTube for numbers on its own without putting an API key in its source, where anyone can copy it. So the asking happens somewhere else: a small Cloudflare Worker, the same one that already runs this site’s house TV board and the Substack feed on the writing page.

  1. Every three hours, the Worker wakes itself up. A cron trigger runs it at 17 minutes past midnight, 3, 6 and so on (UTC). No one has to visit the page, and my computer doesn’t have to be on.
  2. It asks YouTube three questions. One call for the channel’s subscribers, total views and video count, one for the list of its latest uploads, and one for each upload’s views, likes and length. Each call costs one unit of YouTube’s free daily quota of 10,000, so the whole day costs 72.
  3. It writes the answer down. The latest snapshot goes into a small SQLite database on Cloudflare (D1), along with one row per day, which is where the day-by-day changes above come from. If YouTube doesn’t answer, nothing is overwritten and the last good snapshot stays.
  4. This page reads the snapshot, not YouTube. Your visit costs YouTube’s quota nothing, and a busy day on the site can’t use it up. Cloudflare also keeps a copy at the edge for five minutes, so most visits don’t even reach the database.
  5. At least once a day, a copy goes into the page itself. A GitHub Action asks the Worker for the snapshot and writes it into this page’s HTML. That copy is what search engines, link previews and browsers with JavaScript off see; with JavaScript on, the script swaps in the live numbers a moment after the page loads.

The key the Worker uses is a plain YouTube Data API key, stored as an encrypted secret on Cloudflare and never in this site’s code. It can only read public data: it can’t sign in, upload, or change anything on the channel. The uploads themselves come from a separate program on my own computer that has its own sign-in and its own quota, so this page can never get in their way.

All of it runs on free plans. Cloudflare’s free tier covers the scheduled job, the database and the requests with a lot of room to spare (how much, live), and on that plan going over a limit makes requests fail until the next day instead of sending a bill. The Worker keeps only the last 40 days of the channel’s numbers; every day is kept in this site’s repository, as a CSV.

Two things on this page are YouTube’s rules, not mine. The public subscriber count is rounded to three significant figures, so 12,345 shows as 12,300. And “Short” here means an upload three minutes long or less, which is YouTube’s own limit for one.

The code is in the worker folder of this site’s repository on GitHub, along with the setup steps.