What it does
HelpCloud connects volunteers with at-risk individuals in their community who are in need of assistance due to COVID-19 pandemic. Volunteers can sign up and list what services they can provide, and people in need can then fill out a form and send a help request to them. Since a big part of the at-risk population during this epidemic are senior citizens, the experience of seeking help has been optimized to be as easy to use as possible. No email, no sign up. They just have to provide their number, which will then be used by the volunteer to make further arrangements about helping.
I am an individual who is not at risk, and spending most of his time at home because of universities being closed. I realized there are probably a lot of people like me, and that a lot of them would be glad to help just as much as I would. I realized that my skills in web development could be used to help connect these people to other people who may need help in this crisis.
How I built it
This application is a Laravel API paired with a React front end. The Laravel API is a simple REST API that makes the proper routes available for adding volunteers, sending help requests, search, and sending emails. The React frontend leverages the ant-design component library to deliver a minimalistic and easy to use look.
What is most apparent about the website at first use is its simplicity. There is nothing on the main page other than a call to action, and there are only 2 other pages. There are only 3 clicks required to get from the homepage to sending a help request to a volunteer. This approach was used because of the advantages it brings to both sections of our user base. For the volunteers, who just have to fill out a form and check their email, there is close to no friction during their registration process. For the people seeking help, who may be older and less technologically literate, the process is even more simple: they just have to fill out one form and provide their phone number.
The simplicity and minimalism of the visual design reflects a design philosophy that was used in all layers of this project. This project is designed with a global audience in mind, which means possibly having to scale to a very large number of users. With that objective, the platform on which the API is hosted was chosen to be Heroku. Heroku provides many advantages, including dynamic scaling and pgsql as a service, while also providing a workflow that could support an application that grows with its user base. Furthermore, the frontend is deployed on Netlify, which uses a global CDN to deliver the static assets at fast speeds everywhere.
Challenges I ran into
One of the challenges I ran into during this project is overestimating my ability to deliver a full product in a limited amount of days. This project was done over the span of 2 days, and even though this limited time was taken into consideration during the design phase, doing it all alone was definitely a very challenging task. Most products I had worked on in the past had been in teams, and I have come to find comfort in specializing in one specific part of web development. For me, this was backend engineering. But, during this project I had to not only be the backend person, but also be the frontend and design person. It took me time to adjust to thinking about a website from not just an engineering perspective, but from an user experience perspective. I think it was a really fun challenge, and an interesting look into the other side of web development. Doing this frontend has given me confidence in my skills, and motivation to expand my knowledge even further.
Accomplishments that I'm proud of
This may not be relevant to all readers, but there is an interesting optimization that I came up with for the database. I was thinking about the amount of reads the database was going to get because of search, and I wanted to find a solution to make each read as fast as possible. One solution was to shard the database, but how would I decide what record would go into what shard. Then I realized, most reads are going to be filtering by a specific city or country. So, if I distributed the records across the shards by their city, each read would be faster because the city filtering could be done on the shard layer, instead of the table layer.
What I learned
I learned how important it is to think about user experience while designing a website. It is very easy to fall into the trap of trying to make the website look 'good', but the only measure of success for a design is how it manages to get the users to engage the way it wants them to. For this specific project, UX was very important in order to make sure that the process of seeking help was seamless. Trying to optimize for that, I learned about the ways one can go about testing a sites usability and how to identify the true goals of a UI.
Try It out
heroku, laravel, postgresql, react