We thought it would be cool to learn React Native in 24 hours and use Google Cloud Platform for once. We wanted to be challenged and build a sizable app in a new mobile framework and a new database.
What it does
We wanted to provide a social media app that would encourage people to go to the gym with their friends and stay healthy! We created an app that would incentivize sharing workouts with friends, favoriting their friends workouts and checking into the gym.
How I built it
For the backend, we used a bunch of Google Cloud Platform services including Cloud Run for our microservice/business logic, Docker for containerization and Container Registry to hold our Docker containers for ease in deployment to Cloud Run and a nice bash script that deployed everything for us with preset environment variables. We also used MongoDB as our persistent data store and used mLab to host our MongoDB server so we would be eligible for the competition.
For the front end, we used React Native with Expo to create a cross-platform mobile app. We had never used React Native before, but have heard about its growing popularity. We decided to use Expo because we found the managed workflow to be well worth out time as it encouraged rapid development.
Challenges I ran into
MongoDB was very hard to work with. It was late and we were getting grumpy and did not read the error messages carefully. After some time off, we realized our mistakes are were able to properly save complex objects in MongoDB.
There were a few things in React Native that were different that React DOM which is what we were used to. We had to make sure the stuff that we were trying to port from React DOM still worked in Native.
Accomplishments that I'm proud of
We were actually able to connect, deploy and use a custom backend API from the React App. All the CRUD operations were there and you can actually use the app pretty well.
What I learned
Read your error codes. They're not always bad. They actually hold good information for debugging.
What's next for GymRat
We have to finish it!