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
.icsfeed - Caches the data and serves it from a public
/calendar.icsendpoint
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
.icsformatting 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.
Log in or sign up for Devpost to join the conversation.