Inspiration

We've all been in the group chat where "I'm down for whatever" goes back and forth until nobody does anything. The problem isn't that people are indecisive. Merging different tastes across a group is genuinely hard, and the loudest voice usually wins by default. We wanted to build something where your actual preferences do the talking.

What We Built

Wavelength is a multi-agent social concierge that matches you with friends based on real taste data, then negotiates plans on your behalf. It includes:

  1. Taste Profiles: Users connect Spotify, Letterboxd, Goodreads, Beli and Steam to build a personal taste vector — a weighted map of their top genres, artists, and tracks stored in MongoDB.
  2. Compatibility: Discover new users who match your tastes, view your compatibility scores, and peruse through their preferences.
  3. The Blend: When two or more friends join a shared space, a Neutral Agent computes their overlap and returns a compatibility score, shared genres, and cross-pollination discoveries — things one person loves that the other hasn't found yet.
  4. Multi-Agent Negotiation: Built on Fetch.ai's uAgents framework, each user gets a User Agent that advocates for their preferences. A Mediator Agent runs a structured negotiation — proposing options, collecting typed votes, and converging on a plan everyone actually wants.
  5. Personal Concierge: A floating AI chatbot available on every screen that knows your full taste profile and your friends'. Ask it anything -- which friend would enjoy this concert, what to get someone for their birthday, where to take a group with wildly different food preferences. It loads your social context automatically and answers as someone who actually knows your circle.

How We Built It

The backend is FastAPI on Python 3.11, with MongoDB storing each user's taste profile across every category. The frontend is React Native with Expo. Every integration feeds into a unified taste vector per user.

Each platform was its own problem. Spotify and Steam connected via OAuth. Letterboxd has no public API, so we built a ZIP export parser. Goodreads uses CSV uploads. For food, we used a vision model to parse screenshots from Beli and Yelp. The Blend engine runs on Gemma 3-4B and reasons over full taste vectors holistically.

Challenges We Faced

  1. Designing the negotiation protocol — Getting agents to genuinely negotiate rather than just agree required defining strict message contracts. Without them, the Mediator would converge on hallucinated consensus instead of real compromise.
  2. Integrations — We wanted our app to capture users full identities, including music, film, books, food, and games. This meant we needed to integrate a lot of platforms, most of which didn't have clean APIs. We came up with novel ways to import data including CSV imports, and using vision models to parse through user-uploaded screenshots.
  3. Blend math -- Cosine similarity was our first approach but it rewarded breadth over depth. We scrapped it and built a Neutral Agent that reasons over taste vectors holistically instead of counting label overlaps.

What We Learned

  • Structure over capability. The negotiation got better when we tightened what agents were allowed to say, not when we made the model smarter.
  • Stateless is more reliable. Agents that reconstruct context from the database each session were easier to reason about and debug than anything holding in-memory state.
  • Taste is hard to quantify. Holistic reasoning over full taste vectors produced noticeably more accurate results than label matching alone.

What's Next for Wavelength

The next step is wiring in more booking APIs (OpenTable, TMDB, Yelp) so the agent surfaces actual reservations and tickets, not just suggestions. Beyond that, deploying our app using Expo and React Native CLI so real users can test and give us feedback would be extremely valuable.

Built With

Share this project:

Updates