We’re a team of roommates who have just moved into off-campus housing. In order to do laundry in our building, we need to have 4 loonies - a bit of a tough task in the age of cards and digital payments. We left notes asking for help around our building, to no avail. This experience, plus other cases where we’ve felt that a small bit of help would have been useful, is what inspired our Android app, Favourr. Put the small favour you need out there, find people willing to help out - hence the name Favourr.
What it does
A user posts the favour they need as a Favourr. The favourr is visible to users in the same locale and users are free to browse and get in contact with the poster to get started on completing the Bounty.
Users can have Bluetooth enabled while out and about. When two users pass by each other, Favourr will exchange usernames automatically and retrieve current Favourrs from the database. If the user is interested maybe they can help the other person out right then and there. Once the Bounty has been completed, it is marked as complete and the payment can be received for the favourr.
How we built it
Hosting: On GCP using Cloud Run.
Database: MongoDB Atlas, a No-SQL cloud database.
Backend: NodeJS & Express powering an API which exposes a ‘favourrs’ endpoint and a users endpoint.
Frontend: Android app.
Challenges we ran into
This was our first time using Google Cloud or any other Cloud service to set up an API. Great documentation made the path more or less smooth but we still ran into plenty of hurdles that seemed insurmountable.
Firstly, MongoDB needed a static IP to whitelist so that the application could run the server...but Google Cloud uses a pool of IP addresses. So, I needed to configure Cloud Run to route through a static external IP address. This was much harder than I predicted since I didn't know what a VPC was, much less a cloud NAT. However, documentation came to our rescue and Calder (a mentor) suggested lowering the specs of our VPc so that it would work in our quota. In case you’re wondering: https://cloud.google.com/run/docs/configuring/static-outbound-ip.
Once this was fixed, I ran headlong into another obstacle, the container kept failing with a port error, I tried for hours to fix it and had an inkling that the dotenv module I was using was conflicting with the environment variables in Google Cloud but couldn’t fix it until another mentor (Naman), suggested that I remove dotenv and configure it in GCP directly something I hadn't been aware of.
Overall, we faced many of these challenges, but usually we were saved by documentation and kind mentors.
The fact that we could do this at all in a few hours with 0 experience is a testament to GCP.
Accomplishments that we're proud of
David: Learning NodeJS, Express, Mongoose/MongoDB and seeing things work!
Ashish: Deploying our first API in the cloud!
Jia Ming: First hackathon and networking in Android!
Philip: Design and smooth UI!
What we learned
The biggest thing we learned was how to deploy our APIs on a cloud platform. Before this hackathon our only experience was with APIs running locally and we had never actually deployed one before. This was pretty exciting and really expanded our horizons.
What’s next for Favourr
Our biggest goal would be to let users accept and create payments directly on the platform. That would also give us a source of revenue and take us to the next level.