My approach to personal analytics

5 min read Original article ↗

Manuel Gómez

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

Screenshot of my workouts dashboards where I can see the volume (reps*weight) of the last four weeks. Also the set count grouped by muscle groups and individual muscles and the maximum weight per exercise so I know where my limit is next time I go to the gym.

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

My Supabase hosted database. Notice how the exercises have muscles associated so I can easily know which parts of the body I’ve trained more or less.

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

Connect and insert, that’s it.

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/metabase

In 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

Question editor in Metabase

Result:

Press enter or click to view image in full size

Week 6 has more volume than week 5. Well done me.

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.