Back to Projects

Building a World Cup Sweepstake Tracker

Every World Cup, a group of us runs a sweepstake — everyone gets a team drawn at random, and whoever’s team goes furthest wins. Normally that means someone manually updating a spreadsheet after every match. This year I built a proper live tracker instead: a Cloudflare Pages site with a Worker backend, push notifications, and a PWA you can add to your home screen.

What it does

The site shows the live bracket, everyone’s team, and how they’re doing, and sends a push notification when your team plays or gets knocked out. It’s a Progressive Web App, so it installs like a real app rather than living as a browser tab, and a cookie remembers which manager you are so it can personalise what you see.

How I built it

I want to be upfront about how this actually got made, because I think it’s the more interesting part of the project: I didn’t write the code by hand. I planned the feature set and picked the general shape of it — the bracket logic, the push notification flow, which APIs to pull fixture data from — and then built the whole thing through my own AI agent setup (I call it Hermes) working with Claude Code.

That’s not a small caveat, it’s the actual point of the project. I described what I wanted, worked through the architecture and trade-offs with Claude, and it wrote and shipped the code — the Cloudflare Worker backend, the push notification system using VAPID keys, the PWA manifest and service worker, the whole thing. Claude also has direct access to my Cloudflare account, so it deploys changes itself rather than me copy-pasting commands. What used to be a multi-weekend side project became something I could build and iterate on in an evening.

I think this is honestly the more useful skill going forward than knowing every API by heart — knowing what to build, how to break it into the right pieces, and how to steer a tool capable enough to build it properly. It’s also why I’ve been able to take on more projects like this one recently instead of just talking about wanting to build them.

The stack

  • Cloudflare Pages for the frontend, deployed straight from the repo
  • Cloudflare Worker as the backend, handling fixture data and push subscriptions
  • Web Push / VAPID for the “your team just played” notifications
  • PWA manifest + service worker so it installs properly on a phone

It’s a small project compared to some of the physics and research stuff on this site, but it’s the one that’s actually being used by a group of people every few days during the tournament, which is its own kind of satisfying.