LiftTrace is a self-hosted weightlifting tracker (Docker + Android, AGPL-3.0). rc.5 is the next public roll-up, bundling everything since the rc.4 release.

What’s new

Scheduled automatic backups. Settings → Backup → Schedule lets you pick a time + frequency (daily / weekly). Server installs get an admin UI with optional ENV lock for managed deployments; the Android app does the same for offline-only users, writing scheduled backups to device storage or the share sheet.

Multi-architecture Docker image. The public image at ghcr.io/traceapps/lifttrace now ships both amd64 and arm64 builds, so Raspberry Pi 4 / 5 and other ARM self-hosters can docker compose up -d without building from source.

Default session length raised. From 30 days to 1 year so PWA users stop getting signed out every month. Admins can still set their own session length under Settings → User Management → Session Length.

Better biometric failure path on Android. When a stored auth token has expired, biometric sign-in now surfaces a clear “Session Expired” prompt instead of silently bouncing back to the Login screen with no explanation.

Fixes

  • INSECURE_COOKIES is now called out inline in the example docker-compose.yml with a comment explaining the failure mode (every request 401s after a successful login because the browser drops the Secure cookie over plain HTTP); README troubleshooting entry expanded with the exact Firefox console message that confirms the diagnosis (#4)
  • Sync pulls no longer clobber local pending edits. An incoming server pull respects in-flight local changes instead of overwriting them with older data.
  • Sync now clears local auth state on a 401 response so the user gets prompted to sign in again, instead of the app looping silently on every subsequent request.

Install / upgrade

  • Docker: pull the new image and restart your stack (see the README for compose snippets)
  • Android: signed APK on the release page
  • Full CHANGELOG: main repo

What is LiftTrace?

Self-hosted weightlifting tracker. Diary (sets, reps, weights, RPE, supersets, warm-ups, persistent rest timer, natural-language Smart Add), Programs (mesocycles, templates, week-by-week progression), Exercises (full library from wger / free-exercise-db / exercisedb plus your own custom entries with images, GIFs, or YouTube links), Statistics (volume, PRs, frequency, body stats trends, RPE overlays), Coaching (trainer prescribes workouts to athletes, per-set feedback, two-way reply threads), AI assistant (Claude / OpenAI / Gemini / Ollama, BYOK, opt-in), built-in music player (Subsonic / Jellyfin / Plex / Emby libraries plus Icecast / Shoutcast / HLS streaming stations with lockscreen controls), OIDC SSO (Authentik, Keycloak, Pocket ID, Authelia, Auth0, Google, anything OIDC 1.0), workout import from Strong / Hevy / FitNotes / Jefit CSVs, federation with NutriTrace (auto-log workout calories burned to your NT diary). Docker on the server, Capacitor app on Android. AGPL-3.0 licensed.

  • curbstickle@anarchist.nexusM
    link
    fedilink
    English
    arrow-up
    1
    ·
    7 days ago

    Ok, I’ve got some utility/usability comments:

    Exercise Creation:

    • Both options (manually creating and json import) work without issue
    • It may be handy to create some kind of per-exercise export specifically to be shared to others. I’m thinking since its just json it could live in a repo on a per exercise basis, right next to the app itself (not necessarily the same repo).
    • It would be good to have an option to either add your own equipment type or allow a searchable tag. I sometimes make a workout on the fly based on whats available at the gym (like if I’m traveling), and this would help for quick searches. I also have some equipment here at home that I use that would be handy to include or exclude (like if my kids are using the slackboard).

    Workout:

    • The overall timer is good, but a per exercise timer inside that would be great along with a settable rest time. If I’m doing 2 minutes of weighted carries for example, I’d want to start the timer, get a countdown, then get a beep or something when the timer hits. That should be settable for the exercise.
    • For a settable rest timer, if the exercise itself has a timer, then a “rest” could just be an exercise with a custom timer. This would be per rest settable, not overall. For example, if I’m doing an HIIT circuit I may want a 20s rest between exercises, but then at the end I may want a 2 minute timer to run before starting another round.
    • Ideally I’d want to also grab HR data off my chest strap sensor, whether I’m getting it in-app during the session or after. I’ve made a couple of apps to pull that data in (entirely different purpose btw), its not too bad for devices like polar with a clean api, but you could also do something with an import possibly. It would be that or the other way around, allow the session data to be available for export, which would be drastically easier as a PWA. Since this is more structured indoor training/logging, a timestamped csv is probably best, though json would be fine too.

    I know you’re not looking to add features in when you’re at RC, just some general feedback on what I like to see/do

    • TraceApps@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      7 days ago

      Genuinely useful feedback, thanks for taking the time. Walking through each:

      Per-exercise sharing. Real gap. The exercises table is already structured cleanly enough to dump one as JSON; adding a “share this exercise” button that produces an importable file is small. The community-repo idea is good too: a separate awesome-lifttrace-exercises repo where people can drop contributions, and the in-app importer can read from a URL. Going on the roadmap.

      Custom equipment + searchable tags. The schema already supports arbitrary equipment strings; the UI just defaults to a fixed list. Adding a “+” in the equipment picker plus a “what’s available today” filter chip set on the Exercises page is genuinely useful, especially for travel and home-gym use. Adding to the roadmap as a near-term candidate.

      Per-exercise timer for time-based work. Real gap. The rest timer infrastructure exists but doesn’t currently cover “do this exercise for N seconds with a countdown and a cue.” That’s a meaningful addition for anyone doing carries, planks, isometrics, hangs, or hybrid stuff. Sharing the same audio + haptic plumbing as the rest timer keeps it cheap. Roadmapped.

      Per-set / per-round rest in HIIT-style circuits. Currently rest is global with per-exercise memory, which doesn’t cover the “20s between reps, 2 minutes between rounds” pattern you described. That’s a structural change to how sets express rest. Going on the list to think through together with the time-based timer above, since they share infra.

      Heart-rate data. The export direction you called out is the cheap win, and you’re right that PWA makes it easy. I’ll push a CSV export of the completed workout (sets, reps, weights, RPE, timestamps, rest durations) in a near term RC. That covers anyone who wants to feed an external analysis pipeline. Live HR ingestion from a BLE chest strap is the heavier direction and goes on the roadmap.

      Thanks again for your valuable feedback. Appreciate the level of detail.