P10LabsP10 Labs

Real Problem, Real Fix

When keyword search isn't enough to find what matters.

Watobu helps UX teams explore UX flows across many apps. The content was there — screenshots, videos, tags, notes — but keyword-only search meant people couldn't reliably reach it.

WatobuUX flows · Discovery
Index size1,936 UX flows
Queries tested25 real search queries

Tech

MongoDB → Meilisearch

all-MiniLM-L6-v2 embeddings

Goal

Make exploratory queries actually work.

The product

A UX flow library that people couldn't quite search.

Watobu helps UX and product teams store and explore rich UX flows from many apps: screenshots, videos, tags, and notes. Instead of manually browsing folders of screen captures, teams want to ask questions like:

  • “Show me onboarding flows in B2B fintech apps.”
  • “Examples of progressive onboarding for complex dashboards.”
  • “How ecommerce apps reduce friction during checkout.”
  • “Examples of passwordless login experiences.”

Initially, search ran on Meilisearch using only keyword matching. It was fast and simple — and for exact, literal matches, it was fine. But real queries from real teams aren't that literal.

Where keyword search fell short

Silent dead ends, even when content existed.

The text-only approach worked for exact matches but struggled with how people actually searched.

1 · Synonym & intent gap

Queries like “multi-step signup” often returned nothing, even when flows were tagged as “onboarding”, “KYC”, or “account creation”. “Shopping cart abandonment” might miss flows labeled “checkout” or “order review.”

2 · Fragmented relevance

Some teams wrote detailed descriptions, others relied mostly on tags or app names. Keyword search treated everything as literal text, so relevant flows were missed whenever wording didn't line up.

3 · Silent dead ends

Exploratory queries like “forgot password flow” often returned zero results, forcing users to reformulate queries or simply give up. The result: teams knew useful flows existed but couldn't reliably discover them.

The solution

A hybrid semantic + keyword search system, not a black box.

Rather than replacing Meilisearch or bolting on a generic “AI search,” we turned the existing index into a hybrid system that understands intent while preserving precise keyword control.

01 · Semantic intent layer

Each query is converted into a vector using an embedding model (all-MiniLM-L6-v2). The Meili index includes separate embedders for fields like:

  • title
  • description
  • app name
  • tags
  • app categories

This lets search understand that “multi-step onboarding” is related to flows tagged with “onboarding” and “KYC”, even if those exact words never appear.

02 · Lexical precision & filters

Keyword ranking still plays an important role. Exact matches in titles, tags, and categories are preserved. Structured filters allow narrowing results by:

  • app categories
  • tags

This keeps search precise when users know what they're looking for.

03 · Field-aware hybrid ranking

Each search runs multiple hybrid sub-queries over the same index:

  • title
  • description
  • app name
  • tags
  • categories

Each blends semantic similarity and keyword matching (semanticRatio = 0.5). Results are merged using weighted ranking:

Field weights

  • Title — 0.30
  • Description — 0.25
  • App name — 0.20
  • Tags — 0.15
  • Categories — 0.10

Why it matters

A strong title match can matter more than a weak description match, without losing the nuance of tags and categories.

Have search that “sort of” works — until it doesn't?

If your users are regularly hitting dead ends or guessing the right keywords, you're probably leaving a lot of value in your data on the table.

Talk about your real problem