Gym Rat, my Notion powered fitness app (that works on my TV!)
I built my own workout app that runs on my TV, all powered by a Notion doc. You can find the source code on Github and contribute if you’d like.
I got into fitness shortly after my first daughter was born. My fitness goal ever since has been able to carry my children to bed every night (if they want), because once they’re too heavy to do that I’ll never be able to again. I used to go to a gym I loved, but when we moved I had difficulty reconciling my fitness goals with everything else going on in life. My requirements were:
- Work out on a schedule that works for me. My original gym ran a class from 5:30-6:30AM (😱), Monday Wednesday and Friday. Learning to wake up early was new for me but getting used to it was a one time cost. The upside was real “me” time, before all the needs of daily life literally awakened around me.
- Mix it up. My classes were a mix of cardio and strength training. There was a similar subset of moves but mostly there were stations based on time. Ideally I could ask an LLM to generate a new workout for me.
- Flexible sets between time and reps and both. Sometimes I would want to do something rep based, like a pull up challenge. I played around with Future, for example, which also did a mix of time and reps. Quite often I might want something like “repeat doing 10 jumping jacks and 5 burpees for 40 seconds.”
I had a hard time finding anything that quite met my needs. Orange Theory and the local gyms nearby were close, but didn’t fit my schedule. Gyms like Anytime and Planet Fitness were great if I knew exactly what I wanted to do, but didn’t feel motivating to me.
I decided to build out a home gym to optimize for my first requirement, since I figured the other two would be easy enough to find online. Surely someone had made a good fitness timer along these lines, right?
Turns out no. The landscape of fitness timers out there is checkered and varied. Most free apps were primitive. Many had monthly subscription fees rivaling the cost of a gym membership itself. Most were difficult to program. Everything I looked at were fully closed systems - the timer was also the admin tool.
I set out to build what I want - an administrative system that was flexible and easy and a clean, fun timer that would work well on a phone or (more realistically for me) on a TV. Here’s how I broke it up:
- The CMS. Authoring workouts is done in via two Notion databases: First is a list of moves, which I categorize by equipment. Second is the workouts themselves. Each entry has a database of circuits which references back to the moves. I can organize these into groups of moves as well.
- A web app, built in Next.js and hosted on Vercel. It’s responsive for when I’m on the road, but primarily designed for display at 16:9 resolutions.
- A Kotlin / Android app, which I’ve loaded onto an old Google TV in dev mode. It effectively wraps my web app so I can just open it up a native app, but it also forwards commands so I can go forward, backward, pause, resume and so on using a remote.
In subsequent posts I’ll detail the thinking around each of these pieces, but for now I just wanted to get it out there for others to try and, if interested, contribute to.