WhyAsh5114 / MyFit

Workout tracker inspired by the RP Hypertrophy App
https://my-fit-whyash5114.vercel.app/
GNU Affero General Public License v3.0
26 stars 3 forks source link

Questions and Features #33

Open patrick-b-c opened 2 months ago

patrick-b-c commented 2 months ago

Hi Dev! Found this yesterday, and it looks awesome! I've tested it a bit (I'll admit just a bit, as it's quite tedious to enter workout after workout :D) I've been looking into the RP app, but the subscription is too expensive for my taste. When this is finished, if it in the same ball park as the RP app, I wouldnt mind paying for it (as long as it is a one time payment)... Any way, I have some questions and some request. (I understand if you want to keep some of these answers a secret).

Questions: Sooo how does it work? (Is it based on your own experiency with the RP App, a reverse engineering? Is it based on scientific papers?) How scientific is it really? (Which components actually have an underlining algoritm and what factors influence it) To me it seems like it just adds 2 reps totally each for each exercise since last workout. In reality on some exercises you might progress quickly and in some slowly.

It seems like the stimulus/fatique proxy questions doesnt do anything (Shouldnt something change if youre never sore/never get a pump etc).

Is deloads implemented in any way? (My understanding of the RP app, is that if you fail to meet the goals multiple times in a row. A deload will be recommended.)

Does it ever change the number of sets? (As I understand the RP app, adjust how many sets you should do per muscle group per workout based on previous workouts and the stimulus/fatigue proxies.) I havent noticed your app recommending any alterations to number of sets.

Feature requests: Ability to enter increments when making an exercise. Currently it seems that it adds a arbitary amount of weight (example adding 5 units of weight, but in reality I'm using dumbbels which are in 2kg increments). When making an exercise you could enter how many minimum units is possible, so it will only do increments which are a multiple here off.

If you alter weight/reps/RIR on a set before completing the set, it should make new recommendations to the other parameters. Example if it suggests 40kg/10 reps/2 RIR but you change it to 50kg/1 RIR it should update the reps accordingly.

It seems like it really wants to do down sets. It has no problem with recommending something like this {55kgx8, 50kgx12, 50kgx12}. It seems inconvenient to change weights between sets. I understand it does this to have all sets remain within the chosen target rep range (Example 8-14) but why not just increase the weight for all sets, instead of having differentiated weights for each set (I dont know how the RP app handles this).

I probably will have more questions/requests in the future, but this is what I have so far. Good work! Keep it up.... This app could end up being absolutely amazing.

WhyAsh5114 commented 2 months ago

Wow, that's a big list, thanks for taking the time to write all this down for me.

Q1) So the working of the progression algorithm is pretty basic for now, it finds out the least reps to add to reach at least 2.5% increase from the last time, it chooses the least volume set to increase first. And the loads change only when rep range is reached at its extremes. For the science behind it, just standard progressive overload, try to up the weight since last workouts. Nothing too fancy yet. It sometimes doesn't change reps and directly goes for load, for example in deadlifts in the 5-10 rep range, a rep change from 6 to 7 on 100kg is a much bigger change than 2.5% than simply changing the load from 100 to 105.

Q2) The stimulus/fatigue proxy does in fact do nothing for now, they're questions I added for manual checking, the decision on whether or not to add a set is for the user to make, the app will simply tell you in workout view whether or not the muscles are getting sore, I am automating this part in v3 though, there will be an option when creating the mesocycle itself if you want automatic set changes.

Q3) Deloads were also planned but I couldn't get to their implementations in time as the database schema isn't rich enough to support their recommendation, and instead of migrating v2, I thought it'd be better to do it in v3.

F1) I thought a standard 5 increment would be enough, but I'm realising that it isn't the case. I could add this in v2 if you want, it's just a global constant, I could instead put something in user settings to customize that, but for individual exercise adjustment, you'll have to wait a bit more.

F2) Automated reps and load recommendations when change huh, that's a neat idea, I kept the compare function for that but that is quite tedious to bruteforce and check manually, I agree, will add to my list for sure.

F3) Yeah... the algorithm is designed in such a way that the sets become down sets even though that wasn't my intention. I am adding option for set types: straight, down, top, etc. and different progression for each.

So yeah, basically many features I had planned but I just rushed the app (which is my fault, I agree). But I didn't really expect to gain such a big user base, I thought I'd be the only one to use the app, so I could just manually change my database and schema whenever I wanted to make any changes. But now that I realize I have quite a few users, I can't just do that as it could ruin the existing experience, some of these I can implement right now in v2, the load change is doable it seems, globally though, not per exercise, do tell me if you want it in this or can wait till v3.

patrick-b-c commented 2 months ago

Hi again. Thanks for answering! Also forgot to mention that I think you nailed the UI, was completely intuitive to use. (Maybe dark/light mode for the future?)

In general the algoritms for progression, deload, adjusting amount of sets based on feedback etc. is the bread and butter of the RP app. Nailing this part is what would really take this app to the next level in my opinion.

Q1: So a 2.5% increase in number of reps? Volume (reps x weight x sets)? If it is volume I'm not sure at is the best idea. (Lets say youre doing 100kgx12 in a 6-12 rep range. Then the equal volume is 200kgx6. Ain't nobody doing that :-D). It might be better of to use a 1 rep max formula, you could even use a 1 rep max formula and then use the history of how the user typically progresses to adjust to ones individual progression speed.

