18.Keyboard shortcuts & the 648-tile Cmd-K launcher
48 globals, 11+ view-scoped binds, the in-app cheat-sheet, the categorized launcher with live filter, and the right-click context-menu surface across 18 row scopes + 37 symbol-aware view scopes (222 distinct symbol-nav paths).
The shortcut registry
frontend/js/_shortcuts.js is the source of truth — every binding the app honors is listed there once. Three tiers:
- Globals (48 keys) — fire from any view.
- View-scoped (11+ keys) — fire only when the named view is active.
- Modal-scoped — fire only inside specific overlays (Cmd-K, help overlay, dialog primitives).
Every view-scoped bind has a visible chip on the topbar / view header stamped with data-shortcut. The tooltip augmenter appends the key combo on hover ("⟳ Refresh (R)", "+ New Trade (N)"). No hidden keybindings: if a key does something, there's a visible UI element documenting it.
The 48 global shortcuts
Eight nav globals (Cmd+Opt+T/J/D/W/C/L/R/M) jump to Trades / Journal / Dashboard / Watchlists / Charts / Live / Reports / Scanner. The remaining 40 cover settings, account picker, theme toggle, search, command palette, help overlay, and a handful of utility actions.
| Key | Action |
|---|---|
Cmd+K | Open the tile launcher |
? | Open the in-app shortcut cheat-sheet |
Cmd+, | Settings |
Cmd+/ | Symbol search |
Cmd+Opt+T | Trades |
Cmd+Opt+J | Journal |
Cmd+Opt+D | Dashboard |
Cmd+Opt+W | Watchlists |
Cmd+Opt+C | Charts |
Cmd+Opt+L | Live Positions |
Cmd+Opt+R | Reports |
Cmd+Opt+M | Scanner |
Cmd+Shift+A | Account picker |
Cmd+Shift+T | Theme toggle |
Esc | Close overlay / palette / dialog |
The full 48 is in the cheat-sheet view; the table above is the most-used dozen.
View-scoped binds
When you're in a view, single-key shortcuts (no modifier) become active. Examples:
- Trades:
N= new trade,R= refresh,F= focus filter,/= focus search. - Charts:
R= refresh bars,1/2/3/4= timeframe presets,D= draw mode,Esc= exit draw mode. - Live Positions:
R= refresh,S= sort menu,F= filter. - Scanner:
R= refresh,V= toggle voice alerts,1-6= focus panel N. - Webull / Reports / Watchlists / Dashboard / Journal:
R= refresh.
Bindings persist across views: R consistently refreshes the current data, N consistently means "new item of this type" wherever it applies, F consistently focuses the filter row.
The cheat-sheet overlay (?)
Pressing ? from any view (no modifier) opens a three-table modal:
- Globals — all 48, searchable.
- View-scoped — current-view bindings only, expandable to all views.
- Right-click actions — every registered ctxmenu item across all scopes, searchable. ~70+ items.
The same overlay is reachable from Cmd-K → "Keyboard Shortcuts". Inside the overlay, / focuses the search, Esc closes, Tab moves between the three tables.
The Cmd-K launcher
Open with Cmd+K. The launcher is a categorized tile grid (~648 tiles across 10 categories — see step 01 for the breakdown) with:
- Live filter — type any substring; the grid filters in-place.
- Enter-jumps-to-first-match — fastest path when you know exactly what you want.
- Arrow-key nav — Tab / Shift+Tab / arrows move the highlight; Enter activates.
- Pin / unpin — pin a tile (the small bookmark icon) to put it on the topbar's quick-nav strip.
- Recently used — pinned to the top of the unfiltered view.
The launcher reads its catalog from a single static registry at boot, so the displayed count is generated, not typed — adding a new view registers a new tile automatically. No fixed nav strip; the topbar carries the 11 most-used routes and the launcher carries everything else.
Right-click context menus — the 18 row scopes
Every view registers a data-context-scope slug. The global ctxmenu handler resolves it on right-click and shows the relevant action set. The 18 row scopes:
trade-row, symbol-row, journal-entry, tag-chip, webhook-row, api-token-row, account-row, plan-row, share-row, board-row, dashboard-sidebar-item, hotkey-row, custom-indicator-row, alert-rule-row, strategy-alert-row, watchlist-symbol-row, position-row, backtest-preset-row
Plus 37 symbol-aware view scopes give the 6-way symbol-nav menu (Charts / Options / Research / Earnings / News / Copy) on every symbol that appears anywhere. 222 distinct symbol-nav paths.
Non-blocking dialogs & toasts
tConfirm() / tPrompt() (in frontend/js/dialog.js) replace every native alert() / confirm() / prompt() call site (100 swept across 42 view files). Returns a Promise; themed by level (info / warning / danger); Enter / Esc keybound; required-empty input shake; i18n labels via dialog.btn.* keys.
Toasts use toastOk() / toastErr(); auto-dismiss after 4s (configurable per call), stackable, click-to-dismiss.
Themes & CRT
Five color schemes (Cyberpunk default, Midnight, Matrix, Ember, Arctic) and light / dark mode per scheme. Cmd+Shift+T cycles themes. The CRT scanline overlay can be toggled in Settings → Display; same for the neon-glow effect. Both are GPU-cheap (single CSS overlay) but distracting on long sessions for some users — turn off and on at will.
? in the app any time you forget a key; Cmd+K finds anything not on the topbar. Imports are idempotent so you can experiment freely. Every report is account-scoped so paper + live don't mix. Happy trading.