astashov / liftosaur Goto Github PK
View Code? Open in Web Editor NEWWeightlifting tracker app for coders
Home Page: https://www.liftosaur.com/about
License: GNU Affero General Public License v3.0
Weightlifting tracker app for coders
Home Page: https://www.liftosaur.com/about
License: GNU Affero General Public License v3.0
Noticed a handful of basic exercises missing.
I am a set x rep evangelist.
Hi! I was trying out the multi-week program builder (great feature btw, it's going to simplify my current program a lot. No more having a "week" variable on each exercise lol) and I made a typo, I hit Ctrl+Z and the whole program got reset.
I'm attaching a video below but basically what happens is: if you hit Ctrl+Z at any point on the program creation screen the whole program gets reset (I think it creates a new one? Just realized that on my video once it resets the id changes...). It happens even if you have clicked "Save" when creating an exercise, it just wipes everything out.
I'm not sure if it happens on all browsers, I'm running Firefox 117. Not sure if it was happening before or if it's a new bug either.
Here's a quick video: https://github.com/astashov/liftosaur/assets/106948293/191e8678-9284-499d-b74d-16ccf8de6872
Hi @astashov is it possible can you implement this feature, you can prompt state variables at the beginning of a set and then during your workout the set can be manipulate either add or subtract a sets based on the logic you make with prompted state variables
5/3/1 uses a 'Training Max' for each 'main lift', and uses a percentage of that weight for a set.
For the template '5/3/1 for beginners', instead of a Training Max, the 1 Rep Max is used. While workable, a separation the testing (1RM) and training (TM) is neater.
I would like to suggest to add global
states along side normal state
s. I.e. global.squatTM
and global.benchTM
. These values would be accessible by all exercises in that program, regardless of day/week.
Hi @astashov,
I'm testing the updated app on Android but I cannot import my data backup from the PWA into the android app.
The problem is the following: when I click either the import data from file
or import program from file
nothing happens. There no dialog popup or anything.
I suspect this could be a permission problem since I'm on Android 13 (GrapheneOS), but liftosaur never prompted for storage permissions.
Thank you!
Right now depending on the program, creating new exercises take a few too many clicks. I would like to set some global or per program (whatever makes sense to implement) defaults where I can set defaults for "Enable RPE", "Enable Rep Ranges", "Log RPE", "Enable Exercise Rest Timer". Right now the defaults don't match what I want and having to select all these for every exercise is time consuming.
This was also not ideal going from Workout Planner to Liftosaur because I had to go through each exercise and set to set these values.
I don't know if it's just me, but in the past few weeks everytime I visit liftosaur.com it takes ages to load the website.
Doesn't happen on other sites that I visit, so it might be a problem with your website, I guess.
Thanks for creating this beautiful app, discovering it was definitely my highlight of the year!
Hello, I want to start by saying this is an amazing app and it's definitely helped me get back into the gym.
One feature I would love to have is the ability to assign a different rest time for each exercise. So for example, for squats I might want to rest 3 minutes between each set but for dumbbell curls only 1 minute. The existing timers for warmup/workout are good but I always have to do the manual adjustment of adding or removing 15s at a time to get the actual rest time I want.
Thanks again for all the work you've put into this app!
I just started using the app (I'm absolutely stoked btw) and wrote down my current program (Madcow 5x5).
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)
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?
If it is the current behavior, I'd suggest the following feature:
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.
Me again, another thing I noticed. When modifying the exercise weight within a workout, if you click the cross (and not done) it will still update the weight, I would expect the changes to only apply if clicking done, and not clicking cross.
Steps to reproduce:
Hi @astashov
I fully support the decision to monetize the app, since it is on par and many times much better than proprietary apps. The functionality and design are really amazing!
However, for users that do not have Google Play Services (GPS) on their phone, buying a subscription or redeeming a code is not possible. This is unfortunate, because coincidently, most users who do not have GPS on their phone are FOSS supporters who are actively searching for a FOSS gym app.
Therefore, I suggest to you two ways to deal with this, if I may:
This app could also be very useful for tracking and programming progression in cardio (in addition to weight lifting) with a few small tweaks.
Hi! I'd love to have an option to pause workouts and finish them later. Right now I can click on the "Finish workout" button and edit it later but the workout duration counter gets updated and I end up with >15h workouts lol. It's not a big problem since (afaik) that info isn't used in the stats or anything like that but it would still be cool to keep the workout duration to the real time spent working out.
Having an option to pause a workout and resume it later on without it affecting the workout duration would be great.
After the recent update I haven't been able to finish my workout. I attached a video showing it.
https://github.com/astashov/liftosaur/assets/16313206/0f08303b-4c34-4b21-8d64-4713ac2c1a34
It would be great if current 1RM was updated automatically when logging a set notated as AMRAP.
For example, the logic could work as follows:
FOR the current reps notated with a "+" for the currently assigned weight
IF there is no existing 1RM (for the above conditions) or if the calculated 1RM is > the current 1RM (for the above conditions)
THEN update current 1RM
IF weight decreases, decrease 1RM based on weight decrease
^^This would only work if you're trying to continually progress / not for planned significant deloads
Not fully fleshed, but the idea is to limit the amount of custom code required for logging 1RM and developing lifting programs
Hello!
I have noticed that this project, although it claims it's open source (and the code is available) doesn't include an open-source license (or I haven't found it).
Can you please decide on one and add it?
Eg. From https://choosealicense.com/, something like MIT or GPL are popular choices. Thanks.
Cc @astashov
Hi! First of all: thank you so much for making this app, it's been great so far.
I've programmed the Jacked and Tan 2.0 workout and everything works fine with one exception: on the last weeks of each cycle the program adds a few more sets to a couple exercises. Right now I've added sets with 0 reps and just plan on filling them with 0s until they're needed but it would be great if there was a way to remove/hide those sets until they are required.
Here's what the program looks like on excel. The blue cells are extra sets that are only used on week 4 and 5:
I written a lot of exercices notes with embed image and links, like:
[![Watch the video](https://img.youtube.com/vi/r8K1Fkch5go/0.jpg)](https://youtu.be/r8K1Fkch5go)
The picture is well displayed in every devices, but the action is different depending the devices:
As a Liftosaur user,
I’d like the progression script to only be run on exercises with >0 sets for the workout,
so that ‘current decrease attempt’, ‘current increase attempts’, and/or weight isn’t changed when an exercise isn’t performed during a workout and I won’t have to manually update my program with the prior values after my workout is completed.
Hey there, firstly wanted to say great work. I've never really used apps for workouts as they tend to lack cuzomizability but really been loving this app.
I've noticed an issue when modifying thestate of a substituted exercise, specifically if you're substituting one within the program.
Steps to reproduce:
If you click edit the whole exercise it seems to work as intended.
Thanks! Would love dig into this myself and help out if I get some spare time :)
When importing a program the equipment available resets to the default values. Here's a video showing the process I did to trigger the reset: https://github.com/astashov/liftosaur/assets/106948293/4b7a7117-bb4f-4b6e-b9cf-fdcdd8f12213
I'm using a local account, not sure if that matters.
I've only tested it on GZCLP, but to replicate:
Same thing happens if you add the exercise to the program before starting the workout.
During a workout my phone screen usually switches itself off, it would be great if it was always on during a workout, or there was an option to enable it
I love the concept of this app. The flexibility of being able to program the progression scheme for workouts is amazing.
The big major feature I feel is lacking still is the ability to create customized weekly schedules for each workout program. For example, to specify a Push/Pull/Legs routine that runs 6 days/week on Mon/Tue/Wed/Thu/Fri/Sat, with Sunday off. This would ideally couple into notifications and enable you to set reminders for specific times to start a workout.
I would like to be able to track additional metrics like
These are just a subset of many possible measurements, so it might be worth allowing custom measurements so users aren't limited to a pre-defined list.
I know this is primarily a lifting app but as long as you aren't trying to sync these stats from somewhere else like Apple Health, I'd expect it to be a simple expansion of existing functionality. If you think this request is a good idea, I'd like to try writing a PR myself.
Hey there,
Recently bought premium to get the notification support in the background for the timer. Not sure why but when my screen is off or I'm in another app, the timer still doesn't update in the background. I switch back to the app and it would be say 0:45/2:00 and then it updates and dings when I come back to 3:15/2:00.
Steps to repro:
Expected behavior:
Timer dings/notifies in the background.
Also don't know if there is supposed to be a persistent notif for the app, but I don't see it either.
Great app so far otherwise!
First, let me start by saying that such an amazingly designed FOSS app like this not getting the deserved attention is unreal.
Thank you for making this app, it looks so much promising really !
I would like to have an account so that I can use the app between devices and be sure that I do not lose my data. However, I do not use Google and as such would like to know if it is possible to add an alternative login option ?
Also, it would be really nice if in the future you added a Self Hosting option, this would attract a lot of the Self-hosting user base who is looking for fitness solutions.
Thank you for your time.
Hi! If there's two exercises with the same variable in them, changing the value of that variable will reset the warmup sets of both exercises.
Here's an example:
https://github.com/astashov/liftosaur/assets/106948293/a4d7b02a-bc20-4462-885b-afd1e1fe4941
Changing the "rm" variable on the Bench Press resets the Squat's warmup sets. I haven't tried but I'm pretty sure it only works if the variable you're changing is set to the first working set (since that's the one that's used to calculate the warmup weights).
Here's the program I used on the video: https://www.liftosaur.com/p/e475c652
https://github.com/astashov/liftosaur/blame/c92050c7bdc6b08caa6e516bb5c6ad530df02a7e/blog/docs/index.md#L338
Seems like it is a copy from dp progression, can you provide a proper example?
Today, using Rep Ranges seems to necessitate the need to use custom progression scripts. If one is using rep ranges, they would most likely consider success to be anywhere in and above the range (i.e., >= minReps).
Automatically leveraging minReps when Rep Ranges are in use would greatly simplify the code required to be written for lifting programs.
The images for the squat have a funny form where the bar doesn't touch the upper back and floats above it to only rest in the fist 😂
https://www.liftosaur.com/externalimages/exercises/full/large/squat_barbell_full_large.png
Like the title, when I create a template exercise the custom progress that I defined for it isn't used by exercises that use that template, attached below is a setup that replicates the issue. When you use this setup in the program playground or in the program itself none of the exercises that use ..base_4_15:Lateral Box Jump
as the template use any progression that the template defines:
# Week 1
## Push
Overhead Press / ...base_4_15:Lateral Box Jump
Chest Dip / ...base_4_15:Lateral Box Jump
Triceps Pushdown, Cable / ...base_4_15:Lateral Box Jump
Lateral Raise, Dumbbell / 2x15, 1x15+ / ...base_4_15:Lateral Box Jump
## Day 2
## Day 3
## Day 4
## Day 5
base_4_15:Lateral Box Jump / 3x15, 1x15+ / 57.5% / used: none / progress: custom(week: 1) {~
var.nextReps = 0
var.nextIntensity = 0
if (completedReps[numberOfSets] > reps[numberOfSets] + 5) {
rm1 = rm1 * 1.03
} else if (completedReps[numberOfSets] > reps[numberOfSets] + 4) {
rm1 = rm1 * 1.02
} else if (completedReps[numberOfSets] == reps[numberOfSets] + 3) {
rm1 = rm1 * 1.015
} else if (completedReps[numberOfSets] == reps[numberOfSets] + 2) {
rm1 = rm1 * 1.01
} else if (completedReps[numberOfSets] == reps[numberOfSets] + 1) {
rm1 = rm1 * 1.005
} else if (completedReps[numberOfSets] == reps[numberOfSets] - 2) {
rm1 = (rm1 - (rm1 * 0.02))
} else if (completedReps[numberOfSets] <= reps[numberOfSets] - 1) {
rm1 = (rm1 - (rm1 * 0.05))
}
state.week = state.week + 1
if (state.week > 6) {
state.week = 1
}
if (state.week == 1) { var.nextIntensity = 95}
if (state.week == 2) { var.nextIntensity = 60 }
if (state.week == 3) { var.nextIntensity = 62.5 }
if (state.week == 4) { var.nextIntensity = 65 }
if (state.week == 5) { var.nextIntensity = 67.5 }
if (state.week == 6) { var.nextIntensity = 70 }
if (var.nextIntensity > 95) { var.nextReps = 1 }
else if (var.nextIntensity > 87.5) { var.nextReps = 2 }
else if (var.nextIntensity > 85) { var.nextReps = 3 }
else if (var.nextIntensity > 82.5) { var.nextReps = 4 }
else if (var.nextIntensity > 80) { var.nextReps = 5 }
else if (var.nextIntensity > 77.5) { var.nextReps = 6 }
else if (var.nextIntensity > 75) { var.nextReps = 7 }
else if (var.nextIntensity > 72.5) { var.nextReps = 8 }
else if (var.nextIntensity > 70) { var.nextReps = 9 }
else if (var.nextIntensity > 67.5) { var.nextReps = 10 }
else if (var.nextIntensity > 65) { var.nextReps = 11 }
else if (var.nextIntensity > 62.5) { var.nextReps = 12 }
else if (var.nextIntensity > 60) { var.nextReps = 13 }
else if (var.nextIntensity > 57.5) { var.nextReps = 14 }
else if (var.nextIntensity > 55) { var.nextReps = 15 }
else { var.nextReps = 5 }
weights = rm1 * (var.nextIntensity / 100)
reps = var.nextReps
~}
Live activities on iOS are the only feature that I really miss after coming from another workout app.
It would be really great to have that in Liftosaur.
Hi,
Love the idea behind this app, thanks for making it.
I think I've found a bug in the script parsing functionality: I get an error when creating a new state variable, unless I'm in the 'true' branch of an if statement. For example, the following two code snippets (placed in the Finish Day Script) both result in Error: Unknown state variable 'someVar':
state.someVar = r[1][4] > 10 ? 15 : 10;
if (completedReps[1] > 10) {
state.someVar = 15;
} else {
state.someVar = 10;
}
However, the following is fine:
if (completedReps[1] > 10) {
state.someVar = 15;
}
Is there a new way to declare state variables that I've missed?
When I have an app in the foreground, the audio notification at the end of timer, pauses my podcast app.
I thought this could be a problem with my podcast app, but when testing it, I noticed that the timer notification didn't go off when the Liftosaur app is in the background.
I shared podcast app logs with the developer and they said that
Logs shows that another app asked for temporary audio focus
The playback will resume as soon as the other app releases the audio focus.
There's no trace of the focus being released in this log file
Hi @astashov !
I used your app pretty much daily from March to August of last year. I now went back to the gym and noticed your app had some updates in the Play Store. I promptly updated the app to find that it now is rocking a really beautiful and upgraded UI.
Plus, it's finally a native Android app. Congratulations on these upgrades, really.
However, to my dismay, I found that the essential features of the app that I was accustomed to use are now behind a paywall that's actually too steep for me to pay.
I did not find anything on this repo or any type of announcement regarding this paywall, so it would be nice to have been notified.
Thank you.
Hi,
I would like to know how you get the image that illustrates the exercices.
Is there a database somewhere or a software to make those illustrations ?
Hi Anton,
When I add note in a specific exercise during the workout, It would be useful to retrieve it directly in the current one - like you do with the last weights.
Also, adding the last time to perform this day in the top menu could be good!
Maybe add the "last exercise comment" just below?
The app is deletes the logged workout repetition when changing the last rep during workout. This can be frustrating because the user has to start over again.
Steps to Reproduce:
Log a workout rep.
Make changes to the last rep weight.
Expected Behavior:
The logged workout rep should be retained, even when the user is making changes.
Actual Behavior:
The logged workout rep is deleted.
Screen Capture:
Hi! I saw the new "Add exercise" button and was testing it during today's workout but when I added the OHP I couldn't save the workout. Clicking on the "Finish the workout" didn't do anything (it might have reset the rest timer, I'm pretty sure I was resting longer than 14s before taking the pic...)
It looks like it might be suck on editing mode? I can see the "+" button but no "Finish Editing" button like I would usually see when editing an existing exercise.
Sometimes, I don't finish my workout sessions and I leave it on-going until the next day and I close the app. The next day, I would open the app with the previous session still on-going and finish the workout session.
After the new update, if I close the app with an on-going session active, it ends the session and doesn't record it.
Love the app by the way! I just have this small issue with it.
At the end of each exercise we already get the total weight lifted it would be nice if the total volume was also displayed.
This is a useful variable to log for people interested in comparing it daily with HR, HRV, hours of sleep etc.
A minor bug: The button "Terms of use" on the Liftosaur Premium page in the iOS app doesn't do anything.
First of all, thanks for creating Liftosaur! Programming with it is a breath of fresh air and so intuitive compared to all the other apps I've used. Workout Planner is so well thought out I couldn't believe it.
I've had a great experience planning my workouts with the Workout Planner page. I find this syntax for creating a workout super convenient, compared to creating each exercise using the UI which takes a lot of clicks.
As I plan my workouts one or two days at a time, I would like to be able to use the Workout Planner syntax to add new exercises to a day and/or new days to a plan. As far as I understand it, right now Workout Planner requires you to define your entire plan in one go and you can't go back and forth from Liftosaur to Workout Planner if you prefer the text-based way of planning.
Is it possible to add an alternative to Add new day and Create new exercise buttons that opens up a text input where I can input my exercises and create them in one go?
Currently the application allows for copying from preset list of programs, it would be really helpful to copy from a previous program that you've created. If this sounds in line with what you've got planned I can do some work on it (my ts/js is a little rusty but I should be able to handle it)
In the gyms I've seen, while barbells/dumbbells are usually in metric, cable and other machines are always in imperial (with a conversion to metric).
Would be nice to be able to specify weight increments in lbs, even though I've setup the app to use metric.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.