# Created 2023-10-15 Sun 16:28
#+options: toc:t
#+title: kettlebells
#+author: Russell Helmstedter
#+description: README file for iron-cardio cli tool
#+keywords: kettlebells, iron cardio, cli
#+language: en
#+export_file_name: ../README.org

kettlebells is a CLI designed to create, save, and track the progress of kettlebell workouts. The inspiration for this project came from [[https://www.chroniclesofstrength.com/what-strength-aerobics-are-and-how-to-use-them-w-brett-jones/][Pat Flynn's conversation with Bret Jones]]. (For a more detailed look at Iron Cardio, go checkout the [[https://strongandfit.com/products/iron-cardio-by-brett-jones][Iron Cardio Book]] by Bret Jones.) After starting an [[https://github.com/rhelmstedter/iron-cardio][initial project]] that focused only on iron cardio, I wanted to be able to add more. This is essentially a fork of the iron-cardio project designed to add various workouts such as the armor building complex, and dry fighting weight.

In version 0.2.1, the way workouts are constructed has completely changed. This will allow users to construct their own custom workouts in the future. It will also allow the stats to keep track of how many reps of each type of exercise have been done.

* Installation
Use [[https://github.com/pypa/pipx][pipx]]
#+begin_src bash
pipx install kettlebells
#+end_src
* Usage
** Initialize
Run the ~init~ command. This creates the database.

#+begin_src bash
kettlebells init
#+end_src

Next, run the ~setloads~ command. This sets the units to either pounds (lbs) or kilograms (kg), the user's bodyweight, and the loads for the light, medium, and heavy kettlebell. This command can be run as needed when the user is ready to move up in load or bodyweight changes.

#+begin_src bash
kettlebells setloads
#+end_src

** Commands
*** workout
The work out command generates a random workout. The current options are:
- ~iron-cardio~
- ~abc~

**** iron-cardio
The ~workout~ command with an argument of ~ic~, generates a random iron cardio workout.
#+begin_src bash
kettlebells workout ic
#+end_src

Iron cardio workouts are built from the following parameters:

|--------------------------+-------------------------|
| Parameter                | Options                 |
|--------------------------+-------------------------|
| *Single Bell Variations* | Classic                 |
|                          | Classic + Pullup        |
|                          | Classic + Snatch        |
|--------------------------+-------------------------|
| *Double Bell Variations* | Double Classic          |
|                          | Double Classic + Pullup |
|--------------------------+-------------------------|
| *TIMES*                  | 30 mins                 |
|                          | 20 mins                 |
|                          | 10 mins                 |
|--------------------------+-------------------------|
| *LOADS*                  | heavy                   |
|                          | medium                  |
|                          | light                   |
|--------------------------+-------------------------|
| *SWINGS*                 | 0 - 150                 |
|--------------------------+-------------------------|

**** abc
The workout command with an argument of ~abc~ will generate a random armor building complex workout.

#+begin_src
kettlebells workout abc
#+end_src

|--------------------------+----------------------------|
| Parameter                | Options                    |
|--------------------------+----------------------------|
| *Single Bell Variations* | Armor Building Complex 2.0 |
|--------------------------+----------------------------|
| *Double Bell Variations* | Armor Building Complex     |
|--------------------------+----------------------------|
| *TIMES*                  | 25 mins                    |
|                          | 20 mins                    |
|                          | 15 mins                    |
|                          | 10 mins                    |
|--------------------------+----------------------------|
| *LOADS*                  | heavy                      |
|                          | medium                     |
|                          | light                      |
|--------------------------+----------------------------|
| *SWINGS*                 | 0 - 100                    |
|--------------------------+----------------------------|



*** done
The ~done~ command saves the most recently generated workout to the database. The current options are:
- ic
- abc
- btb
- custom


When run with no argument, the ~done~ command will attempt to use the most recently generated random workout. To save a custom workout, add the workout type as an argument. For example, to save a custom Armor Building Complex workout use an argument of ~abc~.

#+begin_src
kettlebells done abc
#+end_src

**** btb

The done command with an argument of ~btb~ will allows the user to save a Back to Basics Workout. These workouts are constructed based on The Pat Flynn Show episode with Dan John [[https://patflynnshow.libsyn.com/the-best-kettlebell-program-for-beginners-the-btbkp][The BEST Kettlebell Program for GEGINNERS | THE BTBKP]]. The choices are ladders of 2-3-5 clean and presses followed by either snatches or double front squats. The warm up and cool exercises are not included in the workout.

#+begin_src
kettlebells done btb
#+end_src

The program options are:

|-------------+----------------------------------|
| First block | Second Block                     |
|-------------+----------------------------------|
| 2 ladders   | 60 Snatches                      |
| 3 ladders   | 80 Snatches                      |
| 5 ladders   | 100 Snatches                     |
|-------------+----------------------------------|
| 2 ladders   | 10 sets of 5 Double Front Squats |
| 3 ladders   | 10 sets of 5 Double Front Squats |
| 5 ladders   | 10 sets of 5 Double Front Squats |
|-------------+----------------------------------|

**** custom
When the ~done~ run is run with the `custom` argument, allows the user to save a custom workout. Custom exercises need a ~workout_type~ and a ~variation~. The default is ~custom~. Exercises can be chosen via a fuzzy finder. Select ~Other~ to add a custom exercise. Select ~Done~ when finished adding all the exercises.

#+begin_src
kettlebells done custom
#+end_src

***** Reps and Loads for Custom Exercises
Unilateral exercises such as the single arm press (simply "Press" in the program) should have the reps doubled. For example, if the set and rep scheme is 3 sets of 8 single arm presses on the left and right arm, that should be saved as 16 reps per set for that exercise.

When the stats are calculated, any exercise that has "Double" in it gets multiplied by 2. So Double Pressing a pair of 24 kg kettlebells results in 48 kg per rep. If using uneven sized bells, use the average weight of the two bells rounded to the nearest integer.

***** Suggested Use for Complexes
Consider a workout out like the [[https://www.youtube.com/watch?v=nHPfglRCp6M&t=13s][8 - 5 - 3 Rep Scheme]] from Pat Flynn. The ~workout_type~ would be "complex", the ~variation~ would be "8-5-3 Rep Scheme". Technically, a set consists of 8 Goblet Squats, 5 Start Stop Swings, 3 Push-ups. Then you would repeat this for 5 rounds. However, in ~kettlebells~ the user will add each exercise separately. So the Goblet Squat would be 5 sets of 8. The Start Stop Swing would be 5 sets of 5, and the Push-up would be 5 sets of 3.

*** last
The ~last~ command displays the last saved workout and calculates the amount of weight moved, the total reps, and the pace (sec/rep).

#+begin_src bash
kettlebells last
#+end_src

*** stats
The ~stats~ command displays the aggregated weight moved, number of reps, and pace for all workout in the database.

#+begin_src bash
kettlebells stats
#+end_src

To plot the weight moved per workout, use the ~--plot~ flag.

#+begin_src bash
kettlebells stats --plot
#+end_src

*** best
The ~best~ command displays the top ten workout based on the weight moved.

#+begin_src bash
kettlebells best
#+end_src

Pass the optional `--sort` command and to sort by the following options:
- weight-moved (default)
- reps
- density
- time
