Why We Chose a Keyboard-First Design Philosophy
From day one, Velocity was designed for power users who live in their keyboards. We wanted to match the speed and fluidity of Linear, where you can navigate entire workflows without touching the mouse. This led us to implement 23 keyboard shortcuts, sequence support (e.g., g then i for "go to issues"), and a command palette powered by cmdk.
Our keyboard system is built on a custom useHotkeys hook that listens for key combinations and dispatches actions. It supports modifier keys (Cmd/Ctrl, Shift, Alt), sequences (two-key combos like g+i), and scope-based activation (only trigger shortcuts when the relevant component is mounted). The hook integrates with React context to enable/disable shortcuts dynamically—for example, global shortcuts are disabled when a modal is open.
The command palette is the crown jewel. Press Cmd+K and you get fuzzy search across issues, projects, actions, and settings. Type "create issue" to open the issue dialog, "go to settings" to jump to settings, or "#backend" to filter by label. The palette is built with cmdk, which provides keyboard navigation, ranking, and grouping out of the box. We added custom styling to match our design system.
We also built a shortcuts help dialog (Cmd+/) that lists all available shortcuts grouped by category: navigation, issues, editor, and system. This serves as both a reference and an onboarding tool for new users. The dialog is dynamically generated from our shortcut registry, so it stays in sync as we add new shortcuts.
Sequence shortcuts deserve special mention. They let us pack more functionality into a small keyspace without modifier gymnastics. g is the "go to" prefix: g+i for issues, g+p for projects, g+c for cycles. This pattern is inspired by Vim and Gmail, and power users love it. The implementation tracks the last key pressed and starts a timeout; if the second key arrives within 1 second, the sequence fires.
Keyboard-first design isn't just about shortcuts—it's about respecting the user's flow. Every modal, dropdown, and dialog supports keyboard navigation. Focus management is automatic (Radix UI handles this beautifully). And we never hijack browser shortcuts like Cmd+T or Cmd+W. The result is an interface that feels native, fast, and respectful of muscle memory.