Pink noise plays a steady, even tone that can help with focus. It stays off until you turn it on.
Human-first NLP · People Matching
What do you want to do today?
Tribe is a human search engine for social life and networking. You type one sentence about what you want to do today, the AI finds people who want the same, and you meet them in person.
Its core features: a prompt field that highlights what the matcher can use as you type, a wait screen that shows what the AI is doing, and one chat at a time with two safe exits. I designed the MVP solo, from architecture to developer handoff.
The whole product rests on one text field, so the design problem was making someone feel safe enough to be honest in it.
There is no profile and nothing to browse, and people connect before either of them knows who the other is.
Between typing a wish and meeting a stranger, trust can break three times: while typing, while the AI works, and when the match arrives. Each moment has its own design answer.
Intent + vulnerability
Fear of sharing before trust is established
→ Smart Echo InputBlack box anxiety
Stress during AI processing
→ XAI teachable waitDecision fatigue
Skepticism of match results
→ XAI confidence badgesThe brief was an intent-based social network for Budapest. Once I had mapped the competitors, the real question was how to get someone to type what they actually want, unedited, into a field that matches them with strangers.
The decisionChose intent-first (one prompt, no profile) over engagement-first (profiles, browse, swipe), because people needed a safer way to connect. Cost: managed friction: a harder first screen than a profile grid.
Most social apps measure time in the app and ad impressions, so they lead with profiles, browsing and swiping. Tribe measures how well intent turns into a connection, so it leads with one prompt, anonymity and privacy built into the structure.
The market
Engagement-first
Tribe’s bet
Intent-first
The search box is a psychological safety problem.
So Tribe is designed for the moment before someone types the query.
I used human factors as the frame. The interaction gap diagram was my first deliverable: it gives each of the three states a design response, and it became the brief for every decision after it.
“The product’s job is psychological safety — enough of it that someone types the thing they actually want.”
Smart Echo Input answers the fear of sharing, a teachable wait answers the anxiety of the AI’s black box, and confidence badges answer doubts about the match.
Each decision answers one moment where trust could break before it has formed.
The decisionChose to design the fallbacks before the happy path, over finalising the happy-path UI first, because the edge cases decide the product’s character. Cost: slower to a first screen anyone could look at.
What the person feels, what the interface shows and what the system does run in parallel. The prompt goes down to the NLP engine, and the match comes back up as trust, revealed step by step.
The edge cases carried the most weight: the no-match screen, the breathe chat and the safety exit.
I designed three generations of input validation. The developers raised two concerns, that the redundancies risked misreading people and that the API calls cost too much. Gen 3 answered both and was accepted once I made the case for it, and the match logic, processing states and safety exits were built around it.
The decisionChose Gen 3, real-time NLP chip validation, over Gen 2, AI metadata extraction, because match quality is the entire product bet: vague input, bad matches, no Tribe. Cost: harder to build, and it took a clear case to get it accepted.
Free tags gave the matcher nothing to work with, and AI extraction was too slow and costly. Chip validation reads what, when and where as the person types.
Freeform text with no structure, and the system can’t match on noise.
Smarter, but the JSON was unreliable, it took 1.4 s and it cost 25× the tokens.
NLP reads What, When and Where as you type. It is hard to build, and it was worth the effort.
The developers found three problems: the model’s answers broke the parser, extraction added a 1.4 s wait, and classifying a prompt cost 25× more than processing it.
| Why Gen 2 was dropped | After synching with devs |
|---|---|
| Structural unreliability | The system expects {"tags":["x","y"]}, but the LLM answers in conversational text, so parsing fails. Every call needs a retry wrapper just to extract two words. |
| Latency | 800ms standard + 600ms metadata extraction = 1.4s wait before anything useful happens. |
| Token cost | A 15-word prompt needs a 400-token system prompt to classify it, so categorising costs 25× more than processing. An MVP budget can’t carry that. |
As the person types, a chip lights up for what, when and where. When all three are confident, the button unlocks.
Accepted version — chip validation in action
Empty state — placeholder: “What do you want to do today?”
Each of the four failure modes gets its own message. The one for offensive input doesn’t scold the person who typed it.
| Input | What it says |
|---|---|
| Offensive or inappropriate: swearing, shaming, sexual, aggressive, racist | “Let’s keep it respectful. Try rephrasing your intent.” |
| Numbers only, invalid characters, no real words | “Invalid characters. Please describe your intent in plain words.” |
| Over 50 characters | “Keep it simple — a short sentence is enough. You can add tags to make your search more accurate.” |
| Misspelling, as in sqashing | “Did you mean squashing?” |
While the AI matches, the screen shows each step it takes. Location access is asked for only once its reason is on screen, and both people stay anonymous until both say yes.
The wait shows what the system is doing at each step. Because the user can see the processing, the wait builds trust.
It appears once step two completes, so the reason for the request is on screen before the request is made. My call was to delete location data after a match and use only aggregated data for analytics, because that keeps users safer and earns their trust.
Initials and a match score, no photos. Identity is revealed only after both people say yes, so neither of them knows more than the other.
Warm orange, softer than red. Nearby intents appear below, so the person gets real options without manufactured optimism.
I limited it on purpose, because people take a single chat more seriously: when choices are limited, people value what they have.
The two exits are the Breathe Chat, a 24-hour pause, and the Safety Exit. Without them, a single chat would be a trap. It is also a bet against dopamine loops: no infinite scroll and no variable reward.
A 24-hour pause makes stepping away feel temporary. The user keeps the connection and loses the pressure.
Five exit reasons, with “I’m feeling unsafe” set apart in red at the bottom. Because it stands apart, someone who feels unsafe finds it without scanning the list, and a casual exit stays easy.
Tapping opens the report on the same screen, because this is the most stressful moment in the app and it should take no extra steps.
The report appears in the same row, so the user finishes it where they already are.
Once the wireframes, structures, user flows, design system and core features were prototyped, we decided to continue the build with vibe coding.
I built Tribe’s design system too. The full spec:
Every constraint that survived the dev sync had a human reason behind it, which is why I would still push back on anything that doesn’t serve the user. Next time, a questionnaire would come before the first screen.
The one metric I would track is how prompt quality relates to match quality. Whether the two move together would tell me if the core idea holds.
| Phase 1 — UsabilityPre-Launch Lab Testing | Phase 2 — TelemetryAlpha Field Testing | |
|---|---|---|
| Objective | Verify if real-time keyword highlighting reduces input anxiety and ensures semantic accuracy. | Validate the NLP matching engine and progressive disclosure mechanics under live infrastructure load. |
| Methodology | Moderated testing (8–10 participants) using low-fidelity click-dummies. | 14-day unmoderated field test deployed to a high-density cohort of 500–1,000 target users in Budapest. |
| Signals | Time-on-task, token correction frequency, and subjective workload (SEQ score). | Progress toward the target ≥40% match-to-meetup conversion milestone, live data logging against the <40% engine failure threshold, and exact drop-off points within the unmasking sequence. |
Two people from the Tribe team on the design.
“This is very, very high level. I like it a lot.”
— CTO, Tribe
“This is an app I’d actually want to see built.”
— AI Engineer & Neuroscientist, Tribe