# global-search.screen Implements [brief U](./U-global-search.brief.md) โ€” one search across the corpus, typed-grouped results, tap-to-land-in-drawer. Reachable from chat-home top bar (๐Ÿ” button), any drawer's header, or voice ("find Felix"). Voice register: adapts โ€” hearth on rich result, plain on no-match. ## Layout (full-screen overlay sheet) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ—„ Cancel ๐ŸŽค โ”‚ 56pt โ€” top bar โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ search input โ”‚ โ”‚ ๐Ÿ” felix โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ Operators: @prospect #tag type:audit โ”‚ inline hint, fades after first type โ”‚ surface:onlyfans since:7d โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€โ”€ Recent โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ when empty input โ”‚ โ€ข "berlin tour" 14:02 โ”‚ โ”‚ โ€ข "@felix vip rates" yest โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€โ”€ Suggestions โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ Try: "last week" ยท "high stakes" ยท "failed" โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ as Quinn types: โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ โ”‚ โ”‚ Prospects ยท 1 โ”‚ grouped results โ”‚ โ–ข @felix ยท Tryst ยท 12d active โ”‚ โ”‚ โ”‚ โ”‚ Conversations ยท 3 โ”‚ โ”‚ โ–ข Felix re: Berlin ยท iMessage ยท 4h ago โ”‚ โ”‚ โ–ข Felix re: VIP rates ยท Tryst ยท 2d โ”‚ โ”‚ โ–ข Felix re: Sept booking ยท iMessage ยท 14d โ”‚ โ”‚ โ”‚ โ”‚ Audit ยท 6 โ”‚ โ”‚ โ–ข Drafted reply to @felix ยท 4h ago โ”‚ โ”‚ โ–ข Bumped Tryst (felix in last-25 viewers) ยท 6h โ”‚ โ”‚ โ€ฆ โ”‚ โ”‚ โ”‚ โ”‚ Briefs ยท 1 โ”‚ โ”‚ โ–ข Brief J ยท "felix" mentioned in v2 ports list โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## Components | Component | Notes | |---|---| | Top bar | Cancel + voice button. Voice = mic for spoken query. | | Search input | Autofocus on open. Operators rendered as chips when typed (e.g. `@felix` โ†’ chip). | | Operator hint | Inline placeholder hint fades after first keystroke. | | Recent | Last 5 queries when input empty. Tap to re-run. | | Suggestions | Auto-generated based on recent activity (3 max). | | Group section | One section per result type (Prospects, Conversations, Audit, Content plans, Posts, Settings, Tour legs, Hotels, Specialists, Briefs). Each section: count + top 3 results inline + "See all N" footer if more. | | Result row | Type-specific icon + title + 1-line context + timestamp + tap target. | ## States 1. **Empty input** โ€” recent + suggestions. 2. **Typing (0โ€“2 chars)** โ€” recent + suggestions still; no live results yet (avoids noise). 3. **Typing (3+ chars)** โ€” live grouped results stream in per section; top groups first. 4. **Operator chip active** (e.g. `type:audit`) โ€” only matching group shown; other groups collapsed with counts. 5. **Voice query in flight** โ€” mic pulsing; partial transcription shown in input. 6. **No results** โ€” single line per group: "No prospects matching 'xyz'." Plain register on empty. 7. **Streaming partial** โ€” sections appear as their indices return; small "still searching" caret below. 8. **Search complete** โ€” caret disappears; counts finalize. 9. **Filter applied from drawer entry** โ€” when search is opened *from* a drawer (e.g. audit), the drawer's existing filter pre-applies as an operator chip. 10. **Index degraded** (per M) โ€” banner: "Some results may be missing. The search index is rebuilding." Doesn't block. 11. **VoiceOver** โ€” sections announced as headings; result rows have hint "double-tap to open." ## Operators (supported) - `@` โ€” prospect / conversation scoped to a handle. - `#` โ€” content plan / asset tag. - `type:` โ€” restrict to one group (audit, posts, prospects, etc.). - `surface:` โ€” scoped to one surface (onlyfans / tryst / etc.). - `since:` โ€” `since:7d` / `since:yesterday` / `since:2026-05-01`. - `specialist:` โ€” audit rows from one specialist. Operators are tappable chips once detected; remove via ร— on the chip. ## Interactions - **Tap a result row** โ†’ open the originating drawer scoped to that item (prospect โ†’ prospect detail; audit โ†’ audit-row-detail; etc.). - **Tap "See all N" footer** โ†’ open the originating drawer with the active query as its filter. - **Tap recent or suggestion** โ†’ re-run query. - **Long-press a recent** โ†’ "Remove from history" / "Pin to top." - **Mic** โ†’ voice query; on accept, runs as if typed. - **Swipe-down** โ†’ dismiss; query and results discarded unless pinned. ## Edge cases - **Coop hash result** (per N PII hashing) โ€” result shows hash, not original PII. Tap routes to coop-drawer scoped to that hash. - **Briefs in search results** (Quinn-as-power-user) โ€” these are markdown files; opening one loads a read-only doc viewer with anchor-jump to the matching section. - **Two prospects with same handle on different surfaces** โ€” both shown; surface chip disambiguates. - **Encrypted attachment content** (per N N7b) โ€” NOT indexed; search doesn't reveal attachment bodies. - **Voice query mis-transcribed** โ€” quick "use my last typed query instead" affordance. - **Reduced motion** โ€” streaming animation replaced by snap-in. ## Related - [Brief U](./U-global-search.brief.md) โ€” parent design. - [chat-home.screen.md](./chat-home.screen.md) โ€” ๐Ÿ” top-bar entry point. - [Brief I](./I-audit-trust-replay.brief.md), [Brief P](./P-inboxes.brief.md), [Brief T](./T-analytics-dashboard.brief.md) โ€” drawers this search lands into. - [Brief N ยงN7a](./N-provider-coop.brief.md) โ€” PII hashing constraint on coop results. ## Out of scope - Semantic / embedding-based search (P3+; v1 is keyword + operators). - Cross-tenant search (search is scoped to `user_id = current Quinn`). - Search history syncing across devices (defer).