A year ago, I was just starting to get back into running. After every other day of class, I would meet my friends at USC Village and push myself to run harder than the week before. Running kept me fit and active, but it also kept me connected. Then the pandemic made meeting in person dangerous, and my motivation, and connections, dissolved. That's where the idea for Bolt was born - it came from a desire to motivate, challenge, and connect people, to create that spark despite the large distances between us. As the pandemic progressed, the need for such a technology has only grown; more than ever, people need exercise to stay in good health, and Bolt provides one such platform for like-minded individuals who want to connect on the basis of exercise.
Bolt – the app where runners meet – lets you make connections through running. As you log in, you enter fitness data, like your fastest mile time, height, and age, and using Machine Learning, we generate your ideal running partner. Things don't stop there! We give you 30 seconds to catch your breath before throwing you and your partner into a race! Push yourself to beat your partner at the mile and 5k, or support and encourage each other by running together. You can also review your activities and see the profiles of people you run with to connect with them later! Don’t worry about your running ability; this app is meant to be accessible to everyone regardless of skill level in order to aid individuals in finding running partners to push them as they get back in shape.
Bolt was built using Android Studio and Java for our front-end, Flask and Heroku for our back-end, and Firebase Cloud Firestore as our NoSQL database. Some of our members were familiar with Android development, and the Our team came into this hackathon wanting to learn Google Cloud technology, so we jumped at the opportunity to work with Cloud Firestore.
The largest challenge we ran into was by far storing and retrieving data in Firestore. At one point, our code was working perfectly, and then all of a sudden, began throwing exceptions everywhere with no changes made to it. This instance aside, we also had to ensure Firebase calls were properly sending and receiving data asynchronously, ensuring our main UI thread was not being bottlenecked. These two aspects of our project took far longer than we anticipated to fix, however the perseverance was worth it; continuing to use Firebase Firestore as our NoSQL database was the perfect solution to creating real time connections between people, promoting a cooperative exercise experience for people around the world.
Big challenges yield significant rewards. As we were attempting to track our users’ locations in realtime and update Firebase in a timely manner, we had to extensively plan out how we wanted to store and track user locations to provide real time competitive updates. This is not something that we expected to work on our first test, however it did! Walking outside with our app installed on our phones, we started a new competition, our match-making server provided us with a match, and we began our first competition. Location was tracked properly, Firebase was updated timely, and we were able to have a new type of connection that the pandemic has prevented for these last few months; we were able to exercise competitively in real time through our phones!
The main piece of coding knowledge we gained was how to use Cloud Firestore, especially for an Android application. We also learned how to storyboard our application using Figma.
In the effort to create lasting connections between people, one of our next steps will be to increase the amount of interaction possible via the application, such as a friend/rival system and chat functionality. We also want to implement a notification system that lets the runners know when their opponents are a certain distance away from them, to increase the feeling of running with someone. At the moment, we only support runs with one other person, but since running with a group is so fun, we have plans to develop a group race activity that can be planned in advance. Another interesting extension of the run-with nature of our application is the possibility of running with and against simulated opponents! We can use the run data of famous athletes to create virtual runs – just imagine “Competing with Kipchoge”.
Import the project into Android Studio, ensuring that you use Android API Build Version 29 to compile the project. Enable location and internet permissions, sign in with Google, and then create a match!