Problem

High schoolers across the nation are mandated to complete volunteer hours as part of their graduation requirement. However, volunteering opportunities are fragmented. School guidance classrooms post infrequently, opportunities exist in countless places, but none of the platforms centralize them. Existing volunteering platforms lack personalization, often finding irrelevant opportunities that do not reflect the personalities of the students, resulting in unpassionate work.

What we built

Summit is a platform that aggregates opportunities across the internet and matches users to opportunities based on their skills, interests, and location.

Users fill out a form, outlining their interests after creating an account. They are then able to access a dashboard of opportunities found on the internet on our centralized platform. These opportunities are organized based on our recommendation engine, that orders the most aligned opportunities from top to bottom. Users are also able to see a simple geographical location of the volunteering event/opportunity, allowing them to consider their distance, and commute.

How Summit was made

Our recommendation engine uses Google Gemini's embedding model to convert both user profiles and volunteer opportunities into 3,072-dimensional semantic vectors stored in our PostgreSQL database via pgvector. At query time, the engine computes a weighted score for every opportunity — combining cosine vector similarity (36%), interest token overlap (22%), skill overlap (16%), proximity via Haversine distance (10%), cause category match (8%), volunteer demand (5%), and event recency (3%) — then returns the top-ranked results with a plain-English explanation of why each opportunity matches the user. A Celery beat scheduler scrapes new listings every six hours, geocodes their addresses via Mapbox, and lazily generates embeddings for any new entries so the recommendations stay fresh.

Challenges we ran into

One of the main challenges that we ran into was being in sync with each other through GitHub. We worked on different branches each in parallel, resulting in merge conflicts when we wanted to create a collective codebase. However, we were lucky to have fixed these conflicts with the assistance of AI tools and documentation.

In our implementation, we found it challenging to hook our Supabase to display opportunities in our volunteer dashboard. Originally, there were issues with the pooling of the Supabase project, to which we switched to session pooling.

Accomplishments that we're proud of

A major accomplishment was building a complete AI-powered recommendation pipeline from scratch within the hackathon timeframe. From web scraping and geocoding volunteer listings, to generating semantic embeddings with Gemini, to scoring and ranking opportunities in real time — the entire pipeline runs end-to-end and the results are genuinely personalised. Seeing a student's interest in "environment" and "mentorship" surface the right local opportunities, ranked with a human-readable reason, felt like a real proof of the concept.

What we learned

Without prior experience, a key learning experience was using Supabase to store data, and learning how to interact with a database. Specifically, we learned how to use SQL commands to create tables to store our data. and we created pipelines to allow for Gemini to create the embeddings, appending them to Supabase.

Furthermore, our team adopted the use of the Next.js framework, instead of React, which was familiar to most of us. We had to pick up the new framework and figure out how to take advantage of the API routing provided in Next.js.

What's next for Summit

Summit is a potential project that can be shared with high schoolers within our community, school region and even further. In the future, Summit's list of opportunities can be expanded upon by adding more opportunities to our database and using state-of-the-art LLM's to extract more accurate information on volunteer opportunities through their stronger search.

Furthermore, scaling our app can allow us to experiment with different models for our recommendation engine, pivoting to deep learning rather than traditional machine learning algorithms through more data entries, and users.

Built With

Share this project:

Updates