A keyboard-first command palette that searches photos, people, places, tags, and jumps to any settings page — opens with Cmd/Ctrl+K from anywhere in Gallery.
Press Cmd+K on macOS or Ctrl+K anywhere else, and a single search box opens
over whatever page you're on. Type a query and Gallery hits five providers in parallel — photos, people, places, tags,
and the page catalog — then groups everything into named sections so you can see at a glance what kind of match you're
looking at. Pick a result with the arrow keys and hit Enter; the palette knows whether to open the asset
viewer, jump to a person's page, drop you on a map, or navigate to a settings screen.
The classic search bar in the navbar still works exactly as it did. The palette is a second, faster entry point — built
for the moment when you already know roughly what you want and just need to get there in three keystrokes.
Navigation that responds from the first keystroke
Photos and people travel over the network — they take a few hundred milliseconds, even on a fast server. Navigation
doesn't wait. The palette keeps the full Gallery page catalog in memory and fuzzy-scores it synchronously inside the
same setQuery call that fires the network requests, so jumps to People, Map, Sharing, or any
admin screen show up the instant you start typing.
When the query is a near-perfect match for one navigation entry, that entry is promoted into a dedicated Top result band at the top of the list. Hitting Enter activates it without a single arrow press — the most common
"open this page" case becomes a one-shot keyboard gesture.
Stale-while-revalidate, so the list never blanks
Every keystroke fires a fresh batch of provider calls, but the palette doesn't wipe the old results to show a skeleton
while it waits — that produces a frustrating flicker on slower servers. Instead, the previous successful results stay
visible until the new ones land, and only the sections that change actually update. Typing into the box feels like
filtering an in-memory list, not poking a remote API.
Each provider runs on its own 150 ms debounce with a 5 s timeout via AbortSignal.timeout, and an in-flight
counter discards stale batches whose responses arrive after a newer query has already been fired. A thin progress
stripe appears across the top after a 200 ms grace window when something is still loading, so you always know whether
the empty section means "nothing matched" or "still working".
Smart, filename, description, OCR — all from one footer
The Photos section can search four different ways. Smart is the default — CLIP semantic search,
ranking by visual meaning, so "kitten on a couch" works even if no one ever typed those words. Filename
matches the original file name, useful when you remember an export pattern or a camera's naming scheme.
Description hits any captions you've added, and OCR searches text Gallery extracted
from the photos themselves — receipts, signs, screenshots.
Cycle modes with Ctrl+/ without ever leaving the input. The footer shows the active mode and
the keyboard hint, so the affordance is always discoverable but never in the way.
If the ML server happens to be unreachable, the palette notices and offers a one-click flip to filename mode, so a
flaky machine-learning container doesn't take search down with it.
Recents that come back where you were
Every result you activate gets remembered, scoped per user and per browser. The next time you open the palette with
an empty query, your last few activations are already there — the photo you opened a minute ago, the person whose page
you visited yesterday, the admin screen you tweaked this morning. Repeating a workflow is two keystrokes:
Cmd+K, then Enter.
Recents stay honest as your library changes. Entries that you no longer have access to — admin pages after a
demotion, deleted people, removed tags — are filtered out automatically the next time you open the palette. You can
remove individual entries with the small × button on the row, or hit Delete while the
entry is highlighted.
And on a brand-new browser with no history yet, an empty open isn't dead air: a curated set of Quick links shows up instead, admin-aware so non-admins don't see destinations they can't reach. The palette is useful from the very
first time you open it.
A preview pane on screens that have room
On larger viewports, the palette splits in two: the result list on the left, and a content-sized preview pane on the
right. Arrow up and down through the list and the pane updates with the right kind of preview for each result —
letterboxed photo, face thumbnail, place breakdown, tag with parent path. On smaller screens the preview hides and
the result list takes the full width, so the palette stays useful from a phone-sized viewport up to a wide desktop.
Built to live alongside, not replace
The classic search bar still does what it's always done. The palette is a different shape of search — keyboard-first,
multi-entity, navigation-aware — and it earns its place by being faster, not by being mandatory. Whichever your hands
reach for first is the right one.