It started from fandom, not from dating apps
People in a new category have no words for what they want, so I started from an adjacent market where the desire is already paying. K-pop fandom is less a music industry than a paid answer to a paradox nobody names: I have a type I will never meet, and I would rather invest in a relationship that asks nothing of me than one that does.
Which leaves one question: what happens if you keep that desire structure and remove the parasocial distance? The idealised figure talks back — on the user’s schedule, expecting nothing in return.
Most AI products treat speed as the virtue: faster, more, more immediate. Beff starts from the opposite hypothesis. If waiting is what makes a relationship, then latency is not a defect — it is a feature.
So I deliberately constrained two things. Space: the map is bounded to a walkable neighbourhood rather than a whole city. Time: replies do not arrive instantly, but after the sort of interval a person might take.
Four layers, not one
- Solved by image generation.
- Solved by language models. The existing companion apps stop about here.
- The layer almost nobody addresses. A generation raised on assistants that wait until summoned and then disappear has carried that expectation into how they want relationships to work.
- Feeling like a real life rather than a simulated one — the layer added through the “neighbour” framing. You walk past the cafe they would have been at. The proximity is felt, not actual.
One hypothesis, 50% confidence
“MZ users want connection and non-intrusion simultaneously, and will trade emotional depth for that control.” Confidence: roughly 50%. At 22 I am inside the demographic — which does not make me the user. My read of my own behaviour runs through the same distortion. High confidence never licenses skipping validation; it only changes how the validation is designed.
What mattered more than the click-through
The hypothesis compressed into one ad line: “Dating is exhausting. Being alone is worse. I’ll stay exactly as close as makes you flutter, no closer.” The first half names the cost being avoided; the second names what I was actually selling — controlled distance, not connection.
6.77% click-through
1,600 views, 108 clicks, against an industry average around 1%.
Proof the copy hit a real desire — but not proof of which desire.
The composition of six signups split the answer
Four women, two men, all in their twenties. One of the women chose a female AI friend on the selection screen.
CTR alone cannot separate “they want a romantic surrogate” from “they want a low-cost confidant”. The composition could. It was reading as a confidant, which was the layer I had hypothesised. The sample was small; the signal was clean.
Method
I observed and questioned people in the moment of use — recording reactions while they were looking at the screen, rather than surveying them afterwards.
- 01Contextual inquiry
Observing and questioning participants as they used the app
- 02LLM prompt engineering
Conversational persona and reply rules composed as prompt layers
- 03Delayed-reply experiment
Treating reply latency as a design variable
The screens
The decision that the AI would not reply instantly had to be earned on screen. The core problem: make the wait read as anticipation rather than as failure, by showing the state honestly.
* Screens designed and built by me.
Try waiting for it
Read as a description, this just sounds like an odd decision. So here it actually makes you wait — the reply below genuinely has not arrived yet, and will not until the stated time passes.
I’m a bit worn out today
If you read another paragraph while waiting, that is exactly the state this was designed for: an instant answer gets consumed, a delayed one stays with you. (Skippable, and shown immediately if you prefer reduced motion.)
Beff was designed around a walkable neighbourhood radius. Yet the 120 people who arrived in the first three weeks are spread evenly across the US, China, Japan and elsewhere — people who share no neighbourhood are using a neighbourhood-shaped app. At n=120 that is far too small to conclude anything, so it stays open as a sign the design premise may be wrong.
What I found
An unintended user population appeared
A cluster of women in their thirties — not the population I designed for — showed up. Nothing in my data explained why.
Rather than attaching a plausible post-hoc story, I recorded the fact that it was unexplained. It is not a conclusion yet — it is the next research question.
The moment you invent a reason you did not observe, every later design decision is stacked on that fiction. Writing down “I don’t know yet” is more accurate — for the product and for the research.