Inspiration
Connecting People and Strengthening Communities
Volunteering is one of the most powerful ways to support and uplift communities. However, many people who want to get involved struggle to find the right opportunities. It can be difficult to find scattered volunteering opportunities and even when they are found, they often do not match what the user is looking for. This barriers often prevent potential volunteers from taking action
At the same time, organizations working to make a difference frequently face challenges in reaching volunteers who align with their needs. Without an efficient way to connect the right people with the right causes, many opportunities go unnoticed, and valuable support goes untapped.
Making Volunteering More Accessible
Our project streamlines the process of matching volunteers to opportunities by utilizing an AI powered matching algorithm to provide a tailored list of opportunities based on multiple criteria. By gathering and organizing volunteer openings from various sources, we create a centralized space where users can easily find ways to contribute.
What it does
Features
- AI Powered Matching - Connect users with volunteer opportunities that best align with their skills, interests, and availability.
- Watch How Our Algorithm Works Here: https://youtu.be/vqw7KTM-G58?si=2DyLzIOPgIwn8w4h
- Personal Engagement Tracker - Keep track of your volunteer hours, contributions, and impact all in one place.
- Leaderboard - Stay motivated and engage in friendly competition by earning hours through volunteering.
Achievements
- 1000 + up to date opportunities
- < 5 seconds to match candidates
- 95 % accuracy in matching algorithm
- 15+ causes supported
- 20 + available cities
- 45+ skill supported
- All age groups supported
How we built it
We first built a scraper using puppeteer in a node.js application to scrape over 1000 volunteering opportunities across different websites. We obtained key features about each volunteering opportunity like the title, location, organization, cause areas, skills needed, and groups involved. We then stored this aggregated data in a Pinecone vector database to embed each opportunity based on its specific attributes.
We used OpenAI’s Vector Embedding model to convert the semantic value of the skills, causes, and groups of different volunteering opportunities into vectors and store it in a Pinecone vector database. This way, when a user signs up, we can convert their skills, causes, and groups, into a vector and query the vector database. In doing this, we are able to compute the distance from the user’s vector to the different volunteering opportunity vectors and get a similarity score. Lastly, we sort the volunteering opportunities by this similarity score and return it to the user.
Watch How Our Algorithm Works Here: https://youtu.be/vqw7KTM-G58?si=2DyLzIOPgIwn8w4h
We created the user interface using NextJS and Tailwind CSS. The register page will allow users to POST to our user database. Our matching algorithm will with query our vector database based on the users preferences and retrieve the best opportunities in the form of interactive cards. The state of these cards are stored and can be manipulated through the tracker. Hours completed will automatically be accounted for in the global leaderboard which displays the top 10 user with the most volunteering hours.
Challenges we ran into
- We ran into a lot of issues on the backend in being able to properly store and query our vectors in Pinecone and MongoDB. We had used a notion document to plan out a significant amount of the structure of our app, but we failed to recognize lots of challenges we would face down the road. We ended up changing the structure of our database many times which resulted in a snowball effect of refactoring and modifying business logic to accommodate for new/changed requirements.
- Connecting the frontend to the backend caused us issues because of the way the API Endpoints were structured and took in parameters. Where we as a team had used JSON bodies to transfer data, we tried this time to use query parameters which resulted in weird formatting of our API calls. We ended up figuring it out but it just took a bit of time that we could have saved.
- We spent a lot of time trying to find our perfect idea that we ended up running out of time to implement all our features. We had spent probably the first 4 hours of the hackathon just trying to come up with an idea and ended up barely scraping by in finishing our frontend designs and then connecting it to the backend.
Accomplishments that we're proud of
- Project with the Potential for Huge Impact
- We spent a lot of time brainstorming to come up with the absolute best idea we could with respect to how we could impact communities for the better. Volunteering is a direct means for people to give back and foster a caring and supportive community, and our platform facilitates users to do just that in an easy and intuitive way.
- Engaging User Interface
- UI is optimized for ease of use and clarity to provide the best experience for the user, regardless technical expertise.
- Perseverance
- We all had very packed weeks, making it hard to block out time for this hackathon. However, we persevered through, ensuring we would be able to complete all our work and have the time and energy to finish this hackathon strong. In addition, 2/3 of us had been a little sick prior to starting, but still the 2 worked hard and did their best to finish.
What we learned
- Planning is important!
- While we had the general idea for our project, we failed to hammer out important details such as database schemas and user flow which resulted in our team having to go back and create revisions which resulted in even more chained issues
- Good coding conventions go a long way
- While coding the backend, we used too similar of variable names for different things and different variable names for the same thing (when transferring data from databases). This resulted in confusing code which had to be refactored later down the line several time. From now on, we will not only plan but also ensure we follow good coding conventions to save us time, energy, and brain power.
- Color Contrast
- Before playing with different colors, we ran into issues where areas of our web page would be difficult to read or differentiate from others because it either too bright or did not have enough contrast to the component around it. Updating the color schemes to provide better visibility greatly increased the overall clarity and effectiveness in our web app.
- Scraper Automation
- Using custom selectors, we were able to make the scraper intelligently move through pagination navigation at the end of the page. This ensures that no opportunities were lost as we scraped hundreds of results for each city
What's next for HelpHive
To improve our reach, we are looking to expand our database both in terms of volunteering opportunities and the cities we support. Our goal is to ensure that anyone seeking to make a difference can easily find relevant opportunities, no matter where they are. This means increasing the number of volunteer listings across a wider range of causes, from community service and environmental initiatives to education and healthcare support.
We are also looking to improve our matching algorithm by making it more personalized and adaptable to users’ unique preferences and experiences. Currently, our system connects users with volunteer opportunities based on basic factors such as interests and availability. However, we aim to refine this process by incorporating more nuanced attributes, including skills and past volunteer experiences.
Built With
- fastapi
- mongodb
- nextjs
- node.js
- pinecone
- puppeteer
- tailwind
- typescript
Log in or sign up for Devpost to join the conversation.