Liftr

Welcome to Liftr

Liftr is a full-fledged workout tracking and coaching application that uses biofeedback to tailor weight, reps and sets programming for bodybuilding. Inspired by the match-or-beat algorithm from Renaissance Periodization and Menno Hensellmans' deload philosophy, Liftr ensures your workout progression is always on point.

Tech Stack

Liftr is a T3 Stack project built off create-t3-app, with the following:

  • Next.js: The robust React framework for server-rendered applications.
  • React: For building dynamic and responsive user interfaces.
  • TypeScript: Ensuring type safety and scalability in our codebase.
  • tRPC: An end-to-end typesafe API layer for seamless data handling.
  • Nostr Custom log-in flow to utilize Nostr Pubkeys identities for user authentication.
  • Prisma: Our open-source database ORM for managing complex data structures.
  • Tailwind: A utility-first CSS framework for crafting beautiful interfaces.

The Algorithm

The core algorith is 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 we 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 we 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.