In this post I want to share the system I’ve been using daily for the last few years to register stuff like my weight or journal entries, and most of all tracking my progress at the gym, so I’ll focus on that.
TLDR: I use a database (PostgreSQL), a fast database client to insert data (Bitacora), and a dashboard solution (Metabase) to make cool charts and it’s great.
End result
Stick with me and this is what you can achieve if you are a crazy person like me:
- Ability to register anything in ~5 seconds. In this case a workout set (with a datetime, exercise type, reps and weight).
- Personalized, interactive and live dashboards that you can look up whenever you want to get insights from your data.
Press enter or click to view image in full size
Why do this?
Just focusing on workout tracking solutions, I get the sense that most share a couple of common drawbacks:
- Subscriptions, subscriptions everywhere: You usually have to pay a subscription to avoid an app riddled with ads and to unlock premium features.
- Data ownership issues: Either you don’t own your data, or if you do, it’s a pain to extract.
While these trade-offs may be acceptable to many, I believe owning your data is incredibly valuable. It gives you the freedom to analyze it in any way you choose and integrate it with other sources, such as nutrition or sleep data — regardless of where they come from. Having that autonomy just feels right.
Setting up the database
I use PostgreSQL because it’s a solid, well-regarded option, though I guess any relational database would work. For convenience, I host the database in the cloud. There are plenty of options: I used ElephantSQL’s free tier in the past (RIP), and now I rely on Supabase, which offers up to two free project databases— the second one comes in handy for the visualization part.
Press enter or click to view image in full size
Inserting data
There are a few mobile database clients (like Remo DB) that include all the features you’d expect, but in my opinion, they’re not very comfortable for quick data insertion. That’s why I created my own client focused solely on one thing: fast, hassle-free insertion.
It’s called Bitacora, and here’s the link for the open test on Android users (iOS support coming soon):
https://play.google.com/store/apps/details?id=com.manugo.bitacora
Shameless plug aside, it comes with some features for speedy input:
- Current date and time preset: Automatically fills in datetime fields.
- Typeahead for foreign keys: Perfect for selecting exercise types.
- Numeric keyboard for numeric fields: Streamlines data entry.
Press enter or click to view image in full size
Press enter or click to view image in full size
Insights visualization
And lastly, the fun part. There are a bunch of dashboard solutions that let you aggregate data from different sources to create charts — think Tableau or PowerBI — but the easiest to use (and free!) I’ve found is Metabase. It’s open source, and I like its nice clean design.
I recommend checking out their docs. With a simple Docker command you can quickly set it up locally, connect to your database and start playing with it.
docker run -d -p 3000:3000 --name metabase metabase/metabaseIn Metabase, individual interactive charts are called “questions,” and you don’t even need to know SQL to create them — you can use a simple visual editor. Of course, if you prefer, you can also write SQL queries directly. Here’s an example of a question that tracks training volume (reps × weight) by exercise type and week, allowing me to monitor my progress:
Press enter or click to view image in full size
Result:
Press enter or click to view image in full size
Create a few charts like this tailored to your needs, and voilà! If you host Metabase in the cloud instead of locally (I pay around $6/month for a GCloud VM instance to run it), you can access it anytime, anywhere. For me, this is invaluable — I can check my progress in real time during workouts, instantly seeing how much volume I have left for a specific exercise that week, which is super motivating.
Conclusion
I highly recommend this approach to anyone looking for an excuse to explore databases, Docker, cloud computing, or data analysis. The flexibility of being able to log and visualize anything you want — without vendor lock-in — while choosing the best tools for each step (input, database, visualization) makes it especially appealing for those with some technical knowledge. And with AI unlocking new possibilities in data analysis, the potential only grows — but that’s a topic for another time. Hope this inspired you. Best!
Edit: I want to thank the suggestion I’ve received of trying to run Metabase with Google Cloud Run since it would be more cost efficient.