Q2: Great to know! The proxies are one of the most interesting things about the RP app for sure. A good idea might be (if you havent all ready) to take a look at the RP app, the RP spreadsheets and the RP Books. Especially the speadsheets might give you a good idea of how to handle this.

Q3: Sounds great, that it will be coming!

F1: Individual exercise adjustment in V3 (or later) would be awesome! I dont believe you have to implement the work around for V2, just keep focusing on V3 :-D

F2: Yeah . Kinda like when you havent entered anything yourself yet it will write the recommended parameters in grey or something. Then when you enter one of the parameters it will become solid black, and the other still grey parameters for that set will change accordingly, until you enter those parameters themselves, where they will also become black solid (and therefore "locked"). This also means if you just hit the recommended parameters, nothing should change, as youre already entering the same values as it already awas suggesting.

F3) Again sounds great! Having some way of forcing all sets to be using the same weight is really necessary in my opinion. The other set types would be nice as well!

You started making this for free and for yourself. The fact that you even shared it and hears the "communities" request is fantastic, thank you so much! I hope you'll be setting up the donations for V3.

WhyAsh5114 commented 2 months ago

Thank you for the kind words! I didn't quite understand your progression idea though, I'll need some help for that as I've never used 1RM stuff, feel free to link some material for me to read up. Right now the app tries to up the overall volume of the entire exercise by 2.5%. So the 100kg for 6-12 reps will start with say 100kg 7, then go to 100 8, all the way till 100 12, then it changes the loads and reps slightly, I just tried it out, its recommendation is 105 12. I'm open to various algorithms for different kinds of exercises, this is just a cookie-cutter kinda progression algorithm that seemed to work for various lifts.

Again thanks a lot for taking the time out to suggest all this :) Light/dark mode is definitely gonna be there in v3, the new UI which is cleaner yet has a similar flow as the old app, so adoption for v2 users will be easier. Here's a sneak peek:

image

patrick-b-c commented 2 months ago

I understand how it works now. But yeah it seems suboptimal. Example if youre deadlifting 200kg, adding a 2.5kg (the smallet increment in my gym) is only a 1.25% increase. However if youre doing cable side lateral raises with 5 kg, where the minimum increment is also 2.5kg. This is now a whopping 50% increase.

Info about 1 rep max formulas: https://en.wikipedia.org/wiki/One-repetition_maximum

The idea of 1 Rep max formulas is that you can calculate your estimated 1 rep max from known reps and weight. You can then use your 1 rep max to calculate what your reps should be at a given weight. Here's a version of the formula adjusted to have more customization. (Based on the Brzycki formula)

$$R{2}=\frac{M{2}\left(-a+r{1}+R{1}-37\right)}{FM{1}}+a+37-r{2}$$

Where: R_2 is the reps at the new weight.

M_1 is your previous used weight. M_2 is your new weight F is the preferred overload percentage as a decimal. (So a 2.5% overload would be F=1.025) R_1 is your previous performed reps r_1 is your previous RIR for previous weight r_2 is your target RIR for the new weight a is a factor you can chose. It determines how difficult more reps are compared to few reps. (Example: If you previously did 100kgx12 and you now want to use a 120kg, the reps at a=0 would be 7. However some people might find it easier to lift heavier for few reps than lighter for more reps. Putting a=-5 the reps would be 8 instead. So a person who find it easier to lift heavy might want a negative "a" value. A person who finds it easier to lift light for more reps might need a positive "a" value. As a standard, how the formula was originally created a=0)

You can also solve the equation for M_2 if you want to find the new weight given reps instead.

I believe it would be valuable for you to take a look at the RP app, to see how it handles it (and handles other aspects related to algorithms)

...

The new UI looks nice! Seems you already have more features planned than many available apps, I believe this will be great. Also having different choices for progression seems like a nice option to have down the line.

WhyAsh5114 commented 2 months ago

Great! Thanks a lot for the info, will look deeper into it. Maybe we could set a default algorithm based on the exercise type (rep range and stuff), it'll be customisable of course.

I do want to see how the RP app handles all this, but it's quite expensive for me, that's why I made this in the first place 😅. But there seem to be many options for progression, looks like I'll have to work a bit more than I expected on the progression algorithm part... Fun stuff though!

patrick-b-c commented 2 months ago

Forgot to mention, if you're using the formula I provided as an example, initial values of F could be determined by the user selecting their experience level ("Completely New" F=1.025, "Beginner" F=1.015, "Intermediate" F=1.0075, "Advanced" F=1.0025 or something similar). Initial value of a could just be a=0. There would also be some logic needed to be implmented as the suggested reps would often be a decimal, you'd probably have to average the increase in reps for all the sets, then distribute them (or something like that).

If one would go completely overboard, you could then use the proxy feedback to adjust F down the line, and/or I also believe you could use multivariate regression to estimate F and/or "a" based on how previous workouts progressed.

Regarding the RP app: Well just one more reason for opening up for donations :D. Hopefully enough people would donate for you to be able to buy a month or so of the RP app, so you can get some inspiration.

WhyAsh5114 commented 2 months ago

Damn, a lot of options and customisation for the formulae, that's cool, and tbh quite scary to implement... lot of challenges, although thanks for suggesting various ways of adjusting variables! I'm also thinking of creating docs for how the app does stuff, so it'll be easier for curious users like you to understand what's happening in the background and offer suggestions.

I'll definitely add a donations option in the app in v3.