Search
One box across every umbrella?, comment, release, and raw feedback row in the project. Open with cmd-K (or ctrl-K), or click the pill in the top bar.
Opening the palette
Two entry points, same results surface:
- Keyboard.
cmd-Kon macOS,ctrl-Kon Windows/Linux. Works anywhere in the dashboard. - Top bar. The always-visible search pill in the dashboard chrome. On narrow screens it collapses to an icon that opens the palette directly.
Results are grouped by kind — umbrellas first, then comments, releases, feedback. Groups with zero hits hide their header. Arrow keys cycle, Enter opens, Escape closes.
What's searched
| Entity | Rows included | Fields |
|---|---|---|
| Umbrellas | All, including archived | title, body, author, tag names |
| Comments | Approved only | body, author |
| Releases | Drafts + published | title, body, author |
| Feedback | Triage, attached, archived | body, author |
Pending and rejected comments are excluded deliberately — unreviewed text never shows up in the palette, not even to admins. Submitter email addresses are never in the result payload.
Ranking & snippets
Matches are ranked by where they land: titles weigh heaviest, then body text, then author names, then tag names. Multi-word matches that stay close together rank higher — a three-word query that all hit the title beats a query that scatters matches across a 2000-word release body.
Snippets show ~30 words around the match with <mark> highlights. Ties on rank break by recency — the most recently touched row wins.
Query syntax
Type what you'd type into any other search box. A few extras work:
"exact phrase"— double quotes force matching in order.-word— leading minus excludes a term.word1 or word2— literalorbetween terms broadens the match.
Empty query returns no results — the palette waits for at least one character.
Scope & privacy
- Admin-only. Search lives inside the authed dashboard shell — visitors to your public roadmap don't have access.
- Per-project. One project at a time. Switching projects rescopes the results without rebooting the palette.
- Size-capped. Up to 100 hits per query. Past that, refine the query — this is intentional; a "show more" pager would imply pagination is the right answer, and it isn't.
- Rate-limited. Live typing hits a separate rate-limit bucket with a generous budget. Automated callers should debounce.
Search API
The palette is thin glue over a single authed endpoint:
GET /api/v1/projects/{project_id}/search?q=&limit=
Returns a list of typed hits (kind, entity_id, title, snippet, rank, updated_at). Full schema + parameters live in the OpenAPI reference at /docs/api.