Skip to content

Repository files navigation

Letterby

a typing village

Play now: https://dnouri.github.io/Letterby/

Letterby typing practice in the Letter Garden district: Quill the bespectacled hedgehog stands on a stepping-stone path beside four wooden letter tiles reading f, a, a and g, the f tile outlined as the next target; a small prompt chip above shows "faag" with the f key highlighted, and two illustrated hand guides rest at the bottom with the left index finger marked and the caption "Press: Left index finger"

What is Letterby

Letterby is a typing practice game for children, set in a small village where every key does something. It runs entirely in the browser: no account, no server, and no analytics — nothing is sent anywhere. All assets ship with the game and load from the same site that serves it; music and the illustrated hand skins are fetched on demand, but only from that site, never from a third party.

Menus are available in English, Deutsch and Svenska. Progress is saved on the device and can travel with you as a portable save code.

The village

District Practice
Letter Garden First keys and letter rows among stepping blocks, buds and butterflies. Six cumulative keyboard groups, timed or 32 untimed targets.
Bubble Bay Words under water, typed to pop bubbles. Four word lessons, timed or 12 words.
Clockwork Castle Sentences with capitals and punctuation operate the gate and its clockwork bird. Four sentence lessons, timed or three sentences.
Typing Studio Quiet free practice: chosen letters, weak keys, words or sentences on a working typewriter. Timed or open-ended.

Quill the hedgehog scribe, Tinta the octopus and Klikk the clockwork songbird guide you through. Choosing a companion is only presentation — the lessons and rewards are the same.

Languages and keyboards

Menu language and practice course are set separately. Changing the menus to German does not silently switch practice to German.

Practice language Keyboard preset
English US ANSI · QWERTY
English German ISO · QWERTZ
English Swedish ISO · QWERTY
Deutsch German ISO · QWERTZ
Svenska Swedish ISO · QWERTY

Each course has 14 guided lessons plus Studio, at least 60 words and 16 authored sentences per language. The game teaches the selected preset's real layout — native letters like Ö, Ä, Ü, Å and ß, the extra ISO key, opposite-hand Shift — but it does not detect or change your operating system layout, and it cannot see your fingers: correct produced text always counts.

Course or input changes apply to the next new attempt; Resume and Retry keep the original run's settings.

Accessibility

Accessibility is a priority in Letterby. Every claim below describes what the shipped game actually does.

Nothing can be failed. A wrong key never erases or skips anything — the target simply waits until the correct character is typed. Backspace is never needed. There are no lives, no negative points and no locks; a badge, once earned, stays earned even if a later attempt scores lower.

No time pressure. Every guided lesson can run untimed, working toward a finite goal of targets, words or sentences instead of a clock. An untimed Studio practice is open-ended: it has no fixed goal and simply runs until the player chooses to finish it. Speed (words per minute) is off by default and never shown during active typing; when switched on, it appears in the pause view and in results and reports. A pace goal never locks a lesson.

Pausing is safe. Esc pauses at any time. Tabbing away from the practice, switching tabs or hiding the window pauses automatically, and no practice time is counted while paused. Resuming is always an explicit choice.

Keyboard-first. The whole game is standard buttons, links, selects and inputs, operable without a mouse. A "Skip to the main activity" link becomes visible whenever it receives keyboard focus; it is the first tabbable element on the page. During practice, typing goes into one focused surface.

Assistive technology basics. Menus are plain HTML. Important notices — unsaved progress, unavailable graphics or audio — are announced through a polite live region. During practice, the next key with its finger guidance and any mistakes are announced through a polite live region. Progress is exposed separately as a progressbar, which is hidden for open-ended Studio practice. Dialogs use the native <dialog> element: focus stays inside while open, and Esc closes them. Destructive actions (discarding a session, deleting a player, resetting data, restoring a save over current data) always ask for confirmation first. Letterby is built from standard HTML and ARIA, but it has not been formally audited with screen readers.

Motion and sound. The browser's (or operating system's) reduced-motion preference is honored for the scenery and CSS animation. An in-game "Reduce motion" setting additionally stops the animated hand presses while keeping the finger guidance clear. Music and sound effects can be muted or balanced separately; visual hints stay on. Guidance is never color-only — finger, key and hold instructions are written text.

Touch. Touch controls are sized at least 44 × 44 pixels. A separate touch-assisted practice mode provides an on-screen input with device-key guidance and its own progress tracking.

If WebGL is unavailable, a notice appears and the menus and practice still work: the villages are presentation, and the teaching text stays on screen. That fallback is scoped to WebGL only — the game does need a modern browser for other APIs such as ResizeObserver and Intl.Segmenter.

Progress stays on this device

Progress is stored per browser, for up to 24 local players. Save & restore exports the whole household as a LET2. code or .txt file; restoring a code replaces the local data after an explicit preview and confirmation. Codes are readable text with a checksum against accidents — they are not encrypted, so share them only on purpose.

There is no online leaderboard, cloud sync or telemetry. Local boards keep the latest result per practice category. Codes exported before the rebrand are not recognized; there is no migration path.

For developers

Letterby is TypeScript, Vite and Three.js. Use Node 24+ and npm. Assets are included; no API keys or external services are needed.

npm ci
npm run dev                 # http://127.0.0.1:5188
npm test                    # headless unit suite; opt-in live-browser cases skip without a preview server
npm run build               # typecheck + production build in dist/
npm run preview             # http://127.0.0.1:4188

The dev and preview ports are fixed (5188 / 4188). The opt-in live-browser cases skip automatically unless a preview server and their URL variables are provided. The optional full browser campaigns (npm run test:browser and similar) depend on local QA harnesses that are not part of the public repository; see docs/qa.md.

Static hosting

Serve the whole dist/ directory over HTTP(S), not from a file:// URL. Asset URLs are relative, so a subdirectory such as /Letterby/ works — that is how the GitHub Pages deployment above is served. Save data is per origin: moving the game to another host or port starts a fresh storage location, so take a save code with you. Use one active game tab per origin.

Project documents

The remaining files in docs/ are kept design and planning history; each states its own status. Those kept-history documents reference internal QA artifacts and local machine paths that are not included in the public repository.

Provenance

All characters, art, audio and text in Letterby are original works created for this project. There are no third-party game assets, models or music. Letterby is free software: its code and original assets are available under the GNU General Public License v3 — see LICENSE. Vendored fonts and the local QA inspection tooling keep their own licenses, noted beside the files.

About

A typing practice game for children

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages