Hacker News new | ask | show | jobs
by devinmcafee 1837 days ago
I built a weightlifting workout tracker. I did this because at the time I wrote it (2014) none of the current tools fit my use cases due to the fact that I compete in the sport of Olympic weightlifting and this was still pretty rare back then. I also wanted to be in control of my data and be able to run analysis on it as I saw fit.

I began by writing a django app deployed via heroku. I then decided I wanted to rewrite it in ruby on rails because I had never worked with rails in my career and was already working on django professionally. I then wrote a react/redux SPA frontend, not for any other reason than to practice and learn those libraries. Finally, I decided to buy a VPS and manage deployments myself because I wanted to learn some basic devops stuff myself.

Building and maintaining this project I got first hand experience on building a web application from scratch, designing UX and product requirements, maintaining my own infrastructure (Linux server hardening, supporting SSL, managing my own domain, etc) and got experience in languages I didn't work in professionally. Also I got a few friends to begin using my app and immediately found where my poor UX choices were, which was pretty enlightening.

I think the experience really boosted my confidence as an engineer. I had to learn a whole bunch of new skills and become my own one person startup. In the end it helped me appreciate all that goes into building a software product and highly recommend the experience. I still track my workouts using the app and now have 7 years of data.

2 comments

I’m on the same boat. I’m building a library website for biologists after seeing my girlfriend’s struggles. I have never built anything like this before, or anything at all really.

I decided to use Spring boot because I want to boost my resume and my company hires Java devs. But I’m thinking I should’ve used something more trendy lol.

I’m basically at the point of designing the REST API and I’ll have to go through the same process you went through with the front end and everything else.

It’s a lot of work and the more I progress the more I realize I don’t know, feels like running in a forever elongating hallway but it’s rewarding.

How long did it take you?

I've built stuff to help friends in the past solve issues.

One tip, design 1 functionality on the API, build the UI on it, have your girlfriend try it out and give you feedback.

She'll slowly give you feedback to improve and also ask what other things she might want.

The things we end up thinking are priority (or the fun ones we want to tackle) might not really be priorities for them.

I would work on the project every Sundays for a few hours: sometimes just 1 hour, sometimes as much as 6. After a few Sundays I had a local dev environment running on my computer to be able to track workouts in. At that point I started using my app: I would write my workouts in my phone and then when I got home from the gym enter them into the app running on localhost. After a few weeks of doing that I got fed up and decided I wanted to be able to enter my workouts from the gym via my phone directly, so I spent the next Sunday (or maybe 2 or 3, hard to remember) to learn how to deploy with Heroku. I did a pgdump of my local environment and used that to seed the "production" database running in heroku.

I think one thing which kept me motivated and engaged in the project was that I focused on getting as much value from my efforts ASAP, like a one person agile startup with a single customer (myself). Everything I added had to add some value immediately. I focused on the database modeling and REST APIs and didn't even worry about what the app looked like. When I first began using the app it was a simple multipage web application with basic HTML forms built in Django with no css (literally white background with blue text links and black text). Being able to actually use the app drove me to want to improve it and add new features.

For example: A feature which I wanted, which no app at the time had, was to be able to find my personal records by varying sets and reps. I wanted to answer questions like: What are the most pullups I've ever done in a single set? What's the most weight I've deadlifted for 4 sets of 2 reps? What is the heaviest weight I have ever back squatted for 8 reps? I had the data, I just had to build it into my app. So the first feature I added after being able to create workouts was the ability to look up previous bests. Every time I would workout I would look up my previous best in the app and try to beat it. Being able to track and set new personal records in the gym kept me motivated in my workouts, it was pretty thrilling seeing my project actually pay off for me personally.

An elongating hallway is a good analogy. Every time I found out there was a new thing I had to learn I would be stressed out and overwhelmed, coming up against a hard edge of my knowledge. I would then read a few articles and do some googling, and next thing I knew I was successfully doing the things which originally stressed me out! In my previous comment I mentioned that doing this project increased my confidence as an engineer, which I think was caused by repeatedly bumping up against my limits and then surpassing them.

Thank you for your reply!

That’s an awesome experience and I am taking the same approach. I don’t have a front end yet either.

The thing that keeps me going is looking back and feeling comfortable now with things that a month ago I thought “I have no idea where to start, the quick start guide means nothing to me, how does this work? Why is it like this?” And now I’m like “oh yeah that makes sense” and I can read other people’s code better

I did something very similar using via a flutter mobile app when that was pretty new, and I also still use it every time I lift multiple times per week. Well done!