AFFINITI
You walk into a room full of strangers — Affiniti figures out who you should meet.
Affiniti generates a conversation starter and shows you who's open to chat right now. Every match runs through a local LLM and on-device vector search: no cloud GPUs, no API calls, no data leaving your machine. Built at UWBHacks 2026 as a ~24-hour MVP on two iPhones and one local server.
The Challenge
Events and hackathons put the right people in the same room, then leave them to find each other through an alphabetical attendee list and awkward small talk. The valuable connections — someone who shares your niche interest and is free to talk right now — stay invisible. Surfacing them requires understanding both who people are and what they're looking for, in real time.
The Solution
When you RSVP, Affiniti runs your profile through a local LLM to produce a semantic summary, embeds it into a 768-dimensional vector, and does the same for your stated intent. At match time it blends profile and intent similarity (60/40) via pgvector cosine search, applies a skill-diversity constraint, and generates a personalized icebreaker for each match — all on-device.
Affinity Match Engine
Each attendee's profile and intent are embedded into 768-d vectors. Matching blends profile similarity and intent similarity in a 60/40 split using pgvector cosine search over an HNSW index, with a skill-diversity constraint so you don't get four ML engineers in a row.
On-Device LLM Icebreakers
For every match, a local LLM (Gemma 4 via mlx-lm on Apple Silicon) generates a personalized conversation starter grounded in what you actually have in common — no generic prompts, and no data ever leaves the device.
Live Discovery & Status
Inside each event the iOS app surfaces four tabs: a ranked discovery feed, your top-4 AI matches with icebreakers, a bookmarks list, and a live status broadcaster ("Open to Chat", "Deep in Work") so you can see who's actually available right now.
iOS App
Swift · SwiftUI
Backend
FastAPI (async) · SQLAlchemy + asyncpg · Auth0 JWT · ngrok
ML & Vectors
Gemma 4 (mlx-lm) · sentence-transformers · PostgreSQL + pgvector
Search
pgvector HNSW · Cosine similarity
Local LLMs Are Viable
Running Gemma 4 via mlx-lm on Apple Silicon delivered fast-enough, private inference without a single API call — proving a privacy-preserving networking app can ship on consumer hardware.
Blended Similarity Beats Raw
Ranking on profile similarity alone produced echo-chamber matches. Blending in intent (60/40) plus a diversity constraint made recommendations feel genuinely useful rather than redundant.
pgvector for Fast Search
An HNSW index over pgvector kept cosine search snappy across all attendees, letting the backend re-rank on demand without a separate vector database.
Shipping on Real Devices
Wiring two iPhones to one local server over ngrok surfaced JWT and threading issues a simulator hid — a reminder that real-device testing is where hackathon demos are won or lost.