thumbnail image
  • Home
  • Projects
  • Resume
  • Contact
  • heavymeta|

    A self-hosted fitness dashboard I built and run from a box at home.

    View the code →
    heavymeta| dashboard

    Screenshots use seeded demo data, not real numbers.

    Apple Health, Strong, and MacrosFirst data pulled into one Postgres database and tracked against goals — served over HTTPS from a machine on my home network to any device on it. Flask, Jinja2, Chart.js. No SPA, no cloud, no third-party analytics.

    Tracking my own training and nutrition is what drew me in. The rest is the discipline I bring to enterprise software as a product owner, applied to a project that’s just mine — data integrity and application safety first, resilience and redundancy throughout.

    Engineering

    The decisions

    A deploy that can’t ship a broken commit

    Every commit — and every hot-reload while I’m working — runs the migrations and the full test suite against a snapshot of the production database. The change reaches the live app only on a clean pass, and a pg_dump backup is taken before any migration applies. A bad edit fails the gate instead of the user.

    One write path, many sources

    Data arrives four ways: a manual form, a Health Auto Export CSV, a token-gated JSON API for hands-free automation, and a Strong workout-CSV importer. All four converge on a single upsert behind a unique constraint, so re-importing the same day never duplicates a row.

    CI that stands up a real database

    Every push spins up Postgres and runs the gauntlet: lint, format, type-check, dependency audit, a from-scratch migration build on an empty database, a schema-drift check, and the tests gated at a 90% coverage floor. Tests roll back inside transactions, so they never touch real data.

    Analytics that know when they’re stale

    The dashboard tells today’s number apart from one that’s three days old. A gap in tracking shows as a gap — it can’t quietly masquerade as current.

    A dependency changed its license, so I changed the dependency

    The charting library went non-MIT at its next major version. I moved the app to Chart.js to keep it MIT end to end.

    Built in the open

    This public repo is a sanitized mirror of the private one I deploy from. I refresh it as I ship — an evenings-and-weekends record of working through the backlog, with the AI assistance left visible rather than scrubbed.

    The app

    A glanceable overview; each domain drills into its own page.

    Body page
    Body
    Workout sessions
    Sessions
    Nutrition page
    Nutrition
    Training page
    Training

    Built with

    Python 3.14 · Flask 3 · PostgreSQL 18 · SQLAlchemy + Alembic · Chart.js · systemd · GitHub Actions

    Read the code

    github.com/brianhelfrich/heavymeta_ →
    Built by Brian Helfrich · source on GitHub

Copyright © 2026

    Cookie Use
    We use cookies to ensure a smooth browsing experience. By continuing we assume you accept the use of cookies.
    Learn More