Original, Extended Video Below
The reality is many of us now use Uber on a regular basis (daily or occasionally on the weekends) and sometimes we don't even give it a second thought. We trust that our Uber driver will get us to our destination in a rather timely & efficient manner.
But it isn't so crazy to think that a driver, who gets paid on the distance & time spent carrying a passenger, would want to maximize their profit (We're all humans - trained to look at a situation and see how we can extract the most value from it).
I was recently on one such Uber trip. Where, just by looking at the map from my receipt alone, I could tell that we hadn't taken the most optimal/efficient route.
That's why I built UberWatch. A mobile app that monitors your emails for Uber trip confirmations and cross-checks, with GoogleMaps that your driver took an optimal route. If not, you can contact Uber directly in-app and request a refund with their customer service. The savings add up! UberWatch goes deeper to provide you with Uberlytics, fun analytics on your Uber trip data.
What it does
After connecting your email, UberWatch will check your email for Uber trip receipts, parse the receipts, and cross-check the route and payment calculations with google maps. If math is fuzzy on Uber's end, you'll be notified and can take action with either driver ratings or contacting Uber for a refund. If Uber did you a solid, share your praise for their service on twitter from the app.
How I built it
Built a Contextio API Proxy, with custom API endpoints the app can call, using Nodejs
- The API will parse through Uber email receipts and generate custom objects from the data.
- Included in that data is the pickup and destination addresses which are geocoded for latlng.
- Then using the latlngs I call the GMaps directions API for duration and distance info.
- This data is used to calculate the Uber cost using their formula: city-base-fare + (cost-per-min * time) + (cost-per-mi * distance)
- Built the mobile application using Angularjs and Ionic
Challenges I ran into
Async nature of JS made it very difficult to know what was being returned and what failed. Had to manually parse some of the receipt to get all the info needed.
Accomplishments that I'm proud of
- Overcoming Async
- Building all this (app & api simultaneously) in a little under a week
What I learned
- The need for callbacks in JS :)
What's next for UberWatch
- 1-click refund submission with Uber
- Integrate Lyft (which means probably changing app name lol)
- Add watch notifications