TrainOn 001: Where to start?

Developer Diary for a training diary WebApp

Short Prequel

Before I can start to explain the idea of TrainOn, I need to make a short outline of myself. I am a data nerd, but I am also really in love with my hobby triathlon. Some of my friends are also into it, so we are training together, talking about it, learning from and helping each other. I really appreciate the time I can spend with this wonderful hobby. And on the other side I really like to program stuff, do deep dives into code and also data, developing processes and pipelines, building dashboards etc.. That comes in handy, since jobs are pretty well paid, but for the last months I wanted more and more to build my own project and learn on this. And this is where the idea of TrainOn comes to life!

The idea of TrainOn

So what is the idea? Basically, the whole purpose of TrainOn is to be a tool helping to keep track of my training data. But not just my training data - for this I could use any other fitness app - I also want to add some notes to it, handling my trainings plan as a training diary. You might question yourself, why anyone wants a diary combined with a dashboard for training data. A long time ago, I would ask the same questions, if somebody told me about this. By coincidence, I bought a book called "The Triathlete's Training Diary" by Joe Friel (look it up - it is pretty amazing) providing pages for you to fill with workouts, some KPIs and notes for each day. I am using this book for a couple months now an I am really appreciating the simplicity of the tracked data and the option to take notes for each training or day. This helps me a lot at the end of a week to reflect and plan the next week. Typical questions are:

  • What should I focus on next week?

  • What did I do this week?

  • Did it feel good, was I making any progress?

  • Is there something that I can do better?

And additionally to this, you can make your own figures and plots for e.g. body weight, training minutes or resting heart rate. So it has a pretty wide range of functions and if you use it all, you gain a lot of information about your training and you are somehow pressured to work with the data that you created while executing the trainings. But there is a downside to it, that brings me to the idea TrainOn: there is nearly no chance to switch easily and browse through the detailed training data when you are looking into the training diary. Instead, in my case, I have to open the training app on the Apple Watch simultaneously and browse through two mediums. The media disruption that I am experiencing doing this is a little bit annoying over time. I really want to click onto the trainings on a day where I e.g. stated in the training diary "today I changed the frequency of my strokes while swimming, it felt better and a little bit faster" to see wether this was a personal impression or wether my strokes were really in a higher frequency compared to other trainings and what impact it had on my speed in the water, etc.. And for this I need a connection between these data. I need a solution that enables the user to write diary entries for trainings, connecting these entries to the trainings detected by e.g. the Apple Watch, helping to plan the season in regards of training workload per week or competitions and keeping track of this plan.

And the shorter reason: I want to learn how to create a WebApp like this.

And how do I start?

There are several key points for this question, I will work through them and protocol my current status with this blog:

  • Start to design / create sketches of the needed pages for the WebApp

  • Start to design / create the workflows for the WebApp

  • Start to design / create the ER-diagrams

  • Set up a backlog to track user stories, technical debt and bugs

  • Learn to work with databases

  • Learn Django (I don't want to use Dash for this)

  • Set up a vague plan for milestones (e.g. diary-section is finished, dashboard-section is finished, data import for Apple Watch is finished)

...and in the end, I will start to code. This will be fun!