Dig Deep Fitness

By Ben Nadel

Open The App a work in progress

Changelog

Sep 5, 2023
I'm starting to the the foundation for editing and back-filling exercise performances. I'm going to start with allowing single-entry of a prior performance. Then, my hope is to provide a CSV (Comma-Separated Values) upload approach to allow for bulk back-filling of data.
Aug 28, 2023
You can now create exercise variations on-the-fly during a workout (and also from the core list of exercises). This is important because a "neutral grip" chin-up and a "supinated grip" chin-up (for example) actually recruit different muscles (or rather, the same muscles but to a different degree). As such, I'd want to track "performances" for these two exercises separately so that my strength trends remain accurate.
Aug 27, 2023
With the recent increase in stress in my life, I'm reminded that fitness isn't just about the physical aspects of life - mental fitness is also a critical component. As such, I'm adding in a simple gratitude journal. This is my attempt to treat fitness a bit more holistically; and, to feel better (and more grateful) for all the bounty I have in my life.
Aug 24, 2023
I'm starting to play around with the idea of adding a Pain Journal to the app. As much as it ... pains ... me to say it, parts of my body often hurt. Wrists, knees, feet, etc. There might be some value in tracking that pain over time; and, perhaps correlating it with workouts? If nothing else, it might help me become more in touch with my body health.
Aug 22, 2023
When the login-request email is sent out, it now includes the expiration date in the subject line itself. This should help cut down on confusion by preventing email clients, such as Gmail, from grouping different login-requests together. This should reduce the chances that you accidentally click on an old (and expired) login link the next time you go to login.
Aug 16, 2023
I've added two properties to the resistance exercises: equipment weight (think "45"-lbs for a barbell); and, split loading (ie, is the weight loaded on one side or two sides). Together, these will make the weight loading illustration more helpful.
Aug 14, 2023
I've created a way to merge two resistance exercises together. This will move all of the performances from the source exercise over to the destination exercise and then delete the source exercise. Mistakes happen; and, this provides a path forward when you're working with accidentally-created exercises.
Aug 13, 2023
I've created a section of the app to help visualize just how long you've been working in a certain rep-range (for resistance exercises).
Aug 12, 2023
I've added basic list, update, and delete functionality for workout locations. Now you can rename or remove a location that was created in error. Deleting a location leaves the existing workouts in place, but breaks the location association.
Aug 11, 2023
You can now add cardio exercises to a workout! Huzzah! I am not very familiar with the breadth of cardio exercises; so, I am sure there will be much iteration in this area of the app.
Aug 8, 2023
I've added a section for Cardio exercises. You still can't add them to a workout; but, you can see the list of catalog exercises and start building-up your own list. And, on all the various exercise lists (old and new), I've made sure to including rudimentary filtering as well.
Aug 7, 2023
I'm starting to lay down the foundations for tracking cardio exercises. Just as with the resistance exercises, the tracking will be quite loose in terms of data-entry: all open-ended "text" inputs. I'm starting with fields for Duration, Distance, Average Pace, and Calories Burned. To be honest, I know next-to-nothing about cardio, so I'll have to rely on people providing constructive feedback. Plus, cardio exercises are so wildly diverse, I don't think there's any one data model that can really track this stuff with detail well while also being flexible enough for any user to add any arbitrary exercise.
Aug 4, 2023
When selecting the next exercise in a workout, I've added the ability to select from recent workouts. This presents a list of the user's last 30 workouts along with the performed exercises. Much of the time, "today's workout" is just a recreation of a previous workout (with - hopefully - a better performance). As such, being able to quickly choose an exercise from a previous workout will help keep your workouts consistent (if that's what you want).
Aug 3, 2023
I've added the ability to provide alias names for exercises. This is true in both the catalog of exercises and in the user-specific exercises. For example, "Barbell Overhead Press" now has the alias "Military Press". This alias will get consumed in the exercise search keyword matching. The search is also now "fuzzy". As such, a search for "Barbell Press" will now match "Barbell Overhead Press" and "Barbell Incline Bench Press". There's more refinement that I want to do on search; but, this has been a pain-point in my workouts.
Jul 30, 2023
For data-safety, I am now auto-saving the "perform exercise" data in the background as you enter data. This way, you never have to remember to "save" that last set - you can just fire-and-forget.
Jul 28, 2023
Sometimes, it can be hard to translate a given weight into a barbell configuration. To aide in this effort, I've added a visual illustration of what the bar / equipment should look like to the bottom of the "perform exercise" view.
Jul 27, 2023
I am now rendering a "workout streak" representing all of the days in which you did something active. Of course, none of us is perfect; and, messing up a "streak" of any kind can be demoralizing. As such, I've also built-in the ability to "redeem" a missed workout. The validation for redemption is left to the mind of the user - after all, the only one you're trying to impress is yourself!
Jul 23, 2023
On the security front, I'm now logging the last-request date for each active session. This way, when you go to the Security section, you can see which sessions are being used across your devices; and, which sessions you can safely terminate.
Jul 21, 2023
I'm starting to try and incrementally improve the workout experience, which is the primary gesture of the application. I've added some "Tags" to the top of the "Perform Exercise" view that surface the Plane, Laterality, and Types of movement involved in the given exercise. I've also provided a way to edit an exercise directly from the performance page. This will be helpful for editing a newly-created exercise (perhaps in between sets).
Jul 18, 2023
You can now delete an entire workout. This is probably not something you'll want to do very often; but, it's something that I need to do a lot while testing the software.
Jul 17, 2023
So sorry! I had a bug in my "perform exercise" view that was throwing a Null Pointer Exception (NPE). It only showed up the first time you tried to perform an exercise, which is why the issue wasn't immediately obvious to me (I already have loads of test data in the system). This was like in production for the last 4-days or so. But, it has been fixed now!
Jul 13, 2023
In order to make progressing up in weight easier, I am now overlaying the previous workout's weights and reps over the inputs for the current weights and reps. This makes it very clear what your previous performance was; and, what it will take to beat your previous efforts! You can do it!
Jul 11, 2023

I recorded my first workout using the Dig Deep Fitness app! Obviously, there are still many, many user experience (UX) issues at this time. But, at least I have something that actually works. So exciting!

This is a perfect time to reflect on John Gall's Law on Building Complex Systems:

A complex system that works is invariably found to have evolved from a simple system that worked. The inverse proposition also appears to be true: a complex system designed from scratch never works and cannot be made to work. You have to start over, beginning with a simple system.

I am starting small; and, I'm making this system work one update at a time. This gives me confidence that it will actually succeed.

Jul 9, 2023
Weights and Reps can now be recorded in each exercise as part of the workout. There is also a workout "manifest", which allows the user to jump to any exercise within the workout.
Jul 8, 2023
I finally started to lay down the foundations of actually performing a workout. As of now, you can start (or resume) a workout; and, select exercises for that workout. But, you can't actually perform any sets / reps for an exercise. That will be a fast-follow.
Jun 30, 2023
Continuing to flesh-out the management of exercises, you can now edit and delete the exercises in your list. Furthermore, you can finally copy / customize exercises coming out of the catalog. This means that you automatically get all the proper Plane, Laterality, and Movement Type configuration if you use one of the catalog exercises.
Jun 29, 2023

I'm starting to flesh-out the management of exercises. You can see the list of "catalog" exercises (that is, those provided by the system). And, you can create your own exercise; though, there is no way to edit or delete an exercise at this time.

As a reminder, my first pass here is going to have no user-experience (UX) work - it's the least amount of UI that I can get in place that allows me to flesh-out the back-end functionality. Once that is done, I'll come back and build-out a user interface (UI).

Jun 27, 2023
I've been away at a conference all last week, so no progress to report. But, I've decided to commit to the list of exercises. This list can always be tweaked; or, reset entirely. I want to keep the momentum moving forward with the actual heart of the project, which is to track one's own exercise progressions.
Jun 20, 2023

UPDATE: I've included the current list of exercises at the bottom of this page. This should provide a better illustration of how I'm thinking about organization the data.

I have all the low-level data-access in place for creating and tracking workouts. Now, I need to populate the "catalog" of exercises. This has been a particularly hard task as naming is crucial. I want to have a naming scheme that makes sense without being overly pedantic.

In an ideal world, users would find just about everything they need right in the catalog. The catalog is my opportunity to properly configure each exercise with the correct plane of movement, the correct type of movement, the correct laterality of movement, and the correct joint involvement. It's this configuration that will make reporting and introspection of the data much more powerful for the user.

My biggest fear is that people misuse exercises and end up with data that is actually counterproductive (from a reporting standpoint).

One thing that I am struggling with is whether or not to be exhaustively comprehensive in my list of exercise variations. For example, just about anything you can do with a barbell you can also do with a Smith Machine or a weight-stack machine. So, should I include all of those in my catalog? For example, should I include "Barbell Bench Press", "Smith Machine Bench Press", and "Machine Chest Press"? Or, should I simply include "Barbell Bench Press" and then offer a way for the user to Use a Variation on any given exercise?

If the goal is to let the user fall into the "pit of success", I think I would want to err on the side of being comprehensive. But, there are also a seemingly infinite number of machines each with a different variation. For example, some "Chest Press" machines are bilateral (ie, both arms move in unison); and, some machines are unilateral (ie, each arm can move independently). Would both of these machines have to be represented in the catalog? And, if they are not, will the user end up using an incorrect configuration?

Perhaps, the best move is just to include the most common variations for the major movements (ie, chest press, overhead press, row). Or maybe, I should just go to my local Planet Fitness and include any machine that they have.

Jun 16, 2023
I updated the login-request email to be an HTML format email. This should allow me to start creating a more pleasing email experience.
Jun 15, 2023
I've created a "Security" section where you can see a list of all active sessions - that is all of the times you've logged-in across all your devices. From there, you can end any given session; or, you can end all sessions including the current one.
Jun 10, 2023
I've gotten most of the infrastructure bits in place, and I've started to work on some of the simple domain-models so that I can tease-out where things should go and what they should be called. As always, "Naming Things" is one of the hardest parts of software development. The first thing I'm starting with is a "body weight journal", since this is a super simple concept.
Jun 5, 2023
Login / sign-up is now open for everyone. That said, there's nothing to do yet, once you get into the app.
Jun 3, 2023
I believe I have the authentication workflow working with magic links / passwordless logins. It's still only for internal use; but, I think I'll be able to open this up shortly.
Jun 2, 2023
I'm working my way towards allowing a user to login/sign-up. In order to do this, I need to get session management in place, some basic rate-limiting, and a way to send emails. I'll be using Postmark as my SMTP provider - they have been absolutely awesome over the years!
May 29, 2023
I've started to lay down the foundation for request routing and error handling. There are no meaningful routes yet; but, there is a skeletal template and content delivery system.
May 28, 2023
MySQL database datasource is in place. There is no defined schema yet; but, I have confirmed that the application can execute a SELECT against the running database.
May 27, 2023
Basic application settings are in place, as is redirecting from HTTP to HTTPS. For now, I'm using Let's Encrypt to provision the SSL certificates for the application. I've also adding error handling and logging via BugSnag.
May 27, 2023
I've created two private GitHub repositories, one for the www site and one for the app site.
May 26, 2023
I created two sibling sites as subdomains: www. (marketing site) and app. (the fitness application). They don't do anything at all yet - they are just landing pages. Also setting up my local development environment to work with Docker.
May 21, 2023
Teaser page (this one) put in place. I've long had a dream of building myself a fitness app. There actually used to be a "Dig Deep Fitness" that I built in a single weekend back in 2011. But, it was fundamentally flawed in how it was organized (around multiple lifters working out at the same time). I have removed it and I'm starting from scratch.

Evolving List of Exercise Catalog

Name Plane Laterality Shoulder Elbow Wrist Hip Knee Ankle Spine
Back Extension Sagittal Bilateral Extension
Barbell Bench Press Transverse Bilateral Flexion Extension
Barbell Box Squat Sagittal Bilateral Extension Extension Extension
Barbell Clean Sagittal Bilateral Elevation Extension Extension Extension
Barbell Clean And Jerk Sagittal Bilateral Flexion Extension Extension Extension Extension
Barbell Curl Sagittal Bilateral Flexion
Barbell Deadlift Sagittal Bilateral Extension Extension Extension
Barbell Decline Bench Press Transverse Bilateral Flexion Extension
Barbell Floor Press Transverse Bilateral Flexion Extension
Barbell Front Squat Sagittal Bilateral Extension Extension Extension
Barbell Front-Foot Elevated Split Squat Sagittal Unilateral Extension Extension Extension
Barbell Good-Morning Sagittal Bilateral Extension
Barbell Hanging Clean Sagittal Bilateral Elevation Extension Extension Extension
Barbell Incline Bench Press Transverse Bilateral Flexion Extension
Barbell Lunge Sagittal Unilateral Extension Extension Extension
Barbell Narrow-Grip Bench Press Sagittal Bilateral Flexion Extension
Barbell Overhead Squat Sagittal Bilateral Extension Extension Extension
Barbell Pull-Over Sagittal Bilateral Extension
Barbell Rear-Foot Elevated Split Squat Sagittal Unilateral Extension Extension Extension
Barbell Reverse Lunge Sagittal Unilateral Extension Extension Extension
Barbell Romanian Deadlift Sagittal Bilateral Extension Extension Extension
Barbell Row Transverse Bilateral Extension Flexion
Barbell Seated Overhead Press Frontal Bilateral Flexion Extension
Barbell Shrug Frontal Bilateral Elevation
Barbell Single-Leg Romanian Deadlift Sagittal Unilateral Extension Extension Extension
Barbell Snatch Sagittal Bilateral Elevation Extension Extension Extension
Barbell Split Squat Sagittal Unilateral Extension Extension Extension
Barbell Squat Sagittal Bilateral Extension Extension Extension
Barbell Standing Overhead Press Frontal Bilateral Flexion Extension
Barbell Step-Up Sagittal Unilateral Extension Extension Extension
Barbell Stiff-Leg Deadlift Sagittal Bilateral Extension Extension Extension
Barbell Sumo Deadlift Sagittal Bilateral Extension Extension Extension
Barbell Upright Row Frontal Bilateral Abduction
Barbell Walking Lunge Sagittal Unilateral Extension Extension Extension
Barbell Zercher Squat Sagittal Bilateral Extension Extension Extension
Bench Dips Sagittal Bilateral Flexion Extension
Cable Chest Fly Transverse Unilateral Flexion
Cable Narrow-Grip Row Sagittal Bilateral Extension Flexion
Cable Rope Curl Sagittal Bilateral Flexion
Cable Rope Overhead Triceps Extension Sagittal Bilateral Extension
Cable Rope Triceps Push-Down Sagittal Bilateral Extension
Cable V-Bar Triceps Push-Down Sagittal Bilateral Extension
Cable Wide-Grip Row Transverse Bilateral Extension Flexion
Chin Up Sagittal Bilateral Extension Flexion
Dumbbell Alternating Curl Sagittal Unilateral Flexion
Dumbbell Bench Press Transverse Unilateral Flexion Extension
Dumbbell Chest Fly Transverse Unilateral Flexion
Dumbbell Concentration Curl Sagittal Unilateral Flexion
Dumbbell Decline Bench Press Transverse Unilateral Flexion Extension
Dumbbell Front Shoulder Raise Sagittal Unilateral Flexion
Dumbbell Hammer Curl Sagittal Unilateral Flexion
Dumbbell Incline Bench Press Transverse Unilateral Flexion Extension
Dumbbell Lateral Shoulder Raise Frontal Unilateral Abduction
Dumbbell Lunge Sagittal Unilateral Extension Extension Extension
Dumbbell Lying Triceps Extension Sagittal Unilateral Extension
Dumbbell Preacher Curl Sagittal Unilateral Flexion
Dumbbell Pull-Over Sagittal Bilateral Extension
Dumbbell Reverse Lunge Sagittal Unilateral Extension Extension Extension
Dumbbell Reverse Shoulder Fly Transverse Unilateral Extension
Dumbbell Romanian Deadlift Sagittal Bilateral Extension Extension Extension
Dumbbell Seated Overhead Press Frontal Unilateral Flexion Extension
Dumbbell Shrug Frontal Unilateral Elevation
Dumbbell Single-Arm Row Sagittal Unilateral Extension Flexion
Dumbbell Single-Leg Romanian Deadlift Sagittal Unilateral Extension Extension Extension
Dumbbell Standing Overhead Press Frontal Unilateral Flexion Extension
Dumbbell Step-Up Sagittal Unilateral Extension Extension Extension
Dumbbell Walking Lunge Sagittal Unilateral Extension Extension Extension
EZ-Bar Curl Sagittal Bilateral Flexion
EZ-Bar Lying Triceps Extension Sagittal Bilateral Extension
EZ-Bar Preacher Curl Sagittal Bilateral Flexion
EZ-Bar Reverse Curl Sagittal Bilateral Flexion
Goblet Squat Sagittal Bilateral Extension Extension Extension
Horizontal Leg Press Sagittal Bilateral Extension Extension Extension
Horizontal Single-Leg Leg Press Sagittal Unilateral Extension Extension Extension
Incline Leg Press Sagittal Bilateral Extension Extension Extension
Incline Single-Leg Leg Press Sagittal Unilateral Extension Extension Extension
Inverted Row Transverse Bilateral Extension Flexion
Lat Pull-Down Frontal Bilateral Extension Flexion
Lying Leg Curl Sagittal Bilateral Flexion
Lying Single-Leg Leg Curl Sagittal Unilateral Flexion
Machine Assisted Chin Up Sagittal Bilateral Extension Flexion
Machine Assisted Pull Up Frontal Bilateral Extension Flexion
Machine Chest Fly Transverse Unilateral Flexion
Machine Chest Press Transverse Bilateral Flexion Extension
Machine Hack Squat Sagittal Bilateral Extension Extension Extension
Machine Lat Pull-Down Frontal Bilateral Extension Flexion
Machine Lateral Shoulder Raise Frontal Unilateral Abduction
Machine Preacher Curl Sagittal Bilateral Flexion
Machine Reverse Shoulder Fly Transverse Unilateral Extension
Machine Seated Overhead Press Frontal Bilateral Flexion Extension
Machine Seated Row Transverse Bilateral Extension Flexion
Machine Triceps Extension Sagittal Bilateral Extension
Nordic Hamstring Curl Sagittal Bilateral Flexion
Parallel-Bar Dips Sagittal Bilateral Flexion Extension
Pull Up Frontal Bilateral Extension Flexion
Push-Ups Transverse Bilateral Flexion Extension
Rope Face Pull Transverse Bilateral Extension
Seated Calf Raise Sagittal Bilateral Extension
Seated Hip Abduction Frontal Bilateral Abduction
Seated Hip Adduction Frontal Bilateral Adduction
Seated Leg Curl Sagittal Bilateral Flexion
Seated Leg Extension Sagittal Bilateral Extension
Seated Single-Leg Leg Curl Sagittal Unilateral Flexion
Seated Single-Leg Leg Extension Sagittal Unilateral Extension
Smith Machine Bench Press Transverse Bilateral Flexion Extension
Smith Machine Decline Bench Press Transverse Bilateral Flexion Extension
Smith Machine Inline Bench Press Transverse Bilateral Flexion Extension
Smith Machine Rear-Foot Elevated Split Squat Sagittal Unilateral Extension Extension Extension
Smith Machine Seated Overhead Press Frontal Bilateral Flexion Extension
Smith Machine Split Squat Sagittal Unilateral Extension Extension Extension
Smith Machine Squat Sagittal Bilateral Extension Extension Extension
Standing Calf Raise Sagittal Bilateral Extension
Standing Single-Leg Calf Raise Sagittal Unilateral Extension
Straight-Arm Lat Pull-Down Sagittal Bilateral Extension Flexion
T-Bar Narrow-Grip Row Sagittal Bilateral Extension Flexion
T-Bar Wide-Grip Row Transverse Bilateral Extension Flexion
Underhand-Grip Inverted Row Sagittal Bilateral Extension Flexion
Underhand-Grip Lat Pull-Down Sagittal Bilateral Extension Flexion
Vertical Leg Press Sagittal Bilateral Extension Extension Extension