Inspiration

At a hackathon, the person who has already solved your blocker is usually sitting ten feet away, and neither of you knows it. People don't announce what they're stuck on, and they don't brag about what they know. We wanted the people you need to find you before you know you need them. A student stuck on calculus homework should meet the person who aced the class and was just told to start tutoring.

What it does

lynk turns what you say into a short profile. The profile has your current needs and your demonstrated expertise. You wear a VexoBand, tap it, and say what you're building or stuck on. lynk then finds need-to-expertise matches: one person with a blocker, another who has already solved it.

  • Join as yourself. There's no form. Your profile writes itself from what your band hears.
  • Pair in seconds. The iPhone app gives you a 4-digit code. You type it on the laptop page and connect your band.
  • Two sides of every match. Both people get asked. Only first names show until both say yes. Then full names and contacts are shared.
  • The band talks back. A green breathe means a new match, amber means someone wants to meet you, and rainbow means you're connected. Double-tap accepts an intro.
  • Small talk is never stored.

How we built it

  • Hear: VexoBand Opus packets stream over Web Bluetooth to Deepgram Nova-3 with diarization, PII redaction, and keyterms built from everyone's profiles. The speaker with the most words is the wearer, and only their words are used. Deepgram Aura-2 gives the pretend band a voice.
  • Screen: gemini-decision-1 filters out small talk in about 200 ms.
  • Extract: Gemini 3.5 Flash with a JSON schema pulls out headline, expertise with evidence, and current needs.
  • Retrieve: gemini-embedding-001 embeds needs as queries and expertise as documents. Cosine similarity returns the top 4 candidates per seeker.
  • Decide: The Gemini Decisions API makes one call per seeker, with yes/no questions, a 0–4 rubric, and an intro type. Code gates the result: auto-accept, review with a Flash second opinion, or drop.
  • Explain: A "why you should meet" blurb is generated for both sides from summaries only.
  • Apps: A dependency-free Node server, a browser band page, and a native SwiftUI iPhone app with Discover, Activities, the lynk orb, Lynks, and a Graph.

Challenges we ran into

  • Deepgram hackathon keys often can't mint temporary tokens (/v1/auth/grant returns 403). We hand the key to the page only when it runs on the same machine as the server.
  • The band's mic hears everyone nearby, so we had to work out who the wearer is.
  • Redacting PII without hiding occupations and organizations, which matching needs.
  • Making consent real. Both sides must say yes before anything identifying is shared.
  • Merging a web server, a Web Bluetooth page, and an iOS app under hackathon time pressure.

Accomplishments that we're proud of

  • A working end-to-end loop from a spoken sentence to a consented intro on two phones.
  • Consent logic that is covered by tests and runs without an API key (npm run check).
  • A pretend band with a real voice, so anyone can demo without hardware.

What we learned

Matching is the easy part. Trust is the hard part: when to ask, what to reveal, and when to stay quiet. Decision-style structured scoring is much more reliable than free-form "are these two a good match?" prompts.

What's next

Connect Vexo's long-term memory lane so profiles include who you are over time, not just what you said today. Add always-listening mode at scale, and group intros.

Built With

  • decisions
  • deepgram
  • gemini
  • vexoband
Share this project:

Updates