Inspiration

We spoke to many nonprofits currently struggling from the Coronavirus pandemic. A common theme is that almost all nonprofits and charities are struggling to stay funded. We wanted to build a solution that integrates into our daily lives, and encourages people who don't normally donate to help out. Instead of looking for what the pandemic was hurting, we decided to look at the activities and industries that the situation was propping up. We decided that since almost everyone was shopping online, we would try to build a solution that took advantage of this. Our final product is a system that allows users to donate a percentage of their purchases to nonprofits. This helps all the nonprofits that are part of our system by ensuring a steady flow of donations and contributions. We feel this is a great solution because it allows access to a demographic that isn't easily accessed: normal people who aren't going out of their way to donate.

What it does

Donatio at its core is a donation platform. It allows you to choose a percentage of your online purchase, like your Amazon purchase, and donate it to our Nonprofit of the Day. Every day the nonprofit changes, to ensure fairness and make sure that everyone is equally supported. Once a user donates, they receive experience points and medals based on their achievements. We have lots of different rewards to incentivize users to keep donating and climb their way up the leaderboard. Users can view the leaderboard and their current position in the mobile app, and keep track of how much they're donating, as well as medals unlocked.

How we built it

The Donatio platform is made up of the backend, the Chrome extension, the Mobile app, and the website. The backend is built with MongoDB, GraphQL, Node.js, and Python. Our mobile app is built with Flutter and written in Dart. The Chrome extension, along with our website is built with Javascript, HTML, CSS, and React.js.

We use Amazon Pay for our transactions, allowing easy login with a user's existing Amazon account. Amazon Pay provides safe and reliable monetary transfer to our nonprofits.

You can play with our fully-fledged GraphQL sandbox, hosted in AWS. Click on the Docs tab on the right to view Introspection for our backend, and try out some sample queries.

Check out our mobile app here, or our Chrome extension here. Check out our live website here, or our repo for our site here.

Challenges we ran into

We ran into a few challenges. SSL certificates proved hard to acquire for our AWS backend, as we were simply running without a domain. Free certificate providers require a domain for certs, so anywhere that our extension runs will appear "unsafe" until we get a domain for our backend server and get the proper certificates. Right now we're using self-signed certificates which are completely safe and reliable, but designed for testing, not production code. Another issue this creates is Flutter does not allow access to servers with self-signed certificates, so we were forced to run our server on localhost to test our application.

Accomplishments that we're proud of

  • Scheduled jobs change the NPO of the day every day at 5pm, summing Donatio users contributions and tracking it in our database.

  • Twitter integration, tweeting daily the sum donations for the day, and what the new NPO of the day will be (@DonatioApp).

  • Full user security, with usernames and passwords properly hashed and stored safely in the backend.

  • Email confirmation for new accounts, increasing user security and reducing the number of fake accounts.

  • Full Amazon Pay integration, allowing users to use the accounts and payment options they already have.

  • Leaderboard that tracks all Donatio users, displaying the Top 10 users with their experience count, and the medals they have earned.

  • User profile page that tracks experience earned, and the medals/achievements that have been unlocked.

  • Injected widget on top of Amazon checkout page for easy donations.

  • Tweet out your accolades directly from our page! We support full Twitter integration.

What we learned

Neither of us had used Flutter or Dart previous to this project, so this was a fun learning experience. Developing with Amazon Pay was also a new experience for both of us, and we feel like we implemented a solution that utilized it very well. We both learned a ton about web security and how it should be at the forefront of our minds when developing. GraphQL and Apollo were really cool new technologies to work with, and we feel they are the future of APIs. Further building our skills with Node.js and React.js is always appreciated, and we feel much stronger in our general development skills as a whole.

What's next for Donatio

We want to expand this into a full product that will eventually be consumer-facing. There is a lot of legal work to go through in order to work with charitable donations, but we feel Donatio is a solution that can help the world. On the technical side, we want to implement proper SSL certificates, as well as expanding our extension compatibility to more major browsers like Firefox. We also want to allow more checkouts for more online shops, and develop a universal popup. Ideally, we would also like to add more payment options (Stripe, Paypal, crypto).

Github Repositories

Live Website: http://donatio-site.herokuapp.com

Backend Server: https://github.com/joshmalek/donatio

Mobile App: https://github.com/joshmalek/donatio-app

Chrome Extension: https://github.com/joshmalek/donatio-extension

Website Source: https://github.com/joshmalek/donatio-website

+ 2 more
Share this project:

Updates