Angelos Theodosiadis

← Projects

Metallio — Fitness Analytics

· active

Self-hosted training analytics for endurance athletes, built only on open, peer-reviewed sports science.

  • Go
  • React
  • TypeScript
  • PostgreSQL
  • Docker
  • Capacitor

What it does

Metallio takes workouts from any device — .fit, .gpx and .tcx files, a direct import from a watch over USB, or a Strava sync — and turns them into analysis for running, cycling, swimming and more. It runs in the browser today, and as iOS and Android apps built from the same code.

What makes it different

Every number it shows maps to published science, computed from the athlete's own raw signals: Daniels–Gilbert and Riegel race predictions, DFA-α1 heart-rate-variability thresholds, Minetti grade adjustment, Banister training load, Maunder and Jones durability. Changes are reported with their measurement uncertainty, not as bare trend lines.

Just as deliberately, it leaves out the proprietary scores it cannot reproduce or defend — Training Effect, Body Battery, recovery scores. If a number cannot be traced to a method, it does not appear.

How it is built

  • A Go API and separate Go workers for file parsing and analytics, standard library first.
  • PostgreSQL as the single source of truth, including the background job queue.
  • Every uploaded file kept unchanged, so any activity can be reprocessed as the science improves.
  • A React dashboard that doubles as the native mobile apps, through Capacitor.
  • Each component in its own container, the whole stack running locally with Docker Compose.

Why I built it

I wanted to understand my own running and training — in a way that meant something and that I could act on. What the platforms in the field offered instead were proprietary scores I could not check, and AI-generated summaries that sounded insightful but told me nothing useful.

So I built the analysis I was missing: every number grounded in published research, computed from my own data, and honest about how certain it is.

← All projects