About This Project

🏋️ Inspiration

I love taking fitness classes at my gym, but the booking process was frustrating. The gym website lists dozens of classes I don’t care about, and checking them against my availability meant constant back-and-forth with my personal Google Calendar. I wanted a smarter way to see just the classes I’m interested in—only when I’m free to attend.

🧠 What I Learned

This project helped me dive deeper into:

  • The iCalendar (.ics) format and how calendar feeds work
  • Structuring background tasks to keep feeds updated without excessive API calls
  • Working with third-party APIs that are undocumented but publicly accessible
  • Deploying a real-world utility with just a backend and no database

🛠️ How I Built It

I used Bolt.new to create a backend service that:

  • Fetches class data from the Gym's API (based on my member ID)
  • Transforms it into an iCalendar-compliant .ics feed
  • Caches the data and serves it from a public /calendar.ics endpoint

The feed can be subscribed to in Google Calendar to see classes overlaid with my personal schedule.

⚠️ Challenges I Faced

  • Figuring out how the gym's Vue app sourced its data (network inspector FTW!)
  • Handling .ics formatting correctly to avoid parsing issues in calendar apps
  • Ensuring the API remained unauthenticated and stable over time
  • Deciding on the right caching interval to avoid hammering the API while keeping data fresh

✅ Outcome

Now, I have a live-updating feed of my preferred gym classes directly inside Google Calendar—instantly visible next to my work and life commitments. Booking is now informed, efficient, and stress-free.

Built With

Share this project:

Updates