Skip to content

Keyboard shortcuts #49

Description

@Jeezman

Feature area

Frontend UI

Description

As a broadcast operator, I want a comprehensive, Linear-style keyboard shortcut system so that I can drive Rhema live without reaching for the mouse — which is the realistic operating mode during a service.

Today, Rhema has a few implicit shortcuts but no discoverable, unified system. A live operator needs to toggle broadcast, jump between panels, navigate detections/queue, and switch translations all by keyboard. Linear's shortcut model (chords, single-verb actions, ? to discover, ⌘K for commands) is an industry-proven pattern that generalizes well here.

Suggested solution

Build out in three layers:

1. Global single-key verbs (no modifier)

Key Action
Space Toggle broadcast live ON/OFF
S Start/stop transcription
P Pin current focused detection (see documentation/context-awareness-prd.md)
/ Focus the search input
? Open shortcuts cheat sheet overlay
Esc Close dialogs / unfocus / exit reading mode

2. G chord navigation (jump to panel)

Chord Target
G then T Transcript panel
G then Q Queue panel
G then S Search panel
G then D Detections panel
G then P Preview panel
G then L Live output panel

3. ⌘K / Ctrl+K command palette

A searchable overlay (shadcn cmdk — already a dep) for everything that isn't worth a dedicated key:

  • Switch translation (e.g., "NIV", "ESV")
  • Jump to verse ("John 3:16")
  • Toggle themes, open Settings sections
  • Start/stop OSC and HTTP remote-control servers

4. List navigation (when a list has focus)

Key Action
J / K or / Move selection
Enter Send focused item to broadcast / preview
Cmd+Enter Send and clear queue selection
Backspace / Del Remove from queue

5. Reading-mode shortcuts

Key Action
[ / ] Previous / next verse
{ / } Previous / next chapter

Cross-cutting requirements

  • Shortcuts must not fire while typing in inputs/textareas (role="textbox", contenteditable).
  • Every shortcut surfaces in the ? overlay (single source of truth, driven by a config map).
  • Shortcut hints appear in tooltips on relevant buttons (Start transcribing (S)).
  • Conflicts with existing @tauri-apps/plugin-global-shortcut usage must be resolved — plugin owns OS-level, this system owns in-app.
  • Integrate with src/hooks/use-remote-control.ts so shortcut actions route through the same handlers as OSC/HTTP.

Alternatives considered

Alternatives considered

  • Single flat list of modifier shortcuts (e.g., ⌘+1, ⌘+2): fails the "muscle memory" test for an operator who is also using their DAW/ProPresenter with its own ⌘+N shortcuts.
  • A mouse-only "command bar": doesn't solve hands-free live operation.
  • Per-panel local shortcut registration: fragmented, no global discovery; rejected in favor of a centralized useShortcutRegistry pattern.

Additional context

Additional context

  • Reference UI: Linear (https://linear.app/method/keyboard-shortcuts), GitHub's ? cheat sheet, and the shadcn cmdk recipe.
  • Known integration surface: Stream Deck / TouchOSC / Companion (OSC + HTTP, see documentation/remote-control.md) — the shortcut system should share handlers with these so the behavior of "press Space to go live" matches "Stream Deck button to go live."
  • Scope note: this issue is the umbrella. Individual shortcut layers (global verbs, G chords, ⌘K palette) can be split into sub-issues for incremental PRs.

Validations

  • Check that there isn't already an issue requesting the same feature to avoid creating a duplicate.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions