astashov / liftosaur

Weightlifting tracker app for coders
https://www.liftosaur.com
GNU Affero General Public License v3.0
241 stars 32 forks source link

Are progressions supposed to increase `weight` when percentages of `1rm` are used? #79

Closed efaulhaber closed 3 months ago

efaulhaber commented 7 months ago

I just started using the app (I'm absolutely stoked btw) and wrote down my current program (Madcow 5x5).

Current behavior

It's using percentages (of 5RM, but whatever), so I wrote it like this:

Deadlift / 1x5 62.5%, 1x5 75%, 1x5 87.5%, 1x5 100% / progress: lp(5kg)

I guess what happens when I finish the exercise is that the variable weight is increased, which then overwrites the percentage numbers in the program to:

Deadlift / 1x5 58.15kg, 1x5 68.75kg, 1x5 79.4kg, 1x5 90kg / progress: lp(5kg)
  1. This breaks the program code, so in order to be able to modify something later, I would have to keep a backup of the code somewhere (storing them in a git repo probably wouldn't be a bad idea anyway).
  2. All sets are increased by the same absolute value, breaking the relative weight structure of the plan. 50% sets are increased by the same absolute value as the 100% sets, instead of 50% of it.

As a workaround, I wrote a custom progress script, which seems to work as expected:

Deadlift / 1x5 62.5%, 1x5 75%, 1x5 87.5%, 1x5 100% / progress: custom(increment: 5kg) {~
  if (completedReps >= reps) {
    rm1 += state.increment
  }
~}

Am I overlooking something? Or is this the current behavior?

Expected behavior

If it is the current behavior, I'd suggest the following feature:

  1. Absolute numbers are increased by the progress increment.
  2. Relative numbers are not changed, but instead the variable 1rm is increased by the same progress increment.

So, e.g., this exercise

Squat / 1x5 50%, 1x5 100kg / progress: lp(5kg)

where 50% is of the 1rm 120kg, after a completed set would be changed to

Squat / 1x5 50%, 1x5 105kg / progress: lp(5kg)

where 50% is now of the 1rm 125kg.

I'm sorry if this is bullshit. As I said, it's my very first time using Liftosaur.

astashov commented 7 months ago

That's expected behavior :) The program gets updated when you finish workouts, and it runs the scripts. So, if you change weights, reps, timer, RPE, etc in progress, it rewrites the program text - because the program text is also a reflection of the current state of a program. I thought about having the program text and the program state separated, but couldn't find a non-confusing and easy-to-use way to do so...

progress: lp(5kg) is a linear progression, so it adds 5lb to the current weight, but not to 1RM. Usually you want to update 1RM during 1RM testing, which doesn't happen every workout. So yeah, it will rewrite your 60% of 1RM to something like 75kg after applying the progression.

And if you don't like that - you can always switch to a custom script, which you did :)

efaulhaber commented 7 months ago

I see, thanks for the quick reply! I guess it would be nice to add to the docs that percentages will be replaced? Or did I just miss that?

Btw, would you be interested in adding more popular programs to the list of built-in programs? I implemented Madcow 5x5 and 5/3/1 Boring But Big, and I'd be happy to give them to you once I've tested them in the gym.

astashov commented 7 months ago

I guess it would be nice to add to the docs that percentages will be replaced? Or did I just miss that?

Maybe I missed it, will check!

I implemented Madcow 5x5 and 5/3/1 Boring But Big, and I'd be happy to give them to you once I've tested them in the gym.

Oh yeah, that'd be great, thanks!