SetTracker is a full-stack application designed specifically for strength training enthusiasts. It facilitates the tracking of individual training sets and the grouping of exercises into customized workout sessions.
- Frontend Repository: Contains all code related to the user interface and client-side logic.
- Backend Repository: Houses the server-side code, including API services, database management, and server logic.
Traditional strength training progress is often tracked using a physical journal, which can become cumbersome and inefficient. For instance, if you're doing bench presses regularly, you have to manually flip through pages to find previous records, which is time-consuming. SetTracker eliminates this hassle by digitalizing the tracking process, enabling users to effortlessly access historical data, search for specific exercises, and manage workouts with date and timestamp functionalities.
Frontend
- React Native: A framework for building native apps using React.
- TanStack Query (React Query): Asynchronous state management library
- Axios: Promise-based HTTP client for making requests to the backend server.
- React Native Paper: Collection of customizable and production-ready components for React Native
Backend
- FastAPI: Modern web framework for building APIs with Python.
- Azure Function App: Serverless computing service offered by Azure
- CosmosDB: Fully managed NoSQL, relational, and vector database.
This repository serves as a hub linking to the separate frontend and backend repositories for the SetTracker application. Here's how the project is organized:
- Frontend Repository: Contains all code related to the user interface and client-side logic.
- Backend Repository: Houses the server-side code, including API services, database management, and server logic.
Each sub-repository includes detailed instructions on setting up and running the respective parts of the application. Please refer to each repository for specific setup and installation guides.
This is a basic demo of some features in the app.
Creating a workout folder
Workout Folders allow users to group exercises together into one workout. Take for example a folder called "Legs", you could have all leg related exercises in there. They allow you to build structure around you workouts.
create_workout_folder_demo.MP4
When navigating to our created workout folder, users can add/remove exercises as they see fit, rename folders, and delete the folder if they please.
folder_operations_demo.MP4
Tracking strength training sets
Tracking sets is the main focus of the app. The app groups sets by the date they were performed, allowing users to view their workout history in an intuitive, chronological order. For each exercise, such as '3 sets of 10 reps at 50KG,' users can quickly log the number of reps and weight. A swipe-left feature allows users to effortlessly repeat sets, minimizing the time spent entering data
track_sets_demo.MP4
Changing app appearance
change_appearance_demo.MP4
Adding custom exercise
Pre loaded on the app their is a lot of exercises to choose from, however there still may be an exercise a user wants to track that is not available. No fear, users cans search for the exercise and if no results or found they are greeted with a dialog asking them if they want to create a new exercise. This exercise is then linked to the user it will not be pushed out across the app. This is so other users arent bombarded with exercises that may be of new use to them.
Add sets for a custom time and date Currently time and date of each set is generated and saved on the server as UTC timestamps as soon as they arrive their. This feature would allow users to add sets they might have done the day before but forgot. The challenge updating the add set interface to still be effecient and not be cluttered. Adding sets should not be time consuming as typically you would only be resting for 90 seconds between sets and you dont want to spend that time filling out forms on an app.
View Set History as a Graph This feature would allow users to visualize their progress on a certain lift over a time period on a graph.