A prevalent problem in America and around the world, only to be escalated by the newfound coronavirus, is unemployment and more specifically, homelessness. Many of these people are people who encountered unfortunate situations, such as veterans, who just need a little boost to get back on their feet. However, more often than not, they do not get a solid platform to jumpstart back into society. We realized that the biggest reason why more people do not help the homeless is because of a lack of connection and accountability. As such our platform had two goals during inception: to give them a platform to share their story and incentive accountability so that they truly turn their life around.
What it does
Our app has three main defining features: the ability to donate money to homeless just through your phone, a place for the homeless to share their story and spread the word, and a fundamental system to give the homeless a goal and make sure they stay on track while continuously receiving support from their community. Once a user shares their story, they will be placed on our featured page which donors can see. If a donor decides to donate to a user, they can through our app using Paypal.
From here on out, our Karma system takes over. Karma is allotted to a user depending on two key factors. The first factor is updates, a voluntary series of posts a user can add to their profile to show how they are spending their money and improving their lives. Simply updating adds some Karma and if donors upvote these updates, even more Karma can be accumulated. The second factor is our likes per user. Each “like” to a user profile adds Karma to that profile. For the homeless user, accumulating Karma is the key to gaining more traction on our Recommended page thus giving them more exposure to potential donors. On the flip-side, our Karma system ensures that homeless users are using their donations properly. If a donor doesn’t like the way the user is spending money, they can downvote the updates. This way, a homeless user who isn’t using the money properly will not receive donations in the future because they will be bumped down on the Recommended page.
In order to make sure that new users are not drowned out by this system, we also have a Features page, which are profiles handpicked by our team based on several attributes. However, the homeless user may not know what to do with the money, how to proceed with building a resume, or simply may want to network with their donors. Therefore, we added a call button to reach out to their donors through the application. This way donors can also advise them on how to enter the industry or simply to expand their network. Our application provides the capability to share a story and give the resources to help the homeless succeed. Ultimately, as the homeless user reaches their goal through donations, they are given the chance to rebuild their life.
How we built it
Our two key components are our Android app and our Mongodb backend. We made an API using pymongo and Flask, hosted on Heroku, so that our application can send requests to endpoints in order to receive requested data. In our backend, we parse user inputs to return the optimal data for the user. In the Android app, we make use of Google's material design library and stuck to material design guidelines in our user interface. We also used the Google Youtube API for watching Youtube videos in the application. Additionally, we used a couple of external libraries in the app for https requests, dialog boxes, color design, timeline views. For money transfer, we utilize the PayPal API, creating sandbox accounts to transfer money between users. We also included a feature in the app where homeless users are able to call their donors directly in case they want advice or to network.
Challenges we ran into
Our biggest challenge was connecting the mobile application to the endpoints. Due to the nature of our application in Mongodb, we transferred our images as Base64-encoded strings. Although sending this string worked for small images, for larger ones the server would not allow it to send. Furthermore, it was our first time making a backend purely in MongoDB and using Flask as well. Connecting the API to the backend took a while as well as hosting the server on Heroku as it was also our first time hosting on Heroku. Other than that, we were able to successfully implement our Karma system and implement it in the backend.
Accomplishments that we're proud of
We are proud of our application's integrity in keeping with our goals, specifically at our ability to portray the backgrounds of these people who have been living in unfortunate circumstances. We were able to display the user picture and even a video which the user could use to connect with his audience. On each profile, we also show their updates dynamically allowing the donors to join them on their journey to reenter the workforce. We believed this and our Karma system to be the crowning feature of our application as it distinguishes our app from many others through our ability to keep our users motivated and change their future.
What we learned
We learned a lot about the backend process and having to store many relational connections in such a way that is easy to use. This requires us to learn how to connect MongoDB Atlas to Flask, PyMongo, and eventually Heroku for hosting. Outside of just technology, we also used this unique situation to improve our abilities to work as a team virtually. It was an interesting twist and it put a hamper on being able to see each other's process easily and discuss ideas without the tools that we would have in person to communicate them.
What's next for Homie
We plan to further develop Homie through a more complex analysis of Karma. Despite its performance, Karma can still be optimized through perhaps varying the Karma or maybe allowing donors to allocate Karma depending on how well they like the updates, etc. Then instead of just making the features page based on how much Karma, we were also planning on having an ML system to determine specific, each donor would probably like to donate to based on previous donations or predetermined preferences. Unfortunately, we could not finish implementing this feature in time so it would be our next immediate goal.
Try It out
android-studio, flask, java, mongodb, pymongo, python