v1.2.4
Changelog
v1.2.4 — 2026-08-01
The effort ratings you have been recording since v1.2.3 now answer questions, and bodyweight
training stops being treated as barbell training with the weight left at zero. Plus: creating a
profile from Settings works on an invite-only instance, which it never has.
The effort ratings, read back as statistics
v1.2.3 let you rate how hard a set was. Nothing then read that rating back — it lived in the set
label and nowhere else. Stats now answers the question the number was recorded for.
- 📊 An Effort card in Stats over 30d / 90d / 1Y / all time: average effort, the share of sets
taken close to failure, and — always alongside them — how much of your training was rated at
all. Rating is optional and off by default, so a partly rated history is normal; an average
without its denominator would quietly speak for sets you never rated. - Week by week. The weekly average with that week's set count in the tooltip, because the
pair is the reading: volume up with effort up is fatigue accumulating, volume up with effort
flat is the adaptation you were training for. Weeks resting on a single rated set are dropped
rather than drawn. - Where the sets land. The spread across the scale, not just the middle of it. Half your sets
at failure and half in warm-up territory average out to a healthy-looking number; this is the
chart that shows it. - 🔥 Hard-sets mode on the muscle map. The same body diagram, counting only sets taken near
failure — "where did the stimulus go" rather than "where did the volume go". A muscle can lead
on set count and still never be trained hard. - Effort on the exercise curve. Each session's dot on the top-set chart fills in as less is
left in the tank, so the same weight moved with more in reserve stops reading as a flat line.
Exercises with enough ratings also get an Effort curve of their own. - One history, whichever scale you use. Everything aggregates internally in RIR and converts
back for display, so a history that mixes your own RIR logs with imported RPE averages as one
series instead of two half-empty ones. RIR charts count downward on the axis, so harder sets
sit higher. - Translated into all 12 UI languages.
Bodyweight training, logged the way it is done
A push-up has no weight to type, and the app asked for one anyway — every set, on a quarter of
the catalogue. Three reports (#31, #32, #33) turned out to be the same gap: the app assumed
progress lived in the load. It doesn't, for the exercises most people actually start with.
- 💪 Exercises know they are bodyweight. Seeded from the equipment the dataset already
records, so push-ups, pull-ups, dips and 300-odd others arrive marked. The weight column is
not shown, the set row is one stepper instead of two, and the "confirm your working weight"
prompt at the end of an exercise stops asking about a weight that was never there. (#32) - Added weight when there is any. A dip belt or a weighted vest is entered once in the
exercise settings and reads as an addition — "+10 × 8", not "10×8" — everywhere it is shown
back. With load on the belt the normal progression rules take over again, because now there
is something to add. - 📈 Reps and sets are the progression. Clean session, one more rep. Set a top of the range
and reaching it adds a set and starts the reps over instead of climbing forever; at six sets
it says what it should have said all along, which is that it is time for weight or a harder
variation. No ceiling set keeps the old behaviour exactly. (#33) ↔️ Reps per side. For lunges, single-arm rows and every other unilateral movement. You
log what you did — 16, the total — and the app shows the split, "8 per side", so the set in
front of you is unambiguous without the rep count meaning one thing here and another there.
The target steps in twos, 16 → 18 → 20, because half of an odd total is a rep one side never
gets. (#31)- Both settings travel with a shared plan, and are written to a plan file only when they
disagree with the catalogue — every existing plan, workout and backup is read unchanged and
none of it needs migrating. - Translated into all 12 UI languages.
Fixed
- Creating a profile from Settings on an invite-only instance. The sign-in screen asks for
the invite code when the server needs one; the same registration reached from Settings never
did, so it was refused with nothing on screen explaining why. It now asks on the same terms. - A long value no longer runs through its own label in a settings row — "Follow the routine
(Linear progression)" overlapped "Rule" rather than shortening itself.