Inspiration
College students meet new people all the time: at orientation, club fairs, hackathons, the person next to them in lecture. Almost none of those meetings turn into anything. You swap names, maybe follow each other, and never see them again. Social apps haven't helped. They're built to keep you scrolling, not to get you into a room with people.
We wanted the opposite: a social app where the AI's job is getting you offline. We also noticed that the best new friends usually come through people you already know: a friend's roommate, someone your lab partner vouches for. So we built on that idea. You are a node, and every time you meet someone in person, an edge forms. Degreesº uses that real-world graph to put small groups of people together and send them out to do something. It's a dating app for friend groups.
What it does
- Meet in person, and the graph grows. Scan someone's QR code, or join an event with a room code and tap "We met" next to the people you actually talked to. Each one becomes a first-degree connection. Hosts can run meetups, and ending one connects everyone who was there.
- You choose how far it reaches. Your "degrees" setting decides who you can be matched with: only people you've met, friends of friends, or the wider network. Group size, budget, travel distance and how often you want to meet are all yours to set.
- AI forms the group. Degreesº walks your connection graph, ranks candidates by how similar their interests are (Gemini embeddings), and has Gemini put together a small group with a plain-English explanation of why it fits. We deliberately include at least one friend-of-a-friend, because that's where new friendships come from.
- Privacy is enforced by the server, not just hidden in the UI. Anyone you haven't met stays anonymous until everyone in the group accepts. That applies to names, photos, bios, and even the AI's explanation.
- A real plan, not a suggestion. Gemini with Google Maps grounding picks a real venue that fits everyone's budget, interests and distance, and Places fills in the address, map pin and price. When Maps doesn't work out, it falls back to real ticketed events from Ticketmaster. Your group can ask for another plan, and every earlier plan is kept.
- Chat, icebreakers and photos. Each group gets a live chat to coordinate, Gemini-written icebreakers, and a shared photo album. Chat and uploads close 24 hours after the hangout.
- Feedback makes the next match better. After a hangout you rate it and mark each person as great, fine or not for me. Gemini pulls interest tags out of anything you write, your profile is re-embedded, and the next match changes as a result. Two people who both say great can also swap phone numbers, but only when both agree.
- Your Circle. A view of only the people you've actually met, with a playful "Play" mode where you drag yourself around and bump into your connections. It shows your real network, not a feed.
How we built it
- Mobile app: React Native with Expo SDK 57 and Expo Router, styled with NativeWind, and TanStack Query so the server is always the source of truth. QR codes are scanned with
expo-cameraand open the app through deep links. - API server: Node and TypeScript on Hono, deployed to Netlify Functions. The server makes every AI call and does every database write; the app only reads its own data, protected by row-level security.
- Data: Supabase Postgres with pgvector for interest similarity, plus Supabase Auth, Realtime (live chat and meetups) and Storage (photos). The first stages of matching run as database functions: walking the connection graph with a recursive SQL query, then ranking by similarity.
- AI: Google Gemini throughout.
gemini-embedding-001at 768 dimensions for profile embeddings.- Gemini Flash, with Flash-Lite as a fallback, to form groups, analyze feedback and write icebreakers.
- Gemini with Google Maps grounding and the Places API for activity plans, and Ticketmaster Discovery for real events.
- A shared contract: one TypeScript and Zod package that both the app and the server import. Four of us worked in parallel against mock data, and any mismatch in a request or response broke the build instead of the demo.
Challenges we ran into
- Serverless time limits. Netlify ends every request after 10 seconds, and a grounded Gemini call, a Places lookup and a Ticketmaster fallback can take longer than that together. We rebuilt activity planning as a resumable job that runs one step per request. The app drives it to completion, and it picks up where it left off if you close the app.
- Maps grounding only names the place. It gives a venue's name and Maps link but no coordinates, address or price. We follow each grounded answer with a Places lookup on the place ID it returns.
- Rate limits and outages. Gemini's free tier regularly gave us quota errors (429) and overload errors (503). Every AI step falls back to something: Flash to Flash-Lite, then a deterministic backup. Matching and planning never fail completely during a demo.
- Privacy has more ways to leak than you'd expect. We hid unmet people's names and photos on the group screen, then found the AI's explanation still named them ("you and Zoe both know Alex"). Fixing it meant hiding those names from the prompt, rejecting any reply that mentions them, and giving each viewer their own version of the explanation.
- Making feedback actually matter. Gemini's similarity scores for our profiles all landed between 0.85 and 0.94, so we compare people relative to the rest of the pool instead. Our first feedback boost was also weaker than the shift that re-embedding caused: a "yes, I'd meet again" made a match slightly worse. We raised the boost weight until feedback reliably pushed the next match the right way.
- Changing platforms and dealing with physical-world details. We changed from a web app to native iOS partway through planning. QR deep links behave differently in Expo Go than in a real build. A connection has to record which event two people met at, and scans must stay safe to repeat, because people scan twice.
Accomplishments that we're proud of
- Feedback measurably changes the next match. In one test on our demo data, one person marking another as someone they'd meet again raised that person's match score from 0.83 to 0.97.
- Every seeded user gets a group with a real friend-of-a-friend, with an explanation that only mentions people they're allowed to know about.
- Degreesº leads to meeting up, not scrolling. You only ever see people you've met, and every match ends with a real place to go.
- The AI never fails on stage. Group formation, planning and feedback analysis each fall back to something useful when the model is slow, rate-limited or down.
- Four people built it in parallel and merged dozens of pull requests into one consistent product.
What we learned
- Grounding matters. A plan with a real address and a real price is worth much more than a clever paragraph, and getting there took two APIs working together.
- Design for the failure case first. Serverless time limits, quota errors and slow models shaped our architecture more than the happy path did.
- Privacy rules belong on the server, and they have to cover generated text, not just database fields.
- Embeddings need calibration. Raw similarity scores meant little until we compared them within each candidate pool.
- A shared, typed contract is what lets four people work in parallel without breaking each other.
What's next for Degreesº
- Push notifications and scheduled matching, so new groups arrive on your chosen schedule (weekly, biweekly and so on) instead of when you ask.
- A TestFlight beta at Georgia Tech to grow a real campus graph, starting with clubs and orientation events.
- Campus event sources, such as student organization calendars, alongside Maps and Ticketmaster, so plans surface what's actually happening on campus tonight.
- Smarter group planning: finding a time that works for everyone, splitting costs, and following up with the group afterward.
- Graph-level insights for organizers, so a club or event can see whether its events are actually turning strangers into friends.
Built With
- expo-camera
- expo-router
- expo.io
- gemini-embeddings
- google-gemini
- google-maps
- google-places
- hono
- ios
- nativewind
- netlify
- node.js
- pgvector
- postgresql
- react-native
- react-native-maps
- supabase
- supabase-realtime
- supabase-storage
- tailwindcss
- tanstack-query
- ticketmaster-api
- typescript
- zod
- zustand
Log in or sign up for Devpost to join the conversation.