All your activities at a glance
Every workout with type, distance, duration, calories, and location - organized in a filterable overview.
Every workout, fully analyzed
GPS route with pace-colored splits on the map, heart rate curve, elevation profile, and kilometer splits - all on a single page.
Understand your training
Statistics
Distance, duration, calories - broken down by month and activity type.
Progress
Track your pace and VO2max over time. Linear trendlines show where you are headed.
Fitness
Training load modeled with Banister TRIMP. Chronic load, acute fatigue, and form at a glance.
Energy Balance
Daily energy expenditure based on Mifflin-St Jeor BMR plus workout calories from Apple Health.
Every GPS track on a single map
What it does
Interactive Maps
GPS routes with pace-colored kilometer splits rendered on MapLibre vector maps.
Workout Profiles
Combined elevation, pace, and heart rate charts for every workout. Toggle each metric independently.
Segment Comparison
Automatically detects repeated route segments across workouts and compares your pace on them.
Sharing
Public share links with granular permissions per workout. Choose which data to expose.
Bulk Import
Upload large JSON exports from the iOS app. Background processing with progress tracking.
i18n
German and English out of the box. Extensible to additional languages.
From Apple Health to your server
The companion iOS app bridges Apple Health and your self-hosted backend. It reads workouts, GPS routes, heart rate samples, and VO2max from HealthKit and exports them as JSON - ready for upload or automatic sync.
Up and running in minutes
Three containers, one command. All you need is a Linux server with Docker.
Prerequisites
Make sure the following is available on your server before you begin.
Clone & Configure
Clone the repository and run the setup script. It generates all required secrets (database credentials, API key, session key) in a .env file.
# Clone the repository
git clone https://codeberg.org/klnlrchr/MyActivityLog-Web.git
cd MyActivityLog-Web
# Generate .env with secrets
python3 scripts/setup.pyBuild & Start
Build the containers and start the stack. PostgreSQL + PostGIS, the FastAPI backend, and the Nginx frontend will come up automatically.
docker compose up -d --buildSet Admin Password
Set your dashboard login password. The dashboard is then available at http://your-server.
docker compose exec backend python set_password.pyThe setup script asks whether you use HTTPS. If you run without TLS, answer n - otherwise the session cookie won't be sent and login will fail.
Updating
Pull the latest changes and rebuild. Your data (database, uploads, .env) is preserved - only the application code is updated. Database migrations run automatically on startup.
cd MyActivityLog-Web
git pull
docker compose up -d --buildBuilt with
Free and open source
MyActivityLog is free and open source software. Self-hosting requires a Linux server with Docker.
Support the project
MyActivityLog is built and maintained as free, open source software in my spare time. If it makes your data feel a little more your own, consider buying me a coffee - every contribution helps keep the project alive and ad-free.
Thank you - it really makes a difference.