Skip to main content

Loadout Waypoints

Overview

Loadout Waypoints is a workout plan manager — build multi-day training plans, subscribe to plans other people have published, and run through a workout with a guided, step-by-step execution mode that remembers your last reps/weight/duration for every exercise. It's for anyone who wants their programming, progress history, and strength charts in one place instead of spreadsheets or notes.

You can use it as a hosted subscription (we run it for you — updates, backups, and uptime handled) or self-host it yourself; the underlying project is open source under the Elastic License 2.0.

Getting started

Hosted: sign up from the Loadout Waypoints product page on allthewaypoints.com. No install required — log in and start building a plan.

Self-hosted: Docker Compose only — one self-contained file, nothing else to install first. Save the following as docker-compose.yml in a new directory:

services:
app:
image: ghcr.io/j5guy/loadoutwaypoints:latest
container_name: loadoutwaypoints-app
pull_policy: always
restart: unless-stopped
environment:
PORT: "5556"
WEB_FQDN: localhost
TZ: ""
AUTH_MODE: local
ADMIN_USERNAME: admin
ADMIN_PASSWORD: ""
ldapURL: ""
ldapBindDN: ""
ldapBindPW: ""
ldapSearchBase: ""
ldapSearchFilter: "(sAMAccountName={{username}})"
mongoHost: mongo
mongoPort: "27017"
mongoDBName: loadoutwaypoints
mongoUser: ""
mongoPass: ""
LICENSE_SERVER_URL: ""
LICENSE_OFFLINE_PUBLIC_KEY_JWK: ""
ports:
- "5556:5556"
depends_on:
mongo:
condition: service_healthy
volumes:
- uploads-data:/app/public/uploads
- logs-data:/app/logs
- secrets-data:/app/.secrets
networks:
- default

mongo:
image: mongo:7
container_name: loadoutwaypoints-mongo
restart: unless-stopped
volumes:
- mongo-data:/data/db
healthcheck:
test: ["CMD-SHELL", "mongosh --quiet --eval \"db.adminCommand('ping')\" || mongo --quiet --eval \"db.adminCommand('ping')\""]
interval: 5s
timeout: 5s
retries: 20
networks:
- default

volumes:
mongo-data:
uploads-data:
logs-data:
secrets-data:

networks:
default:

Then start it:

docker compose up -d && docker compose logs app

Every setting in that file already has a working default. Sign in at /auth/login as admin / admin (set ADMIN_PASSWORD yourself in the file first if you'd rather pick your own from the start) — you'll be required to set a real password before doing anything else, so there's no one-time secret to catch from the logs. The app serves plain HTTP; put a reverse proxy (Traefik, Caddy, nginx, whatever you already run) in front of it if you want HTTPS. To change anything — LDAP auth, an external MongoDB, a license offline token — edit the values directly in the file; every variable it accepts is listed above.

Updating a self-hosted install:

docker compose up -d

Same command — pull_policy: always means this always checks the registry for a newer :latest image first, rather than reusing whatever was pulled before.

Features

  • Plan builder — multi-day workout plans with reps, weight, duration, and rest configurable per exercise, plus superset grouping, tags, category, difficulty, and estimated duration. An exercise can track reps and a timed hold at once, and can optionally track left/right sides as independent entries. Create a brand-new exercise inline from the plan builder's exercise picker without losing your place.
  • Guided execution — a step-by-step "run the workout" view that walks through each day's exercises in order and logs a completed session when you finish. Add an ad-hoc extra set or superset round on the fly (optionally saved back to the plan permanently), and turn on "Auto-Advance" to move to the next exercise automatically once its last set is checked off. The plan's owner or an admin can also edit a day's exercises mid-workout without losing progress on the rest.
  • Per-exercise history — your last reps/weight/duration for each exercise is tracked (per rep count, so different rep/weight combinations of the same exercise save independently) and surfaced while building and executing plans, so progressive overload is one glance away.
  • Strength progress charts — every completed set is logged over time, so each exercise's detail page shows a trend chart, not just the last value.
  • Exercise library — built-in and user-submitted exercises with muscle-group diagrams, equipment, instructions, and image uploads.
  • Subscriptions & dashboard — subscribe to public plans and see them alongside recently-added ones, each with its last-completed date.
  • Profile & activity — session stats, your favorite plan, recent sessions, and a GitHub-style activity heatmap.
  • Admin panel — manage users and the exercise library (self-hosted only). See Admin area for the full rundown.
  • Flexible auth — local accounts or an existing LDAP/Active Directory server (self-hosted only).

FAQ / Troubleshooting

Can I switch from hosted to self-hosted, or the other way around? Not automatically today — reach out and we can help you move your data.

I forgot my admin password on a self-hosted install. There's no self-service reset for local accounts yet. If another admin account exists, have them reset it from /admin/users. Otherwise, generate a new bcrypt hash from inside the app container and write it straight to Mongo:

docker compose exec app node -e "console.log(require('bcrypt').hashSync('a-temporary-password', 12))"
docker compose exec mongo mongosh loadoutwaypoints --eval '
db.users.updateOne(
{ username: "admin" },
{ $set: { passwordHash: "PASTE_THE_HASH_HERE", mustChangePassword: true } }
)
'

Log in with the temporary password — mustChangePassword forces you to pick a real one immediately.

How do I completely remove a self-hosted install?

docker compose down -v

The -v flag also removes the named volumes (Mongo data, uploads, logs, the auto-generated session secret/admin password) — leave it off to stop the app but keep your data for a later docker compose up -d.

Where do I report a bug or request a feature? Email [email protected].

Learn more

  • Using the App — a full walkthrough of every feature once you're logged in.
  • Architecture — tech stack, boot sequence, and how a request flows through the app.
  • Data Model — every database model and how they relate.
  • Auth & Sessions — local vs. LDAP login, sessions, forced password change.
  • Licensing System — how the self-hosted license gate, trials, and offline tokens work.
  • CSV Import & Export — the bulk-data pipeline behind the admin and self-service backup screens.
  • Frontend — what each client-side script does.