Build It Yourself #1: the gym-slot watcher that books my tennis
The studio app is terrible. So George checks it every two hours, proposes one slot that fits my habits, and books it when I say yes. Here’s the brief to build your own.
מי שהגיע מהרשתות — אינסטגרם, יוטיוב, X או טיקטוק — ברוכים הבאים. זה הפוסט הראשון בסדרה חדשה: כל פעם פיצ׳ר אחד של ג׳ורג׳, כקובץ טקסט אחד שמדביקים ל-Claude Code ובונים משהו דומה בערב. חינם. הראשון: הבוט שעוקב אחרי המקומות שמתפנים בטניס ומזמין לי אותם. הקובץ להורדה בסוף הפוסט, השאר באנגלית.
<!–VIDEO–>
A new series
Every week this blog tells the story of George — the AI chief of staff that runs our house on WhatsApp. People keep asking the same question in the comments and DMs: “can I have that one thing?” Not the whole system. That one thing.
So: Build It Yourself. One capability at a time, as a single markdown file. It has the design in fifteen lines, the traps we hit building it (the part that actually costs weekends), and prompts you paste into Claude Code, step by step. You end up with something similar, shaped for your house — not a copy of ours. Free, CC BY.
First up, the one people ask about most on social: the gym-slot watcher.
The problem
My tennis studio uses one of those booking apps. Good slots at my level open and vanish in minutes, usually while I’m in a meeting. For months my routine was: open app, refresh, sigh, close app. Then my tennis partner and I would trade screenshots trying to land in the same class.
What George does now
Every two hours he logs into the studio’s app as me — same login the app on my phone uses — pulls the schedule for the next month, and reads the class rosters. Then, mostly, he says nothing.
That’s the feature. Version one pinged me about every opening at my level. Dozens a week, most at times I never go. It lasted about seven days before I asked him to stop. What survived is a set of rules for when to shut up:
- Habits, not availability. From my own booking history he inferred when I actually go (Tuesday 18:00, Thursday 18:00…). He proposes a slot only if it matches — and only one per run: “a spot opened Thursday at 18:00 — want me to book it?”
- Quota guard. My plan is five lessons a month. At five, he goes quiet; no teasing me with slots I can’t book.
- Week-mute. If my partner and I already share a class that week, no pings that week. The point of the alert — landing in the same class — is already met.
- The rest in one line. Non-habit openings pile up and arrive as a single “for info” summary at 16:00.
When I answer yes, he books it — with a dry-run by default, pre-flight checks, and proof: he re-reads the roster and only says “booked” if my name is actually in it. Then it lands in my calendar overnight, and on Sunday I get a one-message digest of the week ahead, plus the new far week the studio just opened.
Two of the twelve traps (the brief has all of them)
The “am I booked?” flag lied. The class object has a user_booked field. It was always null in our tenant, and a neighbouring is_user field means “is a real account”, not “is me”. The roster is the truth: match your own name against the booked users. Same trick tells you whether your partner is in.
Green isn’t delivered. My partner’s lane went silent for weeks while every run reported success — the script simply had nothing to say and exited 0. Every job now names the artifact that proves it delivered, and the monitor alerts on staleness, not exit codes.
The other ten — the two watchers that logged in at the same second, guessed endpoints, “booked ✅” without proof, the fuzzy month boundary — are in the file, each as symptom → cause → fix.
Get the brief
→ Download gym-slot-watcher.md (17 KB, plain text) · all briefs
How to use it: drop it in an empty folder, open Claude Code there, and say “Read this brief. Ask me the prerequisite questions, then build step 1.” Run the check at the end of each step before the next. Prerequisites are honest and up top: an always-on machine, an assistant framework with a WhatsApp channel (we use OpenClaw), and your own login to a studio app that has a JSON API behind it — most do. It uses the app’s private API with your own credentials for your own bookings, polled gently; that’s what the app on your phone does anyway.
Next in the series: the reminders that don’t rest until you say “done”.
I’m packaging the skills, configs, and gotchas from these posts into a Build Your Own Chief starter kit. Join the waitlist to get it first.
George files his own daily ops reports on X — dry, short, occasionally contrite: @GeorgeRunsHouse.