Forge

Self-hosted · single container · no cardio, by design

Your training.
Your server.
Your numbers.

Forge is a self-hosted tracker for weight training — live set logging with ghosts and rest timers, a progression engine with written-down rules, and training analysis where every formula is documented. One Docker container, one SQLite volume, zero cloud.

Live workout logging with set rows, previous-workout ghosts and a running rest timer Workout home with routines and quick start

No black boxes

Every number Forge shows you is computed by a formula you can read — on one documentation page, with the thresholds, the honesty gates, and the reasons. If a chart is hidden, it is because your data cannot support it yet, and the docs say exactly when it will appear.

e1RM = w × (1 + r / 30)

Estimated one-rep max

The Epley formula, applied to your best working set. Singles count as-is, warm-ups never count anywhere.

fitness₄₂ − fatigue₇ = form

Form & fatigue

Exponentially-weighted daily load over 42 and 7 days — the endurance world's performance chart, finally applied to lifting.

stall = 3 × same top weight

Deload detection

Three sessions stuck at one weight without hitting the rep target flags a stall and suggests ~10% off. Written down, so you can argue with it.

Built for the way lifting actually goes

Live logging that keeps up

Previous-workout ghosts you tap to accept, warm-up ramps computed from your working weight, RPE when you want it, drag to reorder, swipe to delete. Set logging queues offline and syncs when the gym wifi gives up.

A progression engine, not a notebook

Set rep targets in a routine and Forge runs double progression for you: hit the top of the range everywhere and it suggests more weight; stall three sessions and it suggests the deload. The rules are documented, not vibes.

Supersets & a rest timer that follows you

Pair exercises in two taps; rest fires after the group, not between partners. The timer survives reloads, follows you across tabs, and rings on your lock screen over HTTPS.

Analysis no tracker ships

Form & fatigue (the lifting version of a performance-management chart), recovery sweet spot, strength standards, detraining half-life, push/pull balance, measured rest. All deterministic math on your own sets — no AI, no cloud.

A muscle map on every exercise

Anatomical front/back figures light up primary and secondary muscles for all 278 catalog movements — and your custom ones. Equipment glyphs make a long picker scannable at 22:00.

Never locked in

Strong and Hevy CSV import, full JSON and Strong-compatible export, a documented REST API with scoped tokens, webhooks, and Prometheus metrics. Your history is a curl away, forever.

Runs on your box in a minute

One container, one volume. SQLite in WAL mode holds everything — back up a single directory and you own your entire training history. Nightly snapshots, OIDC single sign-on and multi-user come in the box.

Installation guide
# docker-compose.yml
services:
  forge:
    image: ghcr.io/bndct-devops/forge:latest
    ports: ["8081:8081"]
    volumes: ["./data:/data"]
    restart: unless-stopped
$ docker compose up -d