Inspiration

With three of us being first years, and one of us pushing 20 (2nd year), we're all well aware of the advice "join a club". However, at UBC it's not that simple. UBC is MASSIVE meaning that there are hundreds of clubs, and thousands of events to attend. That sounds great, after all, there's a place for everyone, but since there's no way to easily view all the clubs, the mere prospect of attending club events can feel overwhelming and even intimidating. We made Findr to solve that problem.

What it does

This project is a UBC event discovery platform. It helps students browse upcoming events around campus that they might not normally come across online. They can search by title or club, filter by tags, and view events on weekly or monthly calendars, and open detailed event information. It also includes a club directory, event categories, today’s events, locations, prices, schedules, and links to original event sources to help students become more involved in the community.

How we built it

This project was built as a Next.js and React web app for discovering UBC events and clubs. A list of UBC clubs are found through club directories of various societies (eg. https://amsclubs.ca/all-clubs/, https://www.susubc.ca/get-involved/sus-clubs) via web scraper. Through this, we compiled a list of Instagram links directed to various clubs and integrated an apify API to scrape the most recent Instagram posts (description, image) of the accounts. The descriptions are passed through Gemini API to determine if the post is a valid event, and summarize the details of the event, outputted as a structured response and pushed to the Supabase database. Event and club information is retrieved through REST API endpoints, which proxy requests to the database. The discovery page supports search, tag filtering, today’s events, and event popups, while the calendar provides weekly and monthly views with selectable dates, event details, colored events, and a collapsible sidebar. The project uses TypeScript, custom CSS for layout and responsive behavior, and Next.js route handlers.

Challenges we ran into

One of the main challenges that we encountered was Instagram rate limiting us. Since our pipeline relied on scraping publicly available information from club pages, sending too many requests in a short period caused Instagram to temporarily restrict us. This made it more difficult to consistently retrieve event information, although that the issue is now fixed.

Our AI-augmented web scraping pipeline also introduced unexpectedly results. While the goal was to use AI to identify relevant club information, the pipeline sometimes scraped Instagram links and club website links that didn't exist. This resulted in invalid links being stored in our Supabase database. We also found that our scraper was not comprehensive. Some clubs that had their own websites were missed, meaning our results were incomplete. As a result, some entries were manually added.

Accomplishments that we're proud of

  • Work on frontend design
  • Utilize AI to accelerate development
  • Set up the database and scrape data for the database

What we learned

We learned to work as a team for the first time and to plan, delegate tasks, and implement our designs efficiently.

What's next for Findr

  • User login: Login/sign-up page for users to save events and get email reminders.
  • Maps: Map feature to list events by proximity to current location.
  • Caching: Currently, there are frequent database queries on load - caching will speed up the loading speed and lessen the strain on the database.
  • Improving AI Capability: Gemini API may misjudge Instagram descriptions and is unable to view and analyze posts incase there are details in the visuals.

Built With

Share this project:

Updates

Submission history