video demo: https://www.youtube.com/watch?v=L7KCvlDKpQc
I think I'm the fastest in my friend group. My friends, who live a couple hours away, disagree and claim they are. Instead of arguing and debating, we thought it was time to race. Sprintr allows us to find out who really is the fastest with only a phone and a track. For the less competitive, Sprintr also can help casual runners who want to jog with their friends from around the world.
What it does
Sprintr allows users to host running-rooms, where friends can race or jog together, using each user's location. Sprintr tracks distance run and times for each runner, and can store runner progress to view improvement over time.
How we built it
Sprintr uses React Native for the front end, and relies on an Express back end which hosts a websocket server. This server receives and sends real-time data about runners so that friends can received synced, live data about their friends while running together using Sprintr. Geolocation data is used to calculate distance and speed and is communicated between devices. Running progress is stored on CockroachDB and a separate back end was built using Flask to support CRUD operations.
Challenges we ran into
All three technologies we used, React Native, Websockets, and CockroachDB, were pretty new experiences so there were a couple integration difficulties. Merging all three services into one cohesive app was a challenging, but rewarding experience that helped us improve our full-stack skills.
Accomplishments that we're proud of
We are proud of retrieving, processing, and utilizing the location data to mathematically calculate the distance. Through hours of research as well as trial and error, we found a reasonable way to generate decently accurate distance data, which we were able to send and receive using the websocket.
What we learned
We learned the basics of creating a mobile app, and the differences from regular React used for web apps. While mostly similar, there were several distinguishable features that made the front-end design and back-end integration quite challenging. However, this project helped us learn how to adjust our React skills when using React Native to build apps for mobile phones.
What's next for Sprintr
Sprintr has a lot of potential in regards to its social aspects. Originally, the idea stemmed from racing our friends and our competitive spirit. But more runners would likely use the idea for running with friends, or something like a remote marathon. We hope to enable support for more niches of runners and look beyond our personal dispute of speed.