BetterCallUber

About this project

My name is Simon & I'm 26. I live in Paris in France. My hobbies are sport and web development. I developed this project during my free time. I already played with the Uber API several months ago, I wanted to locate Uber car by using "waiting time". It's not accurate and more for fun :) . I am happy to see this hackathon and to play again with your API.

My project is called BetterCallUber in reference to the famous "better call saul" from Breaking Bad. The website URL is https://www.bettercalluber.net . The main goal of BetterCallUber is to make an Uber request, immediately or later, in your browser.

Current features

  • Request an Uber car now
  • Request an Uber later : at a specific date, 7/5/2015 5PM

Next features

  • Request an Uber car later : depending of a triggered event.

BetterCallUber will allow users to choose a type of triggered event (Flight landing, Train arriving).

For example: the consumers needs a Uber after the aircraft landed. He fills his flight number. BetterCallUber will await the landing before requesting an Uber car. In case of delay the app follows the aircraft in real-time, and uber is informed about the new hour.

Functionally speaking

Request a Uber

You begin the process by clicking on "Book an Uber". You have to choose between two options : "now" or "later".

Request a Uber now

If you want to book an Uber now you have to click on "now" and submit the first step. Then you entere your pick-up location and destination. This page displays a Google Map to see your trip.

The next step, let the user chooses the available products. Description and capacity are displayed by clicking on the desired product. After confirming with the dedicated button, the user is transfered to a confirmation page. This is the last page of the request flow. The user checks informations and validates the request.

Request a Uber later

The beginning of this part is similar to the classic request. The users clicks on later" and completes the date and time of the pick-up. The next step asks to set the pick-up location. The User sets start and end location. Before to submit the user has to check the timezone automatically suggested in the form.

Email notification

For the two types of request mails are sent to the user. It's triggered when status of the requests change using Webhook

Technically speaking

The project contains two sub-projects

  • the client
  • the API

Client

The Web client is an AngularJS project using Boostrap. I try to keep it simple for a good user experience.

API

The API is written with Symfony 2.6 using PHP 5.6. Some bundles are used in order to communicate with Uber API : GuzzleHTTP and the beautiful project of Steven Maguire. Finally my API is not so restful but the job is done.

Data for flights status

The next feature will be "ride triggered by event - flight" . My back-end will request FlightStats services and retrieve live data about flights (departures, airports, arrivals, delays, ...). I had started development of this part but I have prefered to focus on the main features (book a car now and later).

Timezone and datetime

This part is key for the project. Users can be anywhere around the world - there's a lot of different timezones. This is why I choose to store datetime using UTC. For later request I store/save the timezone of the pick-up location in database. A cron runs every minute in order to process all the request to execute.

Surge_multiplier flow

Surge m flow is well implemented for the classic request (book for now). When client receives surge_id it will redirect him to the Uber custom page. After the validation of the surge multiplier he will be redirected to the client.

It's not yet implemented for the "late request".

How-to test BetterCallUber

BetterCallUber uses UberAPI in production mode (no sandbox). Just log in and enjoy !

Vidéo

Sorry I recorded the 2nd part of the video during the night and my english is not fluent. Hope it's not si boring ! :-)

Contact

If you need more information about me or my app feel free to contact me : simon51100@gmail.com !

Share this project:

Updates