Skip to content

feat: add tape mode to the text display - #635

Open
jpds wants to merge 4 commits into
aradzie:masterfrom
jpds:feat/tape-mode
Open

feat: add tape mode to the text display#635
jpds wants to merge 4 commits into
aradzie:masterfrom
jpds:feat/tape-mode

Conversation

@jpds

@jpds jpds commented Aug 31, 2026

Copy link
Copy Markdown

Adds a tape mode to keybr.com - intended to be less distracting with just a single line of text.

Stacked on #627 for the end-to-end tests.

Closes: #279

image

jpds added 2 commits July 31, 2026 19:12
Simulates a human typing through the full American English alphabet in the
guided lesson with a randomized per-round typing speed, checking that keys
never regress, unlock one at a time, and that the target key, its toast, and its
confidence state stay consistent throughout.

Others included tests cover the toasts, the on-screen keyboard's
hesitation-pointer highlighting the physically correct key, and a
mistyped-then-corrected character rendering in the theme's miss color.
Writes new guided-lesson settings to `localStorage` and reloads mid-run.
This checks progress survives the `GuidedLesson`/`Progress` reconstruction:

* `naturalWords` and a target-speed ramp shouldn't lose already-earned unlocks
* `alphabetSize` can force-include several keys in one round
* `recoverKeys` can legitimately re-lock a key past the guaranteed first 6.
@semanticdiff-com

semanticdiff-com Bot commented Aug 31, 2026

Copy link
Copy Markdown

Review changes with  SemanticDiff

Changed Files
File Status
  packages/keybr-intl/lib/messages/el.json  100% smaller
  packages/keybr-intl/lib/messages/fr.json  100% smaller
  packages/keybr-intl/lib/messages/de.json  100% smaller
  packages/keybr-intl/lib/messages/ga.json  100% smaller
  packages/keybr-intl/lib/messages/es.json  100% smaller
  packages/keybr-intl/lib/messages/it.json  100% smaller
  packages/keybr-intl/lib/messages/sq.json  100% smaller
  packages/keybr-intl/lib/messages/pl.json  100% smaller
  packages/keybr-intl/lib/messages/id.json  100% smaller
  packages/keybr-intl/lib/messages/ca.json  100% smaller
  packages/keybr-intl/lib/messages/pt-br.json  100% smaller
  packages/keybr-intl/lib/messages/bg.json  100% smaller
  packages/keybr-intl/lib/messages/nl.json  100% smaller
  packages/keybr-intl/lib/messages/ro.json  100% smaller
  packages/keybr-intl/lib/messages/hu.json  100% smaller
  packages/keybr-intl/lib/messages/lt.json  100% smaller
  packages/keybr-intl/lib/messages/pt-pt.json  100% smaller
  packages/keybr-intl/lib/messages/af.json  100% smaller
  packages/keybr-intl/lib/messages/ru.json  100% smaller
  packages/keybr-intl/lib/messages/da.json  100% smaller
  packages/keybr-intl/lib/messages/fi.json  100% smaller
  packages/keybr-intl/lib/messages/vi.json  100% smaller
  packages/keybr-intl/lib/messages/uk.json  100% smaller
  packages/keybr-intl/lib/messages/ne.json  100% smaller
  packages/keybr-intl/lib/messages/sk.json  100% smaller
  packages/keybr-intl/lib/messages/hr.json  100% smaller
  packages/keybr-intl/lib/messages/fo.json  100% smaller
  packages/keybr-intl/lib/messages/nb.json  100% smaller
  packages/keybr-intl/lib/messages/cs.json  100% smaller
  packages/keybr-intl/lib/messages/en.json  100% smaller
  packages/keybr-intl/lib/messages/eo.json  100% smaller
  packages/keybr-intl/lib/messages/mn.json  100% smaller
  packages/keybr-intl/lib/messages/is.json  100% smaller
  packages/keybr-intl/lib/messages/et.json  100% smaller
  packages/keybr-intl/lib/messages/tr.json  100% smaller
  packages/keybr-intl/lib/messages/sv.json  100% smaller
  packages/keybr-intl/lib/messages/sl.json  100% smaller
  packages/keybr-intl/lib/messages/bn.json  100% smaller
  packages/keybr-intl/lib/messages/fa.json  100% smaller
  packages/keybr-intl/lib/messages/th.json  100% smaller
  packages/keybr-intl/lib/messages/ar.json  100% smaller
  packages/keybr-intl/lib/messages/ko.json  100% smaller
  packages/keybr-intl/lib/messages/he.json  100% smaller
  packages/keybr-intl/lib/messages/ja.json  100% smaller
  packages/keybr-intl/lib/messages/zh-tw.json  100% smaller
  packages/keybr-intl/lib/messages/zh-hans.json  100% smaller
  packages/keybr-intl/lib/messages/zh-hant.json  100% smaller
  package.json  40% smaller
  packages/keybr-textinput-ui/lib/Cursor.tsx  16% smaller
  packages/keybr-textinput-ui/lib/TextLines.tsx  1% smaller
  .gitignore Unsupported file format
  e2e/guided-lesson/alphabet-size-churn.spec.ts  0% smaller
  e2e/guided-lesson/alphabet-unlock.spec.ts  0% smaller
  e2e/guided-lesson/daily-goal-toast.spec.ts  0% smaller
  e2e/guided-lesson/helpers.ts  0% smaller
  e2e/guided-lesson/mistake-color.spec.ts  0% smaller
  e2e/guided-lesson/pointer-highlight.spec.ts  0% smaller
  e2e/guided-lesson/recover-keys-churn.spec.ts  0% smaller
  e2e/guided-lesson/settings-churn.spec.ts  0% smaller
  e2e/guided-lesson/tape-mode.spec.ts  0% smaller
  e2e/smoke.spec.ts  0% smaller
  package-lock.json  0% smaller
  packages/keybr-intl/translations/en.json  0% smaller
  packages/keybr-textinput-ui/lib/TypingSettings.test.tsx  0% smaller
  packages/keybr-textinput-ui/lib/TypingSettings.tsx  0% smaller
  packages/keybr-textinput-ui/lib/tape.test.ts  0% smaller
  packages/keybr-textinput-ui/lib/tape.ts  0% smaller
  packages/keybr-textinput/lib/settings.ts  0% smaller
  playwright.config.ts  0% smaller

jpds added 2 commits September 3, 2026 22:36
Occasionally mistypes-then-corrects the displayed character instead of
typing it cleanly, mirroring a human fumble.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature request: tape mode

1 participant