Inspiration
We all have a weirdly specific corner of Instagram. Nice coffee shops in San Francisco, Regular Show clips, niche guitarists doing covers of popular songs. At any social event, the person sitting two seats over might be into the exact same stuff, but you'd never find out. Nobody walks up to a stranger and asks what's in their saved reels.
So we wondered: what if your feed could do the introducing for you? What if it could introduce the real you?
What it does
Harmonize finds people near you who watch the same kinds of reels you do, and texts you both so you have a reason to say hi.
You sign in once with Muse, Meta's AI agent. Muse looks through the reels you've liked and saved (and, if you want, ones shared in your DMs) and boils your taste down to 20 short phrases, like "F1 qualifying laps" or "sourdough starter care." After that, your phone quietly looks for other Harmonize users nearby over Bluetooth. When it finds someone whose taste lines up with yours, you both get a text with each other's name, Instagram handle and how compatible you are.
You don't have to keep the app open. It just runs in the background, on both iPhone and Android.
How we built it
We built native apps for both platforms, SwiftUI on iOS and Jetpack Compose on Android, because cross-platform tools couldn't do what we needed with Bluetooth. Every phone broadcasts a small Bluetooth service carrying its Instagram username, and reads the usernames of phones around it.
To get the taste profile, our server uses Browserbase to sign the user in to Muse, including Meta's two-step verification, and hand Muse a prompt. Muse reads Instagram and sends the 20 phrases back to us. A small Python service turns each profile into an embedding with a sentence-transformer model and compares people with cosine similarity. If two people nearby score above our threshold and both turned on texts, Photon sends them each a message: iMessage for iPhone users, RCS or SMS for Android.
Everything ties together through a Next.js server, with Neon Postgres storing accounts, profiles and match history.
Challenges we ran into
Bluetooth fought us the whole way. When an iPhone app goes into the background, iOS hides its broadcast in an undocumented "overflow area" that Android isn't supposed to be able to read. We found some reverse-engineering work on it, got it decoding, and then discovered iOS 26 had quietly changed the format, so we had to figure it out again. We also hit a stubborn bug where iPhones kept timing out trying to read Android phones. For the demo, a match fires as soon as either phone spots the other.
Muse was its own puzzle. The first time we sent it a bare command pointing at our server, it flat-out refused, which honestly was fair. We rewrote the prompt to explain who we are, what Harmonize does and exactly what data leaves Muse, and it started cooperating.
Then there was Meta's sign-in flow (email codes, "choose how to verify" screens, texted codes), Photon only texting people who've messaged it first, and running out of Browserbase minutes halfway through the weekend.
Accomplishments that we're proud of
We got real phones finding each other in the background, iPhone and Android, including iPhones that were locked in someone's pocket. And the whole loop actually works: sign in, Muse builds your profile, you walk near someone with similar taste, and both of your phones buzz.
We're also proud that it's careful with your data. The only thing your phone broadcasts is your Instagram username. Your phone number never leaves our server, and Muse is told never to read or quote your conversations.
What we learned
iOS really doesn't want apps doing Bluetooth in the background, and working around that taught us more about BLE than we expected to learn in a weekend. We learned that AI agents are cautious about requests they can't verify, and the fix is being upfront, not clever. And we found that short topic phrases make much better embeddings than full-sentence summaries; the matches got noticeably more sensible when we switched.
What's next for Harmonized
First, fixing the iPhone-to-Android Bluetooth issue, so both phones have to see each other before anyone gets a text. That's safer and more accurate. After that: moving the server off a laptop and onto real hosting, tuning the match threshold with actual users instead of demo settings, and getting it on TestFlight and the Play Store. Longer term, we'd love group introductions at events, so a whole table of people who all love the same niche thing can find each other.
Built With
- browserbase
- kotlin
- muse
- neon
- swift
- typescript
Log in or sign up for Devpost to join the conversation.