← THE BUILD LOG
003HOMELAB · STILL BUILDING

The warehouse behind the charts on this site

A worn notebook and a pencil stub on black gym flooring, chalk dust around them.
A worn notebook and a pencil stub on black gym flooring, chalk dust around them. Illustration.

What it is

Hevybi reads every set I log, builds a layered warehouse out of it, and puts a command line and a dashboard on top. Volume by muscle, by week, and a designer for what to do next.

It is also the source of the charts on this site. The grids on my profiles and the numbers on the data page come out of it, which is the only reason they are true.

Why I built it

The app I log in is good at recording a session and not interested in the question I actually have, which is whether the last three months added up to anything. Any answer to that is a query across a year, and the app does not think in years.

The designer came second and for a less respectable reason. I wanted the plan to argue with the data rather than with me.

The problem

Nothing about the data is clean. Exercises get renamed, the same movement appears under three names, a session gets logged twice, a week gets missed and the gap means something. So the warehouse is layered on purpose: raw as it arrived, then conformed, then the aggregates the charts read. Each layer can be rebuilt from the one below, which means a mistake in the mapping is a rebuild rather than an archaeology exercise.

The thing I am most pleased with is smaller than that. It ships a demo mode that generates 32 weeks of plausible training, so the whole thing runs with no account and no key. Anything with a private API and no demo path is a tool only its author can use, and I have written several of those.

What I learnt

Keeping the raw layer costs almost nothing and saves you every time. I have changed how a muscle group maps more than once, and each time it was a rerun rather than a loss.

The other lesson is about visible gaps. The charts show the weeks I missed, and there was a moment where hiding them was tempting because it would have looked better. I left them in because the missed weeks are the part that took something to admit, and a chart I had tidied would be no use to me the next time I wanted to know the truth.

What’s next

Still being built. The near work is the workout designer, which currently knows what I have done and not enough about what I should do. The bike has no equivalent at all yet, and it should.


Built with Python, DuckDB, uv
Code On my own git host, so there is no link. The writing is the record.
JOHN · #AlwaysBuildingSomething