An AI driven gym app aimed to help people with some degree of limited mobility to start their gym journey.
Anya Nese, Camille Catalos, and Rhea Kapadia
Backend Developer, Project Manager, and 1 of 3 Designers
Express.js + EJS + CSS + OpenAI + Pinecone + Firestore + Google Authetication + Github + Jira + Womp + Figma
2024
Process
Our timeline for this project was 4 weeks, given our very limited time we had to be mindful on how we approached our problem. As a result. our time was split into research, definitions & design, and development.
Research
The team started by researching, we needed to understand our user to even begin writing down what requirements were needed for the app. This mostly looked like researching on reddit about current users and their complaints, researching our competitors, and asking family/friends about their gym preferences.
We found that most users want a higher degree of customization. There was a general consensus that the pain point for current workout apps is that users are not able to filter out exercises they cannot perform. With reddit users stating "I can't jump", "I can't lift heavy", "I can't stand on one leg", "I can't get on the floor", etc.
Through our research we were made aware how important it is to show empathy through our product. Every single user is going through a different stage of their personal journey. Having a disability is incredibly difficult and our last goal was to make their lives even more difficult.
Defining the App
Once we knew the problem we were trying to solve, we set out to define the app. Mapping out features, designing the site, and deciding the technology to be used.
Time was our biggest issue on this project, everyone on the team was eager to create innovative features that would revolutionize the traditional gym experience. However, with about two weeks reserved for coding we had to start off with the basics, consequently, our core feature was an AI based workout generator. The carousel below showcases some of the potential features that we identified and organized based on difficulty, and thus time.
Once we defined the features of our app, the design process began. I took the lead in establishing the site’s "brand," which included creating the logo, 3D mascot, slogan, color scheme, fonts, overall inspiration, and the site's visual identity. I primarily served as the backend developer for this project, therefore I made sure that design tasks were aligned with my team member's coding skills and comfort levels. As a result, I focused on designing simple pages such as the landing page, sign-up, login, locations, and workouts, while my teammates worked on other pages that they would take the lead in for front-end development.
Another critical task for the week was selecting the technologies for our project. Identifying a suitable exercise API proved particularly challenging, as finding a free API that included exercise names, descriptions, equipment, muscle groups, and video content exceeded our initial expectations. Ultimately, we decided to use Express.js for the backend, based on the team’s collective experience. For our database, we chose Google Firestore, and to maintain consistency within the Google ecosystem, we implemented Google Authentication for user login.
Figma Design
Coding
The next two weeks were dedicated to coding. By this point, our team had hit its stride. We maintained a consistent rhythm, meeting at least once a week throughout the project and increasing the frequency whenever challenges came up. Communication remained constant as we stayed connected through our Discord channel, ensuring everyone was aligned and progress stayed on track.
I made sure to set up the barebones of the site prior to these two weeks, with the required data being sent to each page, so the entire team could jump right into work. To implement our custom AI workout generation feature, I leveraged RAG. Supplementing OpenAI with exercise data retrieved from RapidAPI, which is indexed and vectorized through Pinecone. As a result, users are able to select their target muscles, available equipment, and number of exercises and our AI will generate a workout plan for them by indexing and vectorizing the request and matching it up with our exercises.
I initially wanted to utilize Amazon Bedrock to implement the entire RAG functionality for it's convenience, I had it set up with stretches and strength training exercises. However, the main caveat for this was that the data I had supplied to it included research articles about stretches and a table containing strength training exercises. This meant that I was unable to utilize the stretches data anywhere else on the web app. Unable to find a stretches database we decided to solely focus on strength training and pivot to OpenAI and Pinecone. In this case, AWS would have been perfect for implementing a chatbot, not the functionality we set out to develop.
Solution
A web app to make the gym experience more accessible, featuring:
AI workout generator
Customizes workouts based on available equipment, target muscle groups, and desired number of exercises.
User created workouts
Allows users to build and save their own routines.
Pain point tracking
Enables users to log and monitor discomfort or injuries.
Future goal: integrating this data into workout recommendations.
Location-based equipment settings
Users can define available equipment for different locations (e.g., home, gym).
Manual workout tracker
Users can track which days they have worked out.
Final Solution
Takeaway
Overall, our team successfully developed a workout app that emphasized accessibility given our tight timeline. I would like to continue with this idea, approaching the challenge from a UX perspective compared to a software engineer one. I believe this will further our agenda and open doors for possible improvements.
While I am proud of what we have created, this project has opened up a whole array of questions that we did not address. Additionally, I hope to enhance accessibility by integrating user pain points into AI-generated workouts and adding a stretch database for mobility, balance, and flexibility—features we couldn’t implement due to time constraints.
Finally, stepping into the role of project manager allowed me to sharpen my communication skills and gain a deeper understanding of the project's scope and impact. As a leader, I wanted team members to be vocal and collaborative, to do so, I made sure our team was clear of our goals from the start and asked a plethora of questions. This enabled us to be on the same page, to make decisions as a team, and allowed us to depend on each other.