SportTracker logo

SportTracker

Self-hosted server for recording and analyzing your workout data. All data stays on your own server.

View on GitHub Releases

Track everything about your workouts

Log your workouts and analyze your training data on a server you fully control.

Multi-user support

SportTracker supports multiple users. Each user registers with their own account, so everyone's workout data stays completely separate.

Workout tracks list

Record your workout data

Log your completed workouts and capture detailed information for every session. Supported workout types:

  • Distance-based: Biking, Running, Hiking
  • Duration-based: Fitness Workouts
  • Custom fields for each type of workout

Workouts can also be shared via public links.

Editing a track

Month goals

Set monthly goals for distance, duration or number of workouts and track your progress toward each goal on a live progress bar.

Month goals with progress bars

Heart rate data

Add heart rate data to any workout via the SportTracker API and view it as a chart.

Heart rate chart

GPX tracks on a map

Attach a GPX recording to any distance-based workout and view your tracks on a map. Either all tracks in a single overview or one track at a time with additional details, like the track line colored by speed.

Single GPX track on a map

FIT tracks

SportTracker also supports Garmin .fit files in addition to GPX. On upload, a GPX file is generated automatically and both files are stored in the data folder. A .fit file can also be used to prefill the workout form with values like duration and distance.

Workout tracks list

Tile hunting

Tile hunting divides the world map into roughly same-sized tiles and lets you track which ones you have already visited. It can be enabled optionally per user: a great way to discover new areas or stay motivated to explore new routes.

Tile hunting map

The map shows all tiles you have visited, with the largest square area completely covered by your tiles highlighted. By default a tile matches an OpenStreetMap tile at zoom level 14, configurable in the settings file. The map can also be shared via a code to add a custom overlay in tools like bikerouter.de.

Tile hunting map

Tile hunting heatmap

Each tile is colored according to the number of workouts visiting it. Click on a tile to get the exact number of visits.

Tile hunting heatmap

Map for a single workout

See the tile hunting map for a single workout as well.

Tile hunting map for a single workout

Statistics & charts

Tracked data is visualized in interactive charts, e.g. distance per month, average speed or duration per workout.

Charts

Examples of the available charts.

Calendar chart

Annual statistics

Each year is summarized for every workout type, giving you a quick overview of your progress over time.

Annual statistics

Achievements

The achievement page shows aggregated information about all your workouts.

Achievements page

Body weight

Track your body weight over time. Statistics, a weight-over-time chart and your body mass index (BMI) are shown on the overview page.

Body weight tracking

Planning

Planned tours

Plan and save routes for distance-based workout types and view them on a map. Share planned tours with other users or create public links, and link the corresponding workout once you have actually completed a tour.

Planned tours

Long-distance tours

Combine multiple planned tours into a long-distance tour and treat them as stages. Track your progress on how many stages you have already completed and use the overview map to prepare for upcoming stages.

Long-distance tour with stages

Maintenance

Maintenance events

Record maintenance events for each workout type and set reminders. SportTracker can send notifications via a ntfy server once a reminder is triggered.

Maintenance events

Notifications

SportTracker creates notifications on certain events, e.g. surpassed workout records, reached month goals and shared tours. All notifications are shown in the notification center and can also be sent via a notification provider.

  • Maintenance reminder limit exceeded
  • Planned and long-distance tour sharing events
  • New records for distance or duration
  • Month goals reached, best month totals
  • ntfy as notification provider
Notification center

Getting started

Pick the way you want to run your own SportTracker instance. For the full step-by-step guide, see the README.

Docker

  1. Copy the provided docker-compose.yaml to your server.
  2. Set your database credentials and the host path for your data.
  3. Place a settings.json (based on settings-example.json) in that path.
  4. Start everything with docker compose up --build.
  5. Log in as admin with the generated password from the console output.

Run it locally

  1. Install dependencies: poetry install --no-root --without dev.
  2. Build the frontend: run npm install and npm run build inside the js folder.
  3. Copy settings-example.json to settings.json and adjust it to your setup.
  4. Start the server with Python from your Poetry virtual environment, pointing at src/SportTracker.py.

API

SportTracker exposes a REST API for the most common use cases, e.g. adding workouts or heart rate data.

Once your instance is running, interactive API documentation (Swagger UI) is available at /api/v2/docs.