David T Phung
X search · redesigned from first principles

Search that understands the question.Fable 5

X search is the most broken surface on the platform: exact phrases miss, operators fail, Latest is unusable, and users route around it by asking Grok instead. The fix is not a prettier results page. Search is an intent router, not a feed of mixed results. Below: the working prototype. It reads your intent, shows what it understood as chips you can edit, scores its own confidence, answers in three separate lanes, and puts a receipt on every result.

A working prototype, grounded in real user reports · part of the steerable feed

Problem diagnosis · 2025 to 2026

Why people gave up on X search

These are the documented failure modes, sourced from power-user threads, researchers, and journalists, with X's own engineering statements confirming the index rewrite underneath them. The root cause is shared: a legacy index choking under AI-agent load while the product bolted tabs onto a ranking layer nobody could see into. The backend is being rewritten. The product should be too.

When I search words in something I've posted and tag my handle I don't get anything close to what I'm trying to find.
Precision collapse. Searching your own words, scoped to your own handle, misses your own post. The purest possible query fails, and every operator on top of it inherits the failure.
Receipt: @teslaownersSV · the reply · the thread · June 2026
Latest is spam. Top is engagement bait from three days ago. There is no tab that just works.
Relevance noise. One ranked list tries to serve every intent at once, so it serves none. No spam prior, no quality signal a user can perceive.
Complaint class: daily power users · ongoing
Honestly I just ask Grok to find the post now. It works better than search.
The routing-around signal. Users discovered that a language model reads intent better than the search box. That is the product telling you what it wants to become.
Complaint class: visible user behavior across X · 2026
I typed a ticker and got shitposts. I wanted the price.
Mixed intent unhandled. Stocks, scores, and news are structured questions. Interleaving them with posts serves neither the trader nor the scroller.
Complaint class: finance and sports X · every market day
Sometimes it just says posts aren't loading right now. For a query that worked an hour ago.
Reliability opacity. Failures are silent or generic. No degraded mode, no honest explanation, no path forward.
Complaint class: widespread error reports · 2026
Why is this result here? I do not follow this person and it is not about what I typed.
Zero legibility. No result can explain itself. When ranking is invisible, every miss reads as either incompetence or manipulation.
Complaint class: everyone, eventually

The reframe

Three lanes, never mixed

Every failed search product mixes its lanes. The Fable 5 rule: classify the intent first, then answer in the lane that matches, and never interleave. A prettier results page cannot fix a routing problem. This design adds the routing, the reasoning, and the receipts.

Lane 1 · Answer

Grok interpretation

What the system understood, as an editable sentence with a confidence score. High confidence answers directly (a quote, a score, a summary). Low confidence asks before assuming. Wrong? Edit the chips, not your query syntax.

Lane 2 · Social

Posts, people, media

The ranked social results, with a receipt on every card: exact match, engagement quality, follow graph, recency. Precision queries run on a deterministic lane that either hits or says exactly why not.

Lane 3 · Live

Structured data

Quotes, sparklines, live scores, headlines. Rendered as data modules in their own rail, updating in place, never injected into the post list. The trader and the scroller both get served.

The prototype · type in it, click everything

The working thing

Five scripted intents plus free typing. Press / to focus. Watch the intent hint appear as you type, the interpretation strip explain itself, the tabs re-order by intent, and the live rail update in place. Click Why on any result for its receipt. Try the follow-up chips: refinement in plain language, no operator syntax required.

/
Try

The six flows · a demo script

Every required flow, exercisable above

FlowRun it in the prototype
Casual discoveryTap TSLA stocks live. The answer leads, the rail carries the quote, the posts are ranked by quality.
Precision researchTap "fully autonomous" from:elonmusk. One exact match with a badge, the related post below a labeled fold, Verbatim to tighten.
Entity lookupTap elon musk. People leads, the profile card and Grok summary sit in the rail.
Real-time monitoringTap world cup. Watch the France match clock tick to FT in the rail.
Power query, no syntaxFocus the empty bar, tap a person chip. The palette writes from: for you.
Follow-up refinementTap AI agents, then Only media from verified. Tab and filter apply, nothing typed.

Information architecture

Adaptive, not exhaustive

The tab row is not a fixed menu, it is a ranked answer. The intent classifier promotes the right modes to the front and demotes the rest, so a finance query leads with Stocks and a name query leads with People. Same modes, different order, nothing new to learn.

Query classPromoted orderLive railFilter pills
Finance ($TSLA, "nvda price")Stocks, Posts, News, People, MediaQuote + sparklines, movers, market newsCashtag posts, Verified, News only, Charts
Precision ("exact phrase", from:, since:)Posts (verbatim lane), Media, PeopleAuthor card, related saved searchesVerbatim, Date range, From user, Links
Event (world cup, game 5)Live, Posts, News, MediaScores with clock, schedule, standingsLive now, Highlights, My teams, Verified
Topic (ai agents, design)Posts, People, Topics, News, MediaWho to follow, related communitiesTop, Latest, People I follow, Media, Min engagement
Name (a person)People, Posts, MediaProfile summary (Grok), mutualsVerified, From them, Mentions of them

On mobile

The phone is where syntax dies

Ranking logic

Two lanes of ranking, both with receipts

The precision lane is deterministic. Quotes, operators, and dates compile to exact index lookups on the new full-history index. Verbatim means verbatim: no synonym expansion, no engagement re-sort, recency order. If the answer is zero results, the system says what it checked and why it found nothing, then offers relaxations (drop the date, drop the author, allow semantic match). A silent miss is the one unforgivable failure.

The discovery lane is hybrid. Lexical and semantic retrieval fan out, then a quality scorer ranks on engagement quality (replies and saves over raw likes), author trust, spam prior, and recency, with a diversity re-rank so one viral thread cannot monopolize the page. Every card carries a one-line rationale: because it is the exact phrase, because you follow the author, because it is moving right now. Legibility is the anti-conspiracy feature.

The trust equation, stated once: precision failures are fatal, noise is merely annoying. So the system routes every query with operators or quotes into the deterministic lane first, and only blends discovery results below a labeled fold. The one thing this design never does is guess silently.

Engineering architecture

The pipeline, mapped to what you see

StageWhat it doesSurface in the UI
Query parserTokenizes operators, quotes, cashtags, dates into a typed query objectinterpretation chips
Intent classifierFinance, precision, event, topic, name; sets lane and tab orderintent hint + promoted tabs
Entity extractorResolves tickers, teams, people to canonical entitiesentity chips, hover cards
Relevance rankerDeterministic lane or hybrid lexical+semantic with quality scoringresult order + Why receipts
Trend detectorVelocity signals, promotes "moving now" clusters"moving right now" rationale
Live data adaptersQuotes, scores, schedules over streaming connectionsrail modules, in-place ticks
Social graph signalsFollow graph and mutuals as ranking features, never as the only story"because you follow" receipts
News ingestionClustered headlines with source countsnews cards
PersonalizationInterests re-weight discovery lane only, never the precision lane"for you in results" block
Result rendererTyped cards per entity, lanes kept separatethe whole page
Feedback loopEvery Why open, filter toggle, and follow-up is a labeled relevance eventsilent, then better ranking

Component inventory · the Figma outline

Twelve components, every state named

ComponentVariants and states
SmartBaridle · focused (palette open) · typing (intent hint) · submitted · slash-focus ring
Paletterecents · people chips · live modes with mini data · operator tips · keyboard selection
InterpretationStriphigh confidence · low confidence (asks) · editing (removable chips) · verbatim on
TabRowadaptive order · promoted dot · counts · overflow scroll
FilterPilloff · on · with count · disabled (no matches)
PostCarddefault · exact-match badge · why-open · media · highlighted terms
ProfileCarddefault · with Grok summary · follow states
NewsCarddefault · clustered (n sources)
StockModulequote header · mover rows with sparklines · live tick animation
MatchModulelive (clock ticking) · scheduled · final
FollowupRowsuggestions per intent · applied state
ZeroStatehonest miss (what was checked) · relaxation actions · degraded index notice

Tokens: bg #000, text #e7e9ea, muted #71767b, line #2f3336, surface #16181c, accent #1d9bf0, up #00ba7c, down #f4212e, radius 16, TwitterChirp. Keyboard: / focus, arrows in the palette, Enter submit, Esc dismiss. Controls carry ARIA roles with pressed and selected states. Two states are specified here but not wired in this demo: the low-confidence disambiguation ask and the degraded-index banner. Every other named state is clickable above.

Honest comparison

Why this is 1000x, not 10%

Versus current X search

  • Precision restored and provable. Operators compile to a deterministic lane; a miss explains what it checked. The single worst trust-killer, fixed at the root.
  • Intent understood before ranking. A ticker query leads with the quote, a name leads with the person, an event leads with the score.
  • No more one noisy list. Live data lives in modules, social results in their lane, the answer on top.
  • Refinement without syntax. Filter pills and follow-up language write the operators for you.
  • Failures are honest. Degraded mode says so, zero results come with reasons and relaxations.

Versus a prettier results page

  • It keeps what the polished concepts get right: the palette, the live modules with sparklines and flags, the from: person chips, the category modes.
  • Adds the interpretation layer. Confidence you can see, chips you can edit. Categories organize results; interpretation proves understanding.
  • Adds receipts. "Because you follow" stops being a one-off label; every result can explain itself.
  • Adds the precision lane. A visual refresh never answers the broken-exact-search complaint; this design makes it the spine.
  • Separates the lanes. Concept mockups still mix stock posts into the results list; here structured data never pollutes the social lane.

How we would know: the zero-result rate on operator queries falls to the true-miss floor, the abandon-search-and-ask-Grok rate falls, and Why-receipt opens become the standing trust proxy. The feedback loop in the pipeline already collects all three.

What I would ship first

The precision lane plus the interpretation strip. Exact search that provably works, and a system that shows what it understood, are the two moves that rebuild trust. Everything else (modes, modules, personalization) compounds on top of a search box people believe again.

What I would not build

  • More tabs. Adaptive ordering beats an eleven-tab menu.
  • An operator cheat-sheet page. The UI writes operators, users never learn syntax.
  • Trending injection into results. Trends live in their module or not at all.
  • Autoplaying media in the results list. Calm is the aesthetic.
  • A quarantined "advanced search" page. Power lives in the same box, revealed by use.