GitHub - ijidak/shortcut-practice · GitHub
/" data-turbo-transient="true" />
Skip to content
Search/
Sign in<br>Sign upAppearance settings
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
ijidak
shortcut-practice
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Latest commit
History<br>21 Commits<br>21 Commits
Folders and files<br>NameNameLast commit message<br>Last commit date<br>CLAUDE.md
CLAUDE.md
LICENSE
LICENSE
README.md
README.md
example-screen-2.png
example-screen-2.png
example-screen.png
example-screen.png
index.html
index.html
mini-spec.md
mini-spec.md
shortcut-game-creation-prompts.md
shortcut-game-creation-prompts.md
View all files
Repository files navigation
Shortcut Practice
A keyboard-shortcut drill game that runs entirely in your browser. One HTML file, no build step,<br>no server, no dependencies.
Pick an app, hit Start , and race a 5-second clock to type the shortcut for the action on screen.
How it works
The app is organized into tabs — one per app, each a separate practice session with its own<br>shortcut set. Open index.html to see what's currently there; tmux, iTerm2, Cursor/VS Code,<br>Finder, Vim, and Claude Code have been the mainstays.
The tab list isn't fixed. Ask Claude Code (or your AI tool of choice) to add one for an app you use,<br>or drop one you don't. See<br>Customizing the shortcut list below.
The round loop
A command name appears — e.g. "Split pane left / right (vertical)" — and a 5-second timer starts.
Correct → happy chime, confetti, on to the next one.
Wrong key → beep, and the clock keeps running. Keep trying until time is up.
Time's up → the answer is revealed. You have to actually type it to move on, but it does not<br>count as correct — the shortcut stays in rotation.
A missed round, and the per-tab checklist underneath it.
How shortcuts retire
One correct answer puts a shortcut on a 60-second cooldown, so you spend your time on the ones<br>you don't know yet.
Two correct answers retire it for the rest of the session.
The game never ends on its own. It runs until you press Stop — or until every active shortcut<br>is mastered.
Controls
Start · Pause / Resume · Stop · Play again
Plus Disable and Skip , for when macOS or the browser swallows a combo before the page ever sees it.<br>It drops that shortcut for the session and moves on.
You never need the mouse. Every button has a keyboard shortcut, printed on the button itself so<br>there's nothing to memorize:
⌃⇧⏎ — Start / Play again
⌃⇧Space — Pause / Resume
⌃⇧Q — Stop
⌃⇧X — Disable and Skip
⌃⇧1…⌃⇧6 — switch tabs, numbered left to right
They all live in the Ctrl+Shift family, which nothing in the shortcut data uses — and none of these<br>keys is drilled with Ctrl alone or Shift alone either, so one slipped modifier can't fire a button<br>instead of answering the prompt. Each shortcut works only while its button is actually on screen and<br>enabled.
The checklist
Below the game card, every shortcut for the current tab is listed with a checkbox and a status badge:
in cycle — active, not yet answered correctly
1 / 2 — got it once, one more to retire it
mastered — retired for this session
off — unchecked, out of rotation
Uncheck anything you don't want to drill and it leaves the rotation immediately, even mid-round.<br>Check all (⌃⇧C) / Uncheck all (⌃⇧N) are there for bulk changes. The stats row at the<br>bottom tracks in rotation / got once / mastered / off.
Multi-key sequences
Some shortcuts are sequences, not single chords. tmux is the obvious case: press Ctrl+B,<br>release it , then tap the next key. The game handles this, and is forgiving if you don't<br>release the prefix cleanly.
Notes
Nothing persists across refreshes, by design. Reloading gives you a clean session.
Cmd+W and Cmd+Q are deliberately left out of the data, so a session can't be lost mid-game.
Key matching works on either the physical key or the produced character, so alternate keyboard<br>layouts don't break it.
Getting started
Clone the repo and open the file. That's the whole setup.
open index.html
On Linux use xdg-open index.html; on Windows, start index.html. Or just double-click the file<br>in a file browser.
To try a change, edit index.html and reload the page.
Customizing the shortcut list with Claude Code
The shortcut data lives in a single RAW object near the top of the block in<br>index.html, keyed by app. Everything else — the tabs, the checklist, the stats, the rotation —<br>derives from it, so adding or removing a shortcut, or a whole tab, is a one-place edit.
There's a CLAUDE.md in the repo that explains the file's structure, so Claude Code already knows<br>where things go. Run claude in the repo and ask in plain English.
Adding...