Inspiration
With raise of P2P economy, we think it should not be limited to the vehicle services or food delivery. It should also cover the small things to make everyday life easier.
What it does
- Connect customers and riders in a simple fashion
- Allow customers to shop groceries
- Arrange riders for order delivery
How we built it
We have two components, one for customer interface which allows customers to sign up via Google OAuth2, view stores, place orders, and view orders. The customer component is based on Python Django and Bootstrap4 framework with HTML5 + JavaScript + CSS3 **. The other is for rider interface which allows riders to sign up via **Google OAuth2, view orders assigned to them and deliver the orders. The rider component uses Go as backend with HTML5 + JavaScript + CSS3, and designed specifically for mobile devices for easy access. Riders also need to verify their phone numbers via Twilio Verify at registration.
Both customer and rider components are deployed on Google Cloud Compute Engine and connected to Google Cloud SQL (MySQL 5.7) as database to store data persistently and safely. We use Caddy Web Server as an alternative to Nginx which supports automatic HTTPS via Let's Encrypt, thus we have all-site HTTPS support!
In addition, we use Twilio SMS APIs as a means of notification for both customer and rider. In consideration of privacy, we also support anonymous text communication, where customers and riders can communicate about their orders with text messages by directly replying to our number without knowing the real phone numbers of each other.
Challenges we ran into
We met and overcame many challenges, but we specifically had hard times of following two main challenges:
Correctly apply API credentials and make request data in the correct form of Twilio APIs. It turns out the API secret token must be carried with each request with a designated header, and in different methods (GET, POST, etc) of requests, Twilio APIs require different forms to pass parameters. For GET requests, we need to encode parameters in the URL query. For POST requests, we need to encode parameters as a POST form (we thought was JSON as POST body)
Correctly setting the redirect URI for Google OAuth2 for our Django backend. It kept using "localhost" as redirect URI and no user option is given for our customer domain. We did a lot of research and it turns out our reverse proxy setting was not prefect, we have to pass "HOST" (the actual domain name, riderfly.life in our case) to the Django backend from the reverse proxy.
Accomplishments that we're proud of
We built a complex system involves many APIs and runs on real production infrastructure and services, also have great cooperation between two components written in completely two different languages and frameworks.
What we learned
We really learned a lot during this Hackathon, here are some notable points we would like share:
- How to perform teamwork from discussion, design to development and deployment.
- How to solve hard problems both individually and collaboratively.
- How to deploy and manage applications in production infrastructure.
- How to work with third-party APIs (especially Twilio) and smoothly integrate them into our applications.
What's next for RiderFly
- More fair algorithm for assigning orders to riders
- Build a mobile app to provide more smooth and native experience
- Support more forms of payment
- Support scheduled delivery time for convenience
Built With
- bootstrap
- css
- django
- go
- google-cloud
- google-cloud-sql
- https
- javascript
- jquery
- json
- python
- scrapy
- spectre
- twilio
- twilio-verify

Log in or sign up for Devpost to join the conversation.