Skip to case study
← Back to the machine

A product exploration for Sparkchat

Sparkchat:
Crossed

Helping friends discover plans they could share, without the awkwardness of asking first.

Sparkchat reveals an overlapping cowork plan with Olivia
A shared plan, discovered in the working prototype.

Sparkchat got the plans out of the group chat. But “I’m working at this café” still left me wondering: am I invited, or are they meeting someone else? Then there’s the opposite moment: “You went to that store yesterday? I wanted to go too!” Crossed started with both—the invitation we’re unsure about, and the plan we only hear about afterwards.

My work
User research, product strategy, roadmapping, UI/UX and prototyping
Tools
Figma · Claude · Next.js · TypeScript · MapTiler
Status
Independent concept and working prototype.

The project at a glance

Problem
Friends miss easy chances to meet, and seeing a plan doesn’t always feel like an invitation.
Solution
Crossed makes the first move. It compares friends’ plans and privately chosen company, then invites both people to connect when their plans fit and interest is mutual.
What I learned
I practised mapping the user journey and matching logic in Figma, turning those flows into a working prototype, and using MapTiler’s place search and geocoding to turn a chosen place into map coordinates. Testing then brought me to the cold-start problem.

Problem & pain points

Sparkchat’s Broadcast feature lets you share a plan and invite friends to join. But there’s a moment before pressing Join that I found interesting: did they actually want me there, or did they just share it with everyone?

Seeing a plan isn’t always the same as feeling invited.

I don’t see the opportunity.

We might both be studying or running errands, but neither of us thinks to turn it into a hangout.

I’m not sure I’m invited.

A friend broadcasts a gym plan. Did they want me to join, or did they just share it with everyone?

What if Sparkchat could spot those opportunities and invite us both? Crossed starts with the things we’re already doing, finds a plan we could share, and gives us that opening without either person having to ask first.

Research: the plans were already there

I asked people about the plans they do alone, the friends they’d like to see, and what gets in the way. Their answers gave me a starting point—and a reason to look beyond just making a match appear.

Exploratory survey · Percentages of respondents, rounded to whole numbers.

82%of respondents

Wanted to see someone more often

They had one or more people they’d be happy to hang out with, but rarely talked to or made plans with.

73%of respondents

Could recall at least two missed chances

In the last 30 days, they’d done something alone at least twice that they’d have enjoyed with a friend who had a compatible plan.

What stopped people reaching out?

  • I’m too busy / our schedules don’t line up55%
  • I don’t have a natural reason to message them36%
  • I’m not sure they’d want to hang out27%
  • We aren’t close enough for me to casually ask18%
  • Making a plan feels like too much effort9%

People could choose more than one reason, so these percentages don’t add up to 100%.

Start with the everyday plans

Studying and working were the most selected plans people could see themselves sharing, followed by gym and leisure plans. These gave me practical activities to start with.

Be careful what “selected” means

Selecting Sarah meant different things to different people: some would genuinely be happy to do the activity together, while others would probably be okay with it. I’d need to test whether the selection screen makes that intention clear enough.

What I asked in the survey

“How often do you have something you plan to do alone that you would also be happy doing with a friend?”

I also asked about missed opportunities in the last 30 days, barriers to reaching out, friend selection, and what people would do after a match.

Most respondents chose moderately close friends as the group this would be most useful with. That gives me a more specific audience to explore than assuming it’s equally useful with every friend.

Solution: let Crossed make the first move

I add something I’m already planning to do and privately pick friends I’d be happy to see. Crossed compares our activities, times, and locations. If a friend picks me too and our plans fit, Crossed brings the idea to both of us: here’s something you could do together.

Add a plan

Share what I’m already doing, where and when. No new event to organize.

Plan form with activity, location and timing
Set the activity, place, and time.

Choose friends privately

Select who I’d like company from. They make their own selection independently.

Friend selection with a private and mutual selection explanation
Selections stay private until they’re mutual.

Get an invitation from Crossed

Crossed reveals the shared plan to both friends, with a way to start chatting and work out the details.

A compatible cowork plan with Olivia and a chat button
A successful match in the demo prototype.

MVP scope & tradeoffs

I wanted the suggestions to be worth saying yes to, so I kept adding rules: enough time, a practical location, mutual interest. Each one felt reasonable. But put them all together… I’d made it surprisingly hard for two plans to match.

1:1, with mutual interest

Both people have to pick each other. That removes the guessing, but means fewer friends can become a match.

At least 60 minutes

I wanted enough time to hang out. The downside: a perfectly good quick coffee wouldn’t count.

A realistic location

Meeting has to be practical. Even if everything else fits, being too far apart can rule it out.

One active match

Look up to three days ahead and focus on one match at a time. Simpler to act on, but fewer options to choose from.

That gave me something specific to check in testing: which rules were protecting a useful match, and which were ruling out a perfectly good coffee with a friend?

Design & development

I mapped the screens and flows in Figma, then worked with Claude to build them in Next.js and TypeScript. I used MapTiler for place search and geocoding: turning a place name into coordinates so the prototype could locate plans and check how far apart they were. That let me move beyond showing what a match would look like and actually try to make one happen.

The earlier flow explores contextual consent before revealing identities. The current prototype demonstrates private friend selection and a compatible-plan reveal.

Once I could enter different plans, times, and places, the matching rules had to work together. That’s where the problem showed up.

Testing: uh-oh, “no overlap yet!”

I was excited to try the matching flow. Then I kept landing on “no overlap yet.” I’d built the moment where two plans come together, but there wasn’t much for Crossed to work with in the first place.

That’s the cold-start problem here: Crossed needs friends adding relevant plans around the same time. A bigger database alone wouldn’t solve it if those people didn’t know each other or lived nowhere nearby. But if your first few plans lead nowhere, what makes you want to add another?

Before changing the matching rules, I needed to separate two questions: were there too few relevant plans, or was I filtering out plans that could have worked?

Plan saved with a no overlap yet message
The no-match screen I kept reaching while testing.

Two things I’d check before changing the product

Are friends adding plans?

I’d look at how many people have a friend with an active plan in the same area and time window. If there’s barely anyone to match with, I’d first help a small friend group start together.

Are the rules too restrictive?

If friends are adding plans, I’d record where potential matches drop out: mutual selection, activity, time, or location. Then I’d ask about plausible near-matches. Would a 30-minute coffee actually have worked?

My prototype testing surfaced the empty-result problem; it didn’t tell me how real users would respond. I’d need that small-group trial before deciding whether to change onboarding, a matching rule, or the idea itself.

Next: try it with one friend group

I’d love to try this with a friend group that already spends time around the same campus library or cafés. They’d have real routines that might cross, and I could be there to help if adding a plan felt confusing.

I haven’t run this trial yet. Here’s how I’d approach the first few weeks:

1. Bring friends in together

I’d sit with the group and help everyone add something they’re actually doing that week. Who they want to see would still be private. I want to find out whether their real plans overlap.

2. Find out why plans miss

When nothing matches, I’d check why. Was nobody nearby, did the times miss, or was there no mutual selection? For practical near-misses, I could ask whether the plan would have worked without exposing anyone’s private choices.

3. Change one constraint

If people say a quick coffee would have been nice, I’d try lowering the 60-minute minimum for coffee. One change at a time would help me see what actually helped. Mutual interest would still be required.

4. Test whether it lasts

After helping everyone get started, I’d ease off the reminders. Do they add another plan themselves? If they don’t, I’d want to hear what made it feel like too much effort or not worth coming back to.

What would tell me it’s working?

I’d keep track of how many plans lead to a mutual match, how long the first match takes, and whether the friends actually arrange to meet. I’d also check who adds another plan the following week, including people who never got a match.

I’d compare the weeks when I was helping with the weeks when I stepped back. That would tell me more than a busy first day where everyone was trying it because I asked.

What stayed with me

This project gave me more practice with user research, and a reminder I needed: don’t believe in my own assumptions 100%. Just because I can picture myself using something doesn’t mean other people will. Next time, I want to test the idea with people earlier, before getting too carried away building it.

Then came the cold-start issue. I could build the matching flow, but Crossed still needed enough friends adding plans for anything to happen. Seeing “no overlap yet!” kept bringing me back to that. Getting people started together needs as much thought as the feature itself.

It was also my first time using a map tool! I learned how to use MapTiler to search for places, turn them into coordinates, and check whether two plans were actually close enough. (Was trying to use Apple Maps integration, but ouch, I’m just a broke uni student.)

I’m excited to keep testing this with real people. I want to find out whether Crossed can turn one of those “why didn’t you tell me?” moments into an actual plan together.