Inspiration

Gym tracking apps are filled with advertisements, slow and attached to servers, and often try to convert you to a paid user by withholding tools. We wanted something that lives in the terminal that nerds would like interacting with, and something that if you choose to stop using it you don't loose all of your information. Something fast, minimal, and built for people who think in code.

What it does

ExerThing is a CLI workout logger built in Python. You can start and resume workouts, log sets inline, track exercise history, view personal records, and render any workout as a styled HTML report from an interactive shell.

How we built it

ExerThing was built on Python's cmd module for the REPL shell, with a custom .workout plaintext file format and handmade parser. Rich handles terminal formatting and color-coded output. HTML rendering is pure Python with inline CSS no dependencies beyond rich.

Challenges we ran into

We found it hard to decide on a single file format that's human readable, editable, and reliably parseable. It was also difficult to manage our write-position state (EXER_WRITE_AT) when inserting sets into the middle of an existing file without corrupting the structure. It was also a hassle to implement a sort of pseudo file structure where the user can move between being inside the workout directory to a workout file to an exercise within that file.

Accomplishments that we're proud of

The .workout format is readable as plaintext and you could edit it in vim/nano in a pinch. It's also easily locally renderable. We are also very happy with easily usable our CLI is and the wide range of commands. It's surprisingly easy to navigate, log, and track progress.

What we learned

We set out to understand both CLIs and markdown-like parsers by creating them, and we accomplished it. We now know what is takes to build a CLI and make it usable for the user (with help of help statements). We also learned about the "rich" library and the surprising amount of customization one can do with the terminal.

What's next for ExerThing

We hoped to have advanced progress analytics done by the deadline, but since we didn't make it to that, we will leave it for the future. We also hope to make a local phone app that operates similar to the app "NuMi", where we can leverage NLP to allow the user to make non-explicit commands with regards to logging and viewing history.

Built With

Share this project:

Updates