Skip to content

v1.2.14

Choose a tag to compare

@DuarteSantos8 DuarteSantos8 released this 11 Sep 09:18
· 216 commits to main since this release

The largest community release so far: twenty merge requests from ten contributors, read and
tried one by one on a staging instance, plus two features of our own and a pass over how the
app feels under a thumb. Nothing changes on the server — a self-hosted instance only needs the
new web bundle; the APK carries the new reminder scheduling.

New

  • 📝 Log a past workout. History → "Log a past workout": pick date, start time, duration
    and a routine (or freestyle), then log it on the normal workout screen — weights, reps,
    RIR/RPE, timed sets, everything. A day that already has a workout asks: replace it, add a
    second one, or cancel. Backfilled sessions are filed in chronological order, claim no PRs
    against later history, and don't touch the weights your next session starts from.
  • 📥 Import straight from Hevy. Settings → Import from Hevy with a Hevy Pro API key pulls
    workouts, routines and weigh-ins directly — no CSV export needed. The key is used for the
    one import and never stored; importing again updates the routines it created instead of
    duplicating them. (JuliusHaring, !30)
  • ⏲️ Rest per exercise. Any exercise can carry its own rest time; a superset rests once,
    with the longest of the group. The global timer stays the default, and "Off" is overridden
    only by an explicit per-exercise rest. Shared plans carry it. (trapy, !34 — issue #10)
  • 🧘 Planned deloads. A routine can be excluded from automatic progression: its sessions
    open on the routine's own targets, stay in history and statistics, and are skipped when the
    next regular session computes its prescription — reps and durations included.
    (tokyo_underworld, !28)
  • 📳 Timer flash. Opt-in screen flash when a rest or work timer ends — for loud gyms and
    headphones. (mzspicoli, !29)
  • 🌍 Thai and Hungarian. Full UI translation in both; Hungarian also localizes all 1,326
    exercise names and instructions. That makes 14 languages. (tomzt, !64 · kecskemethy, !68)

Active workout

  • ➕ Adding an exercise mid-session now also moves and swaps cleanly: move the current
    exercise or superset up/down (the rest countdown follows it), or swap it for another —
    logged sets stay with the original, the replacement arrives with your usual weights, and a
    grouped exercise asks whether the replacement stays in the group. (Space-Hermes, !41, !43)
  • 👉 Swipe between exercises on the workout card — left/right moves through the session,
    buttons and inputs stay untouched. (Space-Hermes, !48)
  • 🎯 Supersets keep the next set centered on screen, not just in view. (Space-Hermes, !52)
  • 📖 The progression line is now a button: tap "Linear · +2.5 kg…" mid-workout to open the
    exercise's settings; changed rules rebuild the open rows and keep everything you already
    logged. (Space-Hermes, !54)

Routines and progression

  • Reorder by long-press. Hold a routine row and drag it; superset groups move as one
    block. The arrow buttons stay, now group-aware and disabled at the ends.
    (Space-Hermes, !45, !47)
  • 🔢 The double-progression rep range is visible: "Reps from" and "Reps up to" side by
    side, per-side exercises stepping in twos — and a progression step of zero can no longer be
    saved by accident. (mflova, !69 and !60 follow-up)

Stats and the rest

  • 🔍 The Stats exercise picker is searchable, and the results stay above the mobile
    keyboard. (mflova, !27)
  • 🗺️ The muscle map works from the keyboard and ranks ties in body order. (Space-Hermes, !46)
  • 🔕 Android reminders follow the calendar: scheduled per date instead of per weekday, so
    a rescheduled day reminds you and a day you already trained stays quiet. (mflova, !66)
  • 🤖 The MCP coach reads what the app shows: custom exercises resolve in every tool,
    warm-ups no longer count as PRs, and progression policies report the value the UI uses.
    (TheophileDiot, !38)
  • 📚 A self-hosting HTTPS guide for valid certificates on a LAN-only address — wildcard
    cert via DNS challenge, Caddy in front, no ports opened. (andi242, !67)

Feel

A pass over touch, scroll and tap across the whole app: chip rows keep a slightly diagonal
swipe instead of handing it to the page; sheets decide an axis before following the finger,
snap back cleanly and close on a quick flick; the body-weight slider drags relative to the
knob instead of jumping to it; steppers repeat while held; going back restores your scroll
position; a just-dropped routine row is tappable immediately; the exercise picker's search
stays above the keyboard; set-row inputs, checkboxes and small icon buttons all got bigger
touch targets; and rows everywhere can be driven from a keyboard.

With thanks to Space-Hermes, mflova, JuliusHaring, trapy, tokyo_underworld, mzspicoli,
TheophileDiot, tomzt, kecskemethy and andi242 — ten contributors in one release.


Published on GitHub on 2026-09-11, mirroring the GitLab release of the same tag, where the artefacts above were built (!NN numbers are GitLab merge requests). The same images are on GHCR, built from this release by GitHub Actions: ghcr.io/duartesantos8/opengym-api:1.2.14 and ghcr.io/duartesantos8/opengym-web:1.2.14.