Skip to content

Keyboard shortcuts & navigation

One chord, everywhere in the app (in these docs, the same keys open the docs search). The palette jumps to any page or named tab your seat can see.

Keys Does
Ctrl+K / ⌘K Open the palette (also via the search button top-left)
/ Move through results
Home / End Jump to the first / last result
Enter Open the selected page or tab
Esc Close

How the search behaves - worth knowing, because it rewards lazy typing:

  • Empty query lists your pages in sidebar order - the palette opens as a jump list of your own rail. Tabs appear once you type.
  • Every word must match. “settings whatsapp” narrows to one row rather than returning everything mentioning either word.
  • Fuzzy is fine. Subsequences match (“brk” finds Break-even), exact and prefix matches rank higher, and shorter names win ties. A page outranks its identically-named tab (the Approvals page beats Settings’ Approvals tab).
  • It never widens what you can see. The index is built from your own projected sidebar - a page your role lacks is absent from search too. A page your plan hasn’t unlocked shows locked and Enter takes you to Billing instead; locked pages contribute no tab rows.
  • At most 12 rows show; refine the query rather than scrolling.

Six pages have named tabs, and each is deep-linkable by appending ?tab=<id> to the page’s URL - the same links the palette produces. These are shareable and bookmarkable.

Page Tabs (id → label)
/approvals pending → Pending · decided → Decided
/agents (Agent Hub) agents → Agents · tax → Tax · runs → Run history
/breakeven (ROI) actuals → Actuals · forecast → Forecast calculator
/housekeeping cleaning → Cleaning · inspections → Inspections · damage → Damage · upcoming → Upcoming
/settings general → General · operations → Operations · payments → Payment channels · whatsapp → WhatsApp · approvals → Approvals
/site (Booking website) general → General · design → Design · properties → Properties · pages → Pages

Example: /settings?tab=whatsapp opens Settings on the WhatsApp tab.

Two forgiving behaviors:

  • A page may render fewer tabs than it registers. Housekeeping shows Inspections, Damage, and Upcoming only when there’s something on them (and only to seats that may see them). A ?tab= value the page isn’t currently rendering falls back to that seat’s own opening tab - never a blank page.
  • An unknown or misspelled value falls back the same way.

Detail pages (a booking’s Payments panel, for instance) have sections too, but they exist once per record - those deep-link by path (/bookings/<id>/<section>), which is the form notifications use, rather than by ?tab=.