Inspiration
Kids grow fast, and they get through so many clothes so quickly. Usually families will share the clothes with friends of extended family that they know when their child grows out of them. Eventually it gets to the point where you know no more people with children or the right age to give away stuff to.
What it does
My solution fixes this by providing an online platform where people can list kinds of clothes (or anything else for that matter) they have available to give away. Following that people in need of items can search for donors in their local area and organise getting items.
Why is it necessary
Countles platforms exist for the selling of used items from ebay to craigslist an everything between. However they fall short as they prioritise items over relationships. In my experience many people who would be in the position of 'seller' just want to get rid of the items so the hassle listing items is too high so they would rather bin the items or send them to a charity shop. For people in need of stuff sites for used goods are time consuming, and once again often still too expensive.
Charity shops almost fill the gap but they suffer from their centralisation. It requires a lot of effort from volunteers to sort and manage inventory so that it can be prepared for selling. Although it is ideal for people getting rid of stuff, there is often a lot of wastage with perfectly good stuff getting thrown away. And for buyers there is still a cost.
Adherence to Theme
Although this Hack may not immediately seem peace related, I strongly believe it its. Sustainability is a key tenant of making peace with the earth. My project promotes sustainability through reducing the amount of stuff sent to landfill and ensuring goods are reused for as long as possible. It's not just about environmental stability however, my solution also allows users to make peace with their bank account by giving low income families ( or in fact anyone) access to items they need to live for free.
How we built it
Google Firebase
A lot of the heavy lifting on the backend was done by firebase.
I stored user data in Firestore when they signed up such as the list of photos they'd uploaded and their location. Firestore makes this particularly easy as I can make the request using their front end js library. In addition I could quickly and easily secure my data so only authorised users could see private user data using firestore security rules.
Firebase Cloud Functions were useful as i was able to use firestore triggers which meant that the serverless functions were triggered every time a new user was added firestore. I used this to sync the data between firestore and CockroachDB.
Firebase storage was especially pleasant to use as its API was so simple that integrating it with the ElementUI uploader component was easy. In particular I was able to watch for file upload progress which i thought gave a particularly nice UX.
There is not much to say about Firebase storage other than it just works; deployment was easy, and adding a domain from GoDaddy was easy.]
Cockroach DB
I used Cockroach DB to store the data for users with listings. It may seem an odd choice to use both a SQL and NOSQL database to store roughly the dame data in the same project. I think it was a useful as it made me really have to think about which data source to use in each part of my solution. In particular cockroachDB was useful as it could make fast queries over large amounts of data. This meant it was ideal for use in on the donors listing page in which a request is made every time the user adjusts the slider. (Using firebase here would have been much more expensive ). Using the node library pg made interfacing with Cockroach DB surprisingly easy, I certainly was not expecting support for JSONB document to 'Just work' so i was thrilled when it did.
Vue js
The front end used VueJS extensively. Due to the limited time i was unable to modularise and optimise my code as much as i might have wanted to. However I was still able to use vue to great effect to manage things.
In particular time and time again i relied on Vuex to provide a centralised store of data about the state of my application such as whether a user is signed in or the user's current name. Vue's reactivity system was also helpful as it allowed changes to be synced instantly everywhere in my solution
Challenges we ran into
Geospatial search was a challenge as it is not something i have done before. My solution used Cockroach DB to store the user's location in two points both as a GEOGRAPHY POINT and as a geohash. This allowed me to make very performant geospatial queries as i could narrow down users in approximately the same location by comparing the first part of their geohash, then for that smaller subset of users i could do the more computationally expensive step of calculating their exact location.
Accomplishments that we're proud of
I am most proud of being able to Implement the transactional emails using sendgrid, this was the last feature I had time to add and i think it really takes the project from being a toy to something people could actually use. This feature means that once a user clicks "connect" an email is sent to the user they wanted to connect with containing the name and profile information of the current user. If the receiver chooses to reply to that user the message will be sent to the person who made the request, this facilitates setting up a meeting between the two parties
What we learned
Vuesax was completely new to me and posed quite a leanign curve. I am glad i used it though as the component library did a lot of the heavy lifting for creating the UI.
Geospatial queries were completely new to me , and my experience with postgres type databases is also limited. This repo from Cockroach labs was an invaluable reference for getting up to speed. It was fun to learn about how they could be conducted efficiently and i can't wait to use them again in another project.
What's next for Hand me down
It would be exciting to use twillio's conversations API to facilitate some form of anonymization. Privacy was certainly a concern when creating this solution, In particular i focused on not showing the exact location of other users but this privacy shield somewhat falls away once a user clicks connect as their real email is sent to the person then wanted to connect with. I could remedy this by proxying messages through another email address so that user's private email accounts are not shared.

Log in or sign up for Devpost to join the conversation.