v1.1.1
Changelog
v1.1.1 — 2026-07-21
Reliability fixes for the push notifications shipped in v1.1.0, found through live testing:
- 🌍 Workout day reminder now fires by each user's own browser-detected timezone instead of a
single server-wide one — works correctly regardless of where the server runs, and follows you
automatically if you travel. - 💾 Settings changes (like the reminder time) are flushed to the server immediately when the tab
backgrounds or closes, instead of relying solely on a 1.5s debounce that could get cut short. - ⏱️ Reminder check tightened from a 60s to a 10s interval, and pushes are now marked
urgency: 'high'— cuts avoidable delay on top of it, though delivery time is ultimately up to
Apple/Google's push relay. - 🪵 Push send failures are now logged instead of silently swallowed.
v1.1.0 — 2026-07-21
- 🐳 Prebuilt Docker images published to
ghcr.io/duartesantos8/opengym-{api,web}(amd64 + arm64)
via GitHub Actions, so self-hosting no longer requires building from source.docker compose pull
grabs them;docker compose up -d --buildstill builds locally if you'd rather. - 🔔 Push notifications: rest-timer-over alert (fires even if the app is closed) and an optional
daily reminder on days you have a workout planned but haven't logged one yet. Opt in per-profile
in Settings — requires a signed-in passkey profile. Backend gains one dependency (web-push);
VAPID keys are generated on first run. - 🐛 Fixed the rest timer stalling when the tab/app is backgrounded — it's now anchored to a real
timestamp instead of a plain per-second counter, so it stays accurate after you come back.
v1.0.0 — 2026-07-20
First public release. A complete, self-hostable gym & body-weight tracker.
Highlights
- ⚖️ Body-weight tracking with an interactive chart + goal line
- 🏋️ Weekly routine planner over 1,324 exercises with animated demos
▶️ Guided workouts: body-weight check-in, pre-filled weights, rest timer, PR detection, per-exercise weight tracking- 🔗 Supersets and 🏃 cardio (time + speed) logging
- 🗓️ Per-day rescheduling without touching your weekly plan
- 🟩 GitHub-style activity heatmap (by time trained)
- 🔑 Passkey (WebAuthn) login with per-profile data that syncs across devices
- 🎨 Light/dark themes + 8 accent colors, synced to your profile
- 📦 JSON export/import, guest mode, PWA install, no telemetry
Stack
- React 19 + Vite (React Router, Zustand)
- Node backend, no framework, single dependency (
@simplewebauthn/server), JSON-file storage - nginx + multi-stage Docker so
docker compose upbuilds and serves everything
Notes
- Exercise media (~140 MB) is fetched from hasaneyldrm/exercises-dataset on first run.
- Licensed under GNU AGPL v3.0.