SideQuest: your gap between classes is a side quest

Inspiration

As we are all commuters, we feel the struggle of making friends on campus because most of them are by themselves and would want to leave as soon as they can because they do not have anyone to meet or any fun activity to do on campus. We wanted to make an app that made all of this accessible, and that is how we came up with SideQuest.

What it does

  • Reads your schedule. Upload a screenshot of your timetable and Gemini extracts your classes. You can fix anything it got wrong, or add recurring classes by hand.
  • Finds your gaps. It works out your free blocks and highlights the ones where you are stuck on campus between classes.
  • Matches you. Tap a gap to see who else is free then, ranked, with a "why you matched" line built from real data: "Both free Tue 12:20-14:30 at Burnaby · both into bouldering · both in CMPT 225".
  • No chat. You propose a time and a spot. They accept or decline.
  • Gives you a side quest. When they accept, you both get a quest written for your shared interests, the spot, and the time you have. It is mandatory the first time you meet.
  • Checks the proof. One photo. Gemini checks it and the quest is complete.
  • Events. Post events and see the ones that fit your free time and interests, with matches who could go with you.

Privacy is built in: nobody ever sees your classes, only the time you overlap, and proof photos are never stored.

How we built it

Layer Stack What it does
App React Native, Expo, Expo Router One codebase for phones and the web
Backend Next.js route handlers on Vercel Holds the keys; every AI and database call goes through it
Database TiDB Cloud Serverless Users, schedules, free blocks, meetups, quests, events, and vector columns for embeddings
Matching TiDB vector search Cosine distance between interest embeddings, and between interests and events
AI Google Gemini API Reads schedule screenshots, writes quests, checks proof photos, moderates events, makes embeddings

The match score is one line we can explain to anyone:

score = 0.5 × interest similarity + 0.3 × time together (capped at 2 hours) + 0.2 × shares a course

Key features

  • Schedule extraction from a screenshot, with an editable result using Gemini API
  • Privacy-preserving matching: only overlapping time is ever shared
  • AI side quests with hard safety rules: legal, free or under $5, public, no alcohol, no physical risk, no dares involving strangers using Gemini
  • A fallback behind every AI call, so the app never dead-ends: hand-written backup quests, manual class entry, a keyword screen for moderation
  • Gemini AI-moderated events ranked by your interests
  • An SFU-themed interface with quest-log cards and a card-flip reveal

Challenges we ran into

  • Campus Wi-Fi. Phones could not reach a laptop on the campus network, so we deployed the backend early and built against that, and also used Expo Go with some networking magic.
  • AI quota. Our first Gemini model ran out of free quota mid-build. We added a fallback chain that tries several models and remembers the one that works.
  • Upload limits. Full-size screenshots were rejected by our host, so the app now shrinks every image on the device before sending it.
  • Two kinds of invites. Meetup requests and event invites between the same two people were getting mixed up, because we looked them up by the pair alone. We made them fully independent.
  • Switching platforms. We started as a web app and moved to React Native partway through, keeping the backend and rebuilding every screen, allowing support for web, Android, and iOS!

Accomplishments that we're proud of

  • The full loop works end to end: schedule, gaps, match, invite, quest, photo proof.
  • Matching that explains itself in one sentence per person.
  • A product that keeps working when the AI does not.
  • Shipping a live app and backend within the hackathon.
  • Multi-platform: Works on Android, iOS, and web

What we learned

  • Design the fallback first. Every AI feature needs an answer for "what if this call fails right now".
  • Keep keys and data access on a server, even for a mobile app for security.
  • The smallest details of a first meetup matter more than the matching algorithm. The quest is what makes people actually show up.

What's next for SideQuest

  • Real SFU sign-in with computing ID
  • Group quests for three or more people
  • Quest categories and difficulty
  • A voice narrator for the quest reveal
  • Opening it up to other commuter campuses

SideQuest is not another friend-finder. It is a reason to actually meet.

Built With

Share this project:

Updates

Submission history