Inspiration

We kept talking about one small moment. You're scrolling and an old photo comes up: a hike, a dinner, your college roommate you haven't talked to in years. You think "I should text them," and then you don't. You still care. There's just no easy way in, so the photo sits there. Nothing nudges you at the right time, and the nudges that do exist feel like an app trying to squeeze engagement out of you.

Meta's "Bringing People Closer Together with AI" challenge gave us a reason to build what we'd wanted for a while: an AI that notices the memory for you, decides whether it's worth bringing up, and helps you write something better than "hey stranger!" It had to do all that without making you feel watched.

What it does

NexusMuse runs inside NexusHub, a demo social app we built. NexusHub has three parts: Spark (an Instagram-style feed), Pulse (a Facebook-style feed), and Echo (a WhatsApp-style chat). Muse is the AI layer underneath all three. The main feature, Reconnect, works in eight steps:

Find people you've gone quiet with. We look at whether you two have stopped talking, not whether someone's posted lately. Score each connection on four signals: how much your recent interests overlap, how close you used to be, how much shared history you have, and how long it's been. Only surface the ones we're confident about. Pull up a shared memory that exists. Muse never invents one. Have an LLM sum up the relationship in a couple of sentences grounded in that history. Draft a message that sounds like you. We build a lightweight style profile from your past messages so it doesn't read like a bot wrote it. Show you all of this, slowly. Do nothing until you say yes.

Step 7 is the one we care about most. The first couple of times a memory resurfaces, Muse stays quiet. It's just a photo in your feed. After it's come up a few times, Muse asks if you want to reconnect. Even then, before showing you anything beyond the memory, it checks whether the other person seems likely to want that too. (That check is simulated in the demo, and the UI says so.)

Once you're both talking in Echo, Muse reads the conversation. If there's something concrete to plan, it offers to help set it up. It won't jump from "here's a photo" to "let's schedule a meetup." A relationship matrix tracks each pair's history: reactions, mutual matches, messages sent, and memories captured. That's what Muse learns from over time, and you can see all of it.

We also built a simulated Meta Glasses layer that uses your device's camera. Once two people confirm a plan, they can capture a shared album of the outing hands-free, the way real glasses would let them.

How we built it

The frontend is vanilla JS with no framework and no build step. We kept the algorithm (muse_engine.js) completely separate from the DOM. A second layer (muse_engine_ui.js) handles rendering and hooks it into the app shell (nexushub.js). That split saved us more than once when we needed to change how something looked without touching the logic behind it.

The backend is a small FastAPI service that proxies calls to Meta's Llama API, so the model never talks to the frontend directly and the API key stays on the server. Every LLM call has a deterministic mock fallback. If the key is missing, we hit a rate limit, or the connection drops mid-demo, Muse falls back to reasonable canned text instead of hanging or crashing.

The app runs on a hand-tuned scoring formula. We also trained a small PyTorch neural net on the same four signals, so when someone asks "how would this learn at scale?" we have a working answer instead of a hand wave.

Challenges we ran into

The hardest problem was tone, not code. Almost every version of "AI notices you haven't talked to someone in years" felt creepy the first time we saw it, even when the logic made total sense. We rewrote the reveal flow more than anything else in the project. It started as one card that dumped a score and a memory on you all at once. Then it became a staged conversation that revealed more as you engaged. Eventually we realized Muse should just stay quiet for a while first. That quiet stretch is what finally made it feel okay.

The other challenge was being upfront about what's simulated. This is a one-user demo. Nobody is on the other end of the "does Priya want to reconnect too?" check, and no friend types back after you send an icebreaker. It would have been easy to let that pass as real. Instead we labeled every simulated piece, in the UI and in the code. It's a little less flashy on stage, but it's the truthful version of the product.

Accomplishments that we're proud of

We're happiest with the pacing. Muse used to ask you to reconnect the second a photo showed up. Now it waits and only speaks up once it's earned it. That's a small UX change, but it completely changes how the feature feels.

We're also proud that "gets smarter over time" isn't just a pitch deck line. Reactions persist, topic weights shift, and each pair's relationship matrix grows. You can see and explain all of it, instead of trusting a model nobody can question.

What we learned

We learned a lot about cold starts. How do you honestly demo a feature that learns from your data when there's no usage history yet? Our approach was to bootstrap on synthetic priors, log real reactions, and retrain on a mix of both. We'll probably use that pattern again on other projects. We also got a much better sense of when an AI feature should speak up and when it should wait.

What's next for NexusMuse

The biggest next step is making the two-sided parts real: an actual second user on the other end of the mutual-match check and the icebreaker reply, instead of a probability model filling in. After that, we want a real database instead of localStorage, so the relationship matrix and learned weights carry across devices and scale past one browser. We also want a real MCP connector for memory retrieval instead of local seed data. And if the integration path opens up, we'd like a way into WhatsApp and Messenger, so Reconnect can live where people's dormant friendships already are instead of inside a demo app we built to prove the idea.

Built With

Share this project:

Updates

Submission history