Blog Post #2
My team and I just finished the project plan for our CS 467 Capstone project: myFitnessTracker. This will be a cross-platform (iOS and Android) app that serves as a personal trainer. A user will fill in
- their desired fitness goals (gain strength, gain flexibility, etc.)
- current fitness level (beginner, intermediate, advanced)
- any modifications they may require (lower-body only, upper-body only)
- number of days they want their plan to last
Then, the app will generate a list of gym-based exercises per day for the number of days specified by the user. The user will log in each day and start their workout. The app will have a stopwatch that the user can use to time each exercise, then the user will record metrics like reps and sets (if the exercise is weightlifting-based) or speed and incline (if the exercise is cardio-based).
The specs for this project are based on the Cross-platform Personal Trainer App requirements listed on Oregon State University’s project portal site.
The Tech
- Why did you and your team choose the technologies you did? How will your project use them? What are their pros and cons? What were the alternatives?
- Frontend: React Native (Javascript)
- We chose this because React Native will allow us to develop for Android and iOS using just one codebase (Javascript with React elements).
- Pros
- One codebase enforces DRY (don’t repeat yourself).
- There are a lot of resources (YouTube, web tutorials, etc) to learn this.
- Cons
- I have not worked on app development before and have not worked with Javascript recently, so it will be a steep learning curve for me.
- Alternatives
- We were looking into Dart and Flutter as the other team members have previously used that in CS 492 Mobile Software Development. However, we decided to use React Native due to its portability and due to it being in-demand in the industry.
- Backend: Firebase (Cloud FireStore, Cloud Storage, Authentication)
- We chose this because Firebase offers a diverse array of backend services in the cloud that work together. We’ll use it for general database usage, storage of image files for our user’s avatars, and user authentication.
- Pros
- Firebase is developed by Google and there is a lot of great developer documentation.
- All Firebase products can talk to each other, so it’s like a one-stop-shop for all our backend needs.
- Cons
- While Firebase documentation is great, we’ll need to source reliable Firebase + React Native documentation.
- Depending on how many calls we use, we may need to pay for this.
- Alternatives
- MySQL. This would be easy to set-up and use, but it would only provide local database storage. We’d like to utilize cloud backends for reliability and redundancy. This would also not account for robust authentication (ex: saving username and password in local db –> how to authenticate on another device?).
- Deployment: Expo
- We chose this because we can deploy to Android and iOS using just one system.
- Pros
- It’s quick. We won’t need to download any new software to ensure proper deployment to iOS and Android.
- We may be able to utilize the web-based IDE, allowing us to quickly work with functioning prototypes.
- Cons
- Some of the features we want may be behind a paywall; we’ll find out!
- Alternatives
- Expo is recommended by React as the beginner-friendly way of deploying apps. As an alternative, the React docs mention React Native CLI. However, this would require downloading XCode and Android Studio.
- Frontend: React Native (Javascript)
The Design
- What do you like or dislike about your system UI/UX?
- We created our UI screens in Figma collaboratively. I love how easy it is to understand what’s going on. Without reading the description of the project and by just looking at the screens, the purpose and usage of the app are intuitive. For example:
- What do you like or dislike about your server/backend system/API?
- I like how Firebase is cloud-based. This will not only allow the user to sign in and off on one device and repeat it on another, it will also allow the developers to work collaboratively. I think it will make it easier for us to log into Firebase and view how the database, and authentication are working without having to do stuff like pip install.
- What do you like or dislike about your design modularity? Does it enable each of your to work independently?
- I like how we have distinct components and actions (exercise database, user authentication, dashboarding past exercise metrics, etc.). This will allow us to each independently work on a component and action. We’ll use GitHub and continuous integration to ensure any changes we propose to make will pass regression testing.
Conclusion
A lot of the tech stack is going to be very new to me. I anticipate steep learning curves, but I’m excited to learn and collaborate with my team! I know that we’ll able to consult with one another. I’m also anticipating design and tech changes as we progress; it’ll be interesting documenting the changes that end up happening.
Leave a Reply