Inspiration
Homelessness is a growing global issue that we wanted to address. To narrow our focus, we centered on two major issues. The first issue is the stigma around making donations to homeless people; sometimes, people are reluctant to make donations since they don’t know how the donated money will be used, they don’t carry cash, or they feel uncomfortable opening their wallets. The second issue is that homeless people often do not even have the bare necessities to survive, such as food and clothing. Cardinal is a benefits program that gives a basic income to all members of the program so that they can purchase essential items, while at the same time encouraging seamless donations to support the program.
What it does
To join the Cardinal program, people will register at homeless shelters or other community hubs. They will be required to provide proof of homelessness in the same way they would have to register at soup kitchens or emergency shelters. Methods of proof can include an eviction notice or a notice to quit. Applicants will also have to prove that they have been searching for jobs for 3 weeks. After proving homeless status, applicants will receive a card with a QR code that is assigned to them biometrically and through any ID applicants may have. This card is used to receive their basic income and can be replaced in case of loss or damage.
On the donor side, donors will download the android app and create an account that includes their billing information. There are two methods to donate. First, donors can donate to a pool, where the funds are split among all the members of the program. This is the basis for providing a small basic income. Donors can also donate directly to people they see on the street by tapping their card or scanning their QR code with the mobile app.
The points members receive cannot be redeemed for cash. Members of the program can redeem their points at participating stores by scanning their card or QR Code. This ensures donors that the money donated is not going towards substance abuse.
How is Cardinal different from any other charity? Sometimes when you donate to a big organization, it is unclear where exactly the money is used. With our solution, the user statistics shown on the dashboard can show you the clear impact your donations have on real people.
How we built it
Android App: The process of building out our product included scoping out features of our application. Once features were scoped, certain layout components were developed. The android application was developed in Kotlin and we used Dagger 2 to inject our repository throughout the app and map out different dependencies. Furthermore, we used Retrofit to help make our api network calls to the GCP, and then parsed the data into respective models that the android application can understand. RxKotlin was used to observe data asynchronously. We also implemented Model-View-Presenter clean architecture design pattern in order to separate logic throughout the application, which also helps for scalability. We used various components in specific orders throughout the flow of the application, in order to think about the best user experience that would encourage the donation process and further use of our app.
Backend: Rather than going to a “traditional” backend architecture approach, we decided to go serverless and utilize Google Firebase Cloud Functions. Since our application does not run any long background tasks, it made sense to build our logic in cloud functions in order to focus on the implementation, as opposed to managing infrastructure. Our entire backend API is served through 9 Firebase Cloud Functions with a variety of HTTPs triggers and database triggers.
Data is stored into Google Firestore NoSQL database. Firestore allowed us to use an out-of-the-box database that was already deployed on the cloud. Again, we as the developers, were able to focus more of our resources on the implementation rather than the infrastructure.
We utilized Google Firebase Cloud Messaging to push/notify all donors when funds have been added to the donation pool. By utilizing Google Cloud Function database triggers, the Firebase Cloud Messages pushes data to all registered mobile devices after an update query has been executed on Firestore.
For authentication, we used Google Firebase Authentication to manage all accounts and their respective UUIDs. For doing so, we were able to define strict privileges to each user, and ensure that they could only access their own information.
Challenges we ran into
One of the major non-technical challenges we ran into was tackling our problem space with a solution that adhered to engineering ethics. In such a short time, it was hard to do enough research on the problem space that would consider every angle of the issue.
A technical challenge we ran into was managing our users and ordering them in an efficient way within the Firestore NoSQL db. Since we were all new to NoSQL, it was difficult structuring our pool and user data that optimizes for query time lookups. Although we have a minuscule amount of data in the db, we still wanted our implementations to follow good design patterns.
Accomplishments that we're proud of
- Learned a bunch of new technologies (specifically Android and Firebase related)
- Able to fully complete a working product
- Tackle a problem space we are passion about
- Hacking with friends, talking to new people, and having fun
What we learned
Through this project, we learned how to use RxJava, Dagger2, and the Google Firebase technology suite. These were some technologies that a majority of our group has never touched, so it was a great learning experience being able to build a product from start to finish. In addition, by exploring the realms of serverless functions, we learned that it is actually much easier to get a working “server” in just minutes, as opposed to worrying about configuration management, deployment, and scaling.
From the research on our problem space, we learned how complex of an issue homelessness is, and though it won't be solved overnight, there are steps we can take to improve the overall quality of life.
What's next for Cardinal
Moving forward, we have a few ideas on how to improve user experience.
To streamline the donation process, we would create an API that integrates with other businesses. Donors may be discouraged from donating because it is not convenient to download a mobile app, make an account, and make donations. Instead, making donations should be available seamlessly through processes regularly followed by the user. For example, Uber could adopt the Cardinal API. While paying for an Uber ride, users could be prompted to make a donation to the Cardinal program.
Other ideas for increasing donations include adding a monthly subscription service, and adding gamified statistics to the user dashboard to increase engagement.
For members of the Cardinal program, we intend to move away from having a card with a QR code scan, and use a more secure method of identification, such as facial recognition.
Built With
- android
- firebase
- javascript
- kotlin
- serverless
Log in or sign up for Devpost to join the conversation.