Skip to content

Repository files navigation

TrainDash

Build License: AGPL v3 Python 3.12 React 19 Docker

Warning

This software is under heavy development. APIs are unstable and breaking changes happen without notice. It is vibe-coded — built fast with AI assistance — which means it works, but carries all the bugs and rough edges that implies. Use it for personal exploration, not production workloads.

Self-hosted fitness analytics for cyclists and endurance athletes. Analyze your training data with interactive maps, performance charts, and personal records tracking.

Dashboard

Features

Activity Management

  • Upload and parse Garmin FIT files directly
  • Automatic import from Garmin Connect (with MFA support)
  • Automatic import from Xert
  • Activity list with route map thumbnails
  • Detailed activity view with interactive map and charts
  • Delete individual activities (with async fitness recalculation)

Performance Analytics

  • PMC (Performance Management Chart) — Track CTL (fitness), ATL (fatigue), and TSB (form) over time with color-coded training zones
  • Power Curve — Best power outputs at each duration with freshness indicators
  • HR Zones — Time-in-zone breakdown for each activity

Personal Records

  • Lifetime PRs (longest ride, fastest segments, max power, biggest climb)
  • Per-route PRs with automatic route matching via GPS similarity

Activity Comparison

  • Compare multiple activities on the same route side-by-side
  • Overlay performance charts (power, HR, speed) to spot differences
  • Identify where you gained or lost time

Settings & Preferences

  • Selectable map tile styles (OpenStreetMap, Positron, Dark Matter, Voyager)
  • Light/Dark/Midnight themes
  • Metric/Imperial unit preferences
  • HR-derived power estimation for activities without power meters

Multi-User

  • Isolated data per user
  • Admin panel for user management
  • OAuth login (Google, GitHub)

Screenshots

Activity List

Activities

Activity Detail

Activity Detail

Power Curve

Power Curve

Performance Management Chart

PMC

Records

Records

Activity Comparison

Compare

Settings

Settings

Quick Start

git clone https://github.com/tomberch/training-dash.git
cd training-dash
docker compose up

Open http://localhost:8000 and register your account. The first user automatically becomes admin.

To import activities from Garmin or Xert, go to Settings > Integrations.

Tech Stack

Layer Technology
Frontend React 19, TypeScript, Tailwind CSS 4, Vite, Recharts, Leaflet
Backend Python 3.12, FastAPI, SQLAlchemy 2, Pydantic
Database PostgreSQL 16 with PostGIS
Queue Redis + arq (background job processing)
Container Docker Compose

Documentation

Development

Prerequisites

  • Docker and Docker Compose
  • Node.js 20+ (for frontend development)
  • Python 3.12+ and uv (for backend development)

Local Development

Backend:

cd backend
uv sync
uv run pytest  # run tests (use -n auto for parallel integration tests)

Frontend:

cd frontend
npm install
npm run dev  # starts dev server on :5173

Full stack with hot reload:

# Terminal 1: Database + Redis
docker compose up db redis

# Terminal 2: Backend
cd backend && source .venv/bin/activate
uvicorn trainingdash.app:app --reload

# Terminal 3: Frontend
cd frontend && npm run dev

License

AGPL-3.0

About

Self-Hosted and Vibe Coded Fitness Analytics Tool

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages