Gymetrics Titelbild

Gymetrics | self-hostable fitness tracker: semester one progress

Von am 21.01.2026

Here, I would like to present the progress I have made over the past semester. My objective was a rather simple idea: to build a simple application that could be used to track performance and progress at the gym. The challenge was that the application had to be deployable by anyone on a server via Docker. The container should contain the database and the entire backend of the application, making it easy to set up and use.

Goals

As the Key Goals I identified some Basic Functionality I wanted to have completed at the end of the Semester:

  • Help people to store their own data on their own systems
  • Develop a functional App with Ionic and Angular
  • Build a good foundation that could be expanded with other features later

Progress

During development, I encountered some setbacks which slowed down the process slightly. However, I fundamentally achieved everything I set out to do. I developed and implemented a really good RESTful backend foundation that can be used to build future features on top of, and it was designed with expansion in mind. Furthermore, I developed a coherent design language for my Ionic frontend application.

Features

The fundamental concept of my app is creating and tracking workouts. This is achieved as follows:

First, you can create a template in the Workout section. Then you can assign a title and description with a specific character limit. Then you can plan different exercises, each with a distinct weight and number of repetitions. In future, I also want to include options for choosing the length or time of a single exercise instead of the weight or reps. Once you have created the template, you can save or discard it, or delete it completely.

Once you have created the different templates, you can assign them to different dates in the Calendar tab. This tab is currently under construction and will be improved for better readability in the future, but it is like this for reasons of time constraints. Here, you can select a template and a workout, which will then be added to the calendar on this date.

Once you have created the training, you can go to the ‘Home’ page to see when your next training session is scheduled and to start it. While started you can edit the done weight and reps and save it after you are done with the exercise:

Conclusion:

I was surprised by how much effort it took to get to this point. Building something from the ground up with many future features in mind broadened the scope of the initial project setup, and this wasn’t easy for me. The backend in particular took some time because I wasn’t very familiar with the framework and the concept as a whole. Setting up everything in Docker containers and making them communicate with each other also took some time, but it wasn’t as challenging as the other parts because I have some experience with this technology already. So what have I completed from my inital Goals and what have i learned? In my project description, I stated that my app should contain account creation, repetition scheduling for training sessions, and a customisable point system.

  • Creating an account was not really a problem. I also enhanced the security of the application by implementing authentication via a short-lived JWT (JSON Web Token) and a refresh token that could be used to refresh the JWT and extend the active session, thereby preventing the user from having to log in constantly.
  • During the development process, I questioned the point of having recurring training sessions, as I prefer to plan my training in advance, but my schedule changes every week. I would also like to be able to adapt the template or adjust the weights or repetitions according to my performance in the previous session. As this feature didn’t make much sense, I changed it so that I can create training sessions by clicking on the calendar.
  • Sadly, the customisable point system fell a little short due to my limited time, but I still want to implement a good statistics system in the future. I’ve also prepared everything for the factor that I can apply to each exercise to alter the ‘score weight’.

But what have I learned?
I’ve learned the hard way that planning is absolutely everything, no matter how big your project is. The database structure and the architecture of an application are important things to consider when starting a new project, and will save so much time during development. I’ve also gained a good understanding of NestJS and its use with MongoDB, although there’s still a lot more to learn.

Outlook and future Features

Not only because i want to use this application for myself in the future but also because i really had fun programming it i have many Ideas for the next features.

  • Firstly, I would like to create a better calendar page for creating new workouts and viewing a weekly overview of future training sessions.
  • Another important feature would be the ability to reset your own password and confirm your email address.
  • I want to implement scoring and analytics for my workouts to track
  • I also want to add a locally connected LLM through Ollama to recommend training, exercises or tips based on completed workouts and user profiles containing all the relevant health data.
  • Improve the security within the Docker Network and the instances itself

Beitrag kommentieren

(*) Pflichtfeld