ABOUT

Flexer is a weight resistance tracker app that allows users to track and record their progress in weight resistance exercises. In addition to tracking their own progress, users can also see the progress of their peers, allowing them to compare and motivate each other. The app is designed to help users set and achieve their fitness goals by providing a convenient and user-friendly way to track and monitor their weight resistance training.

BACKGROUND

Exercise has always been an essential part of my life, and I have relied on various apps to track my workouts over the years. While I have found many aspects of these apps valuable, I have never seen one that truly meets all my needs, especially in a free platform. That’s why I created Flexer — a passion project that will become the ultimate social workout tracker. I started Flexer in 2021 and have continually updated it based on user feedback and experience. In 2022, I committed to using Flexer exclusively for tracking my workouts, and I have been using it consistently, about 3-4 times a week. Through this project, I have learned much about developing a full-stack project from start to finish. It’s been a rewarding journey, and I am grateful for the opportunity to create something that will benefit others.

FEATURES

LOGIN SYSTEM

The login system of the app allows users to identify themselves and manage their accounts. The system includes email verification to ensure that the user is the account’s owner. This feature enables users to access their personal information and change their account settings. It also helps to secure the user’s data and protect against unauthorized access.

WORKOUT TRACKING

The workout tracker feature of the app allows users to create and track freestyle and structured routines. Users can pull exercises from a database or create custom exercises. The tracker also supports supersets and features timed exercise countdowns. Exercise history is recorded and viewed as a graph showing volume over time, either for the current routine or in total. The history also includes personal records, duration, and intensity. Users can also add notes to individual exercises. A summary screen is also provided, showing a comical or inspirational representation of the total weight lifted, the number of exercises completed, the duration of the workout, a pacing graph, and a running total. The current activity being tracked is cached until it is marked as completed to ensure the user cant lose their data if they close the app.

USER PROFILES

The profiles feature of the app allows users to view each other’s profiles and get to know more about each other. It also includes a search feature that allows users to find and connect with new people. The component consists of a follow system that will enable users to keep track of the profiles of other users that they are interested in. This feature allows users to interact and learn from one another and form new connections and friendships. The follower system enables users to stay updated on the activity of other users and see their posts and updates in a single feed. The cloud storage feature of the app allows users to store their data in the cloud, including their profile information such as name, followers, following, profile picture, and verification status. It also allows users to store their previous workouts, workout routines, and custom exercises they have created. The cloud storage also includes an exercise library containing a collection of activities handmade by me. Each movement in the library consists of a name, information on the type of exercise, the equipment needed, the muscle groups it targets, instructions on how to perform the activity, and a picture to help users visualize it. This feature provides users with a convenient and comprehensive way to access various exercises and plan their workouts.

WORKOUT FEEDS

The feeds feature of the app allows users to view the workouts of their peers and the wider community. The following feed shows workouts completed by users that the current user is following and includes a compressed summary and a long-form extensive summary of each training. It also includes pacing and volume graphs to help users visualize the intensity and volume of the workouts. The global feed shows activities completed by all users on the app and includes summaries of each exercise in each post. This feature allows users to stay motivated and inspired by the progress and achievements of others and discover new workout ideas and strategies.

PROGRESSION SECTION

The app’s progress feature helps users track their workouts and stay motivated. It includes a calendar system that allows users to view their past sessions and provides a visual stimulus to help them see their progress over time. The feature also contains leaderboards that enable users to see how they compare to others in terms of workout frequency, time spent exercising, volume, number of sessions, average session length, number of exercises completed, number of sets completed, and other metrics. The leaderboards can help users to get more competitive about their workouts and encourage them to exercise regularly. All workouts are cached to the system for quick number crunching and offline viewing, allowing users to access their progress data even when not connected to the internet.

MESSAGING

The app’s messaging system allows users to communicate with their friends through chat. It also enables users to create group chats with multiple friends, allowing them to have group conversations and stay connected with a larger group. This feature provides users with a convenient way to communicate with their friends and keep in touch with them, whether for social or practical purposes.

WHAT I LEARNED

In developing the app Flexer, I have gained valuable skills and insights. One key area of focus has been the Flutter framework, which utilizes the Dart programming language. Through my work with Flutter, I have become proficient in multiplatform mobile design, including the specific design languages of Android (Material) and iOS (Cupertino). I have also learned how to create easily translatable designs between the two platforms. Another important aspect of my work on Flexer has been the use of Firebase, which has allowed me to gain experience in non-relational database design and the specific Firestore and Fireauth tools. I have also learned about the importance of security rule design in ensuring the app’s security and have gained general principles of server management. Finally, my work on Flexer has also involved the use of SQL, including the implementation of local caching and the principles of relational database design. Overall, the development of Flexer has provided me with a wealth of valuable knowledge and experience in app development.