Pocket

Break in your Glove 80.

Pocket is a local-first typing tutor built for the MoErgo Glove 80 — an 80-key columnar split keyboard running open-source ZMK firmware, with its keys in vertical columns instead of the staggered rows every QWERTY typist has trained on for years, and heavily-used modifiers on programmable thumb clusters. Pocket reads your actual .keymap file, generates practice from five real-context corpora — LLM prompts, CLI commands, code, PII-scrubbed business email, and workplace chat — and tracks your per-key and per-bigram weakness with a recency-weighted engine, so every session drills the bigrams you're genuinely slow on rather than pseudo-words you'll never type. Local-first. No accounts. No cloud.

  • Reads your actual ZMK keymap

    Drop your .keymap export from the MoErgo Layout Editor into keymaps/, and Pocket renders your Glove 80 live — layer by layer, Mac mod glyphs included — and generates targeted drills for each non-base layer and your thumb cluster. No other typing tutor does this for ZMK firmware.

  • Five corpora matching real dev work

    LLM prompts (WildChat-style), CLI commands (tldr-pages style), TypeScript/Python/Bash code, PII-scrubbed Enron email, and hand-curated workplace chat — each corpus matches a real category of text you produce daily. No pseudo-words, no lorem ipsum.

  • Weakness engine targets your actual gaps

    Every keystroke is logged and folded into per-key and per-bigram EMA stats. The text generator prefers corpus lines heavy in your worst bigrams, and the recommender shows exactly why it's suggesting today's session — or says 'not enough data yet' when it can't back a claim.

  • Layout fingerprint for honest A/B comparison

    Every session and stat is stamped with a SHA-256 of your parsed keymap. Change your layout mid-experiment and your history stays clean — pre- and post-change results never silently blend, making keymap iteration measurable rather than impressionistic.

  • 100% local, MIT licensed

    npm start → localhost:3000. SQLite on disk, no telemetry, no cloud sync, no accounts. The full source is MIT — fork it, instrument it, run it offline indefinitely.

Pocket drilling a live Glove 80 keymap.

Key Concepts

Weakness engine
per-key and per-bigram recency-weighted stats built from every logged keystroke — ranks your worst bigrams by relative slowness plus error rate, then steers the text generator toward corpus lines that contain them.
Layout fingerprint
SHA-256 of your parsed ZMK keymap's bindings and layer names, stamped on every session row so results stay attributable to the exact layout that produced them.
EMA fold
exponential moving average applied to per-keystroke latency in timestamp order — gives recent sessions more weight, so the weakness engine reflects where you are today, not your week-one averages.
Context
one of five practice corpora (prompts, CLI, code, email, teams), each matching a real category of text you type at work; sessions, history, and the cross-context summary are all context-tagged.
ZMK keymap awareness
Pocket parses the .keymap file exported from the MoErgo Layout Editor, reads your layer bindings and thumb-cluster assignments, and uses them to drive both the live keyboard SVG and the layer/thumb-cluster drills.
TypeScriptReactViteSQLiteExpressMIT
View on GitHub →

Every corpus row carries its source and license; the Enron email seed was PII-scrubbed by hand, not regex. See PROVENANCE.md.

How It Differs

Keybr drills adaptive weak keys but uses pseudo-words and has no concept of your physical layout. Monkeytype nails flow UX but doesn't teach or adapt. ZSA's typ.ing offers live-keymap training, but only for QMK boards. Pocket is the only tutor that reads a ZMK keymap, generates practice from the real text categories you type daily, and stamps every result with a layout fingerprint — making it the only apples-to-apples measurement tool for Glove 80 owners who iterate on their keymaps.

Get Started

bash
git clone https://github.com/stevebargelt/pocket && cd pocket
npm install && npm run seed
npm start
View on GitHub