Repository navigation
v1.4.0-dev06
Pre-release
Pre-release
Sixth dev pre-release of the 1.4.0 minor
Coaching that asks the client first, with a conversation between coach and client; the watch app updating itself; the phone and watch keeping each other's sets; and Trace and the Diary saving into the workout you mean, online and offline.
Added
- Coaching asks first. A coach (a Trainer, or an admin) sends a request with an optional note, and nothing of yours is shared until you accept it on the new Coach tab in Programs. You have one coach at a time: to accept another, leave yours first. A coach can take a request back and sees declines and departures from the last week. An admin's trainer picker in Settings, Users sends a request too, instead of pairing outright, and so does choosing a coach when creating or inviting a member; an account created or invited with no coach chosen gets no request. Coaching set up before this update stays as it is, with nothing to accept. An Android app from before this update shows no requests; answer them on the web or after updating.
- You can leave your coach, from their name on the Coach tab in Programs (Leave Coach). Only the coach or an admin could end it before. As when a coach ends it, the prescriptions and programs that coach gave you are removed.
- A conversation between a coach and their client, beside the notes on workouts and exercises, which stay where they are. Text up to 4,000 characters and a photo per message, with read receipts, unread counts on the Coach and Coaching tabs and a dot on Programs, and deleting your own message ("Message deleted"). The client finds it on the Coach tab, the coach on the client's page in Coaching. It is kept on the device and opens with no connection; a message written offline shows as waiting and is sent once when the connection returns. Photos are served only to the two people. When coaching ends, the client can still read it and nobody can write. Trace never reads it.
- A prescribed workout asks before it loads. On the Diary, a workout your coach prescribes shows Accept and Decline, on its day and under Waiting for Your Answer on any day; once accepted, Load works as before, and a declined one goes away. Your coach sees Waiting for an Answer, Accepted or Declined; a declined workout is never reported as missed, and giving it again (or changing which workout it is) asks again. Answering works offline and goes when the connection returns. Prescriptions from before this update count as accepted, so nothing asks again. An Android app from before this update still shows Load, without asking.
- Notifications for coaching requests and answers, in Settings, Notifications, Coaching, on by default and only for people in coaching: New Message (with Email Me Too, off by default, at most one email per conversation every 30 minutes), New Recommendation (a coach asks to coach you, or prescribes a workout) and Client's Answer (someone accepts or declines your request or a workout you prescribed, or leaves). They say who, never what was written.
- The watch app updates itself to the phone's release. Installed from GitHub, it used to stay on whatever version it was put on with adb. Now, when the phone updates, the watch fetches the same release's watch app and installs it. The first time, the watch asks you to allow LiftTrace to install apps; after that it updates without a tap, while the watch is on its charger.
Changed
- Importing workouts from other apps is no longer marked Experimental.
- "Client" is the word for the person a coach coaches, in Coaching, the notifications and the program menu (it was "member" or "coachee"). The Member role keeps its name. The Coaching tab, its sheet titles and its lists can now be translated.
- The Android app without a server says Coaching Needs a Server on Coaching and Coach, with a button to connect one, instead of showing empty lists.
Fixed
- The workout timer shows the right time with a watch paired. Started or paused on the phone, it reached the watch as having started in 1970, so both showed hundreds of thousands of hours. A timer already stuck like that clears itself.
- A set marked done on the watch stays done. Saving anything on the phone while it still showed that set as not done put it back. A save now changes only the sets and exercises it changed, which also covers two phones, or a phone and a browser, on the same workout.
- The phone and the watch show each other's sets at once. A set logged on one shows on the other right away while it's open, rather than at its next refresh, up to 45 seconds later. Neither checks while its screen is off.
- The Android app no longer syncs every few seconds on the Diary, Programs and Statistics. Each sync told the open page to reload, and the reload's reads started the next sync, even when nothing had changed. A sync that brings nothing now leaves the page alone (the coach's feedback still refreshes), and a read right after a sync doesn't start another. Without user accounts, the program being followed no longer counts as a change on every sync.
- Trace answers with models that can't use tools (nutritrace#259). With an OpenAI-compatible model that has no tool support, every chat failed with
tool use is not supported. Trace now asks again without tools and says once that the model can't log workouts or look things up. Thanks @jsapede for the report. - Messages show on phones while Trace is open. They were hidden behind it. Long messages wrap instead of running off the screen.
- Pictures, GIFs and videos uploaded to an exercise show in the Android app, connected to a server or not (#141, reported by @rgpag1). They were blank wherever exercises show their picture, while the built-in libraries' pictures showed. They also show on the web when LiftTrace is served from a subpath (
BASE_URL). - The Android app stays on the workout you're logging when you have more than one that day (#142, reported by @surfingbytes). Logging a set in a later workout switched the Diary back to the day's first one a few seconds later.
- Copy From Yesterday fills the workout you're on. On the day's second or later workout, it replaced the day's first one instead (found while fixing #142).
INSECURE_COOKIESset in.envreaches the app with the sampledocker-compose.yml. It was ignored there; only uncommenting the compose file'sINSECURE_COOKIES=1line worked. The README, DEPLOY.md,.env.exampleanddocker-compose.ymlnow explain it the same way as the other Trace apps: what it does, why signing in at a plainhttp://address loops without it, and to leave it off behind HTTPS. When the browser drops the sign-in cookie on an HTTPS address, "How to fix it" on the sign-in screen opens the part of the reverse proxy guide about it.- Trace logs into the workout it means. On a day with more than one workout, Trace saved sets, exercises and templates into the day's first workout, which took the other's name and exercises. It now uses the workout open in the Diary or the one it names, keeps its notes, finished mark and program week, shows what it adds in the Diary at once, and loads a template as a new workout when the open one already has exercises (found while fixing #142).
- Switching to another workout of the day sticks in the Android app. A sync finishing at that moment could switch the Diary back (found while fixing #142).
- A workout started offline in the Android app keeps its tab when it reaches the server. The tab disappeared for a few seconds (found while fixing #142).
- On the web, workouts started or changed offline stay apart. A new workout started offline, or while changes waited to sync, opened as the day's first workout, so what you logged next went there and could replace a change waiting to sync. Offline, switching to a workout not opened before showed another one, and a deleted workout's tab stayed until a reload (found while fixing #142).
- A workout logged before the app has that day's workouts stays a workout of its own. Logged on the phone before its first sync finished, offline while another device logged the same day, or on the web on a day not opened before, it went into the day's first workout, which took its name and lost its notes (found while fixing #142).
- Saving a workout no longer puts back details changed elsewhere. A save from a Diary opened before the workout's name, notes, finished mark or program changed on another device, or through Trace, put the old ones back (found while fixing #142).
- An exercise or set Trace adds with no connection is no longer saved twice once the Diary saves that workout (found while fixing #142).
- On the web, workouts stay readable offline after a save made online. Any online save dropped the browser's copy of every workout, so going offline right after showed an empty Diary, and anything logged then went into the day's first workout, wiping its name and notes (found while fixing #142).
- Pictures and videos on your exercises no longer stay broken behind a login proxy. Pre-cache media for offline fetched them without the browser's sign-in. Behind basic auth they were never kept for offline use; behind a proxy that signs you in on another address (Authelia, VoidAuth), its sign-in page was kept in their place, and they showed broken, online too, for up to 90 days. The same happened once a proxy's session ran out with its sign-in page on the same address, and for a picture whose file was gone. Pictures broken that way show again (found while fixing notetrace#22).
- Uploaded pictures and videos are kept for offline use when LiftTrace is served from a subpath (
BASE_URL). Only an install at the root kept them, so with no connection your exercises' and profile pictures showed broken, even after Pre-cache media for offline.
Security
- A coach no longer receives every unpaired member's account record. The list for adding a client carried each member's email, birthday, gender and the rest; it now carries only an id and a name.
- An admin no longer sees every coach's activity, or a client's workouts, prescriptions and set videos, without being their coach. Each coach's activity feed shows their own clients' events, and only while coaching them. Admins keep the pairing controls in Settings, Users. Every coach route now checks for an active pairing the client accepted, and refuses another coach's client, a request still waiting and coaching that ended alike.
npm auditreports 0 vulnerabilities for the app and the server.
LiftTrace is free and always will be. Support on Ko-fi goes toward a Mac and an iPhone so my apps can come to Apple devices, and GitHub Sponsors helps with the monthly costs.