https://www.gravatar.com/avatar/aca0e16473affc5e8774274b4c259bcc?s=240&d=mp

Nick Kirsch

twenty-four: gym service

The gym service scrapes the gym website for class reservations. No API, just Selenium clicking buttons in a headless Chrome instance.

It’s ugly, fragile, and works perfectly.

The Problem

My gym has a website where you can reserve classes up to 22 days in advance. Popular classes fill up within minutes of the window opening.

Manual process:

  1. Check website daily for new classes
  2. Reserve the ones you want before they fill
  3. Check back to see if you got off the waitlist
  4. Hope you didn’t miss anything

This is tedious and error-prone. I wanted automation, but the gym doesn’t have an API.

twenty-four: calendar service

The calendar service is the orchestrator. It syncs workouts between Intervals.icu and Google Calendar, creates ICU workouts from gym reservations, and sends notifications when things change.

Written in Go. Runs at calendar.twenty-four.home. Does way too much, but does it well.

The Problem

I track workouts in Intervals.icu. My life lives in Google Calendar. These two systems need to stay in sync, but they don’t talk to each other.

What I needed:

twenty-four: building with claude

I’ve spent too much time interacting w/ screens for my fitness life. Not for the workouts themselves - those still require showing up - but everything around them. The calendar juggling, the gym reservation anxiety, the Strava housekeeping. All of it.

The result is a set of services I call twenty-four (because there are only so many hours in a day, and I’d rather not spend them on administrative bullshit).

twenty-four: the platform

This is the infrastructure that makes twenty-four possible.

The Cluster

k3s on a mix of hardware that was lying around:

Control plane:

  • master - Ubuntu 22.04, x86_64, handles scheduling

Workers:

  • arm1, arm2, arm3 - Fedora Asahi Remix on Apple Silicon (M1/M2 Mac Minis)
  • lab - Ubuntu 24.04, x86_64, old desktop turned compute node
  • brain - Ubuntu 24.04, x86_64, currently offline (it’ll be back)

The ARM nodes do most of the work. They’re fast, quiet, and sip power. The x86 box handles anything that doesn’t have ARM builds yet.

Happy Birthday, Dad

You’d be 85 this year. I often wonder what you’d think of the world if you were alive, and then I have to remind myself that “alive” was really a decade ago (prior to PPA).

I miss you, Dad.