Liftr
Welcome to Liftr
Liftr is a workout tracking and coaching application that uses biofeedback to tailor workout planning (weight, reps and sets progression) for bodybuilding. Inspired by the match-or-beat algorithm from Renaissance Periodization and Menno Hensellmans' deload philosophy.
The Algorithm
Workouts are planned based on the match-or-beat system. It compares your current workout performance to the previous week's. Tracking performance based on weight, reps, and sets. If performance improves, you keep pushing forward. If performance declines, Liftr alerts you to take a deload for that muscle group. This is a key difference from the Renaissance Periodization app, they schedule week or half-week deloads. But what if only your biceps are overreached? It'd be a waste of time to deload every muscle if only one is toasted. Thats why I chose to do muscle specific deloads triggered by a decrease in performance.
Features
- Workout Management: Easily create, plan, edit, and log your workouts.
- Progress Monitoring: Keep track of your progress and receive alerts when performance dips.
- Missed Workouts Handling: Seamlessly handle missed workouts and get back on track without hassle.
- Customization: Choose from premade plans or create your own.
- Target Display: View target weight and reps for each exercise.
- Add & Remove: Effortlessly add and remove sets, exercises, and workouts to fit your routine.
- Sign in with Nostr: Built a custom auth solution using Nostr signed-messages to verify log in and JWTs for api auth.
- Cardio: I caved and added cardio to my bodybuilding app. I had to run IRL and realized how out of shape I was so now I do cardio.
State Management
Initially this was built purely with useState. I was young and naive and just trudged through the prop-drilling. I didn't learn about other state management solutions until I fell for the rust frontend-backend meme. After learning how miserable front-end rust is (at least I learned about Yewdux) I came back to the original TS implementation and refactored it with Zustand. Now I can add features without wanting to end it all.