A minimal typing toy for toddlers — big bouncy letters, bright colours, and happy writing.
No build tools, no npm — just static files served from a folder. Installs as an app and works offline.
The 2D sibling of Tiny Fingers (GitHub) — same idea, simpler execution.
- Open the app and tap Start Full Screen or Start Here
- Press any letter or number — a big, colourful character pops onto the page
- Press a special character key — a random emoji appears instead
- Pick colours from the toolbar dot palette
- Cycle fonts (Fredoka, Gaegu, Bubblegum Sans, Patrick Hand)
- Switch themes — Paper, Space, Princess, Forest, Ocean, Sunset
- A rainbow cursor shows where the next letter will land
Tiny Typer is a PWA. Add it to the home screen (iPad/iPhone: Share → Add to Home Screen; Android/Chrome: Install app). Installed, it opens full screen with no browser bars and works without a connection.
python3 -m http.server 8000Open http://localhost:8000 in a modern browser.
Note: Opening
index.htmldirectly as afile://URL won't work due to browser CORS restrictions on ES modules.
Zero build step:
| File | What it does |
|---|---|
index.html |
Markup for the start overlay, toolbar, typing page, and hidden mobile input |
style.css |
All styles — themes, responsive breakpoints, animations, toolbar |
editor.js |
Typing engine — character spans, font cycling, colour management, emoji substitution |
main.js |
App lifecycle — fullscreen, keyboard/mobile input, toolbar controls, theme switching |
sw.js |
Service worker — network first for app files, cached copy offline; caches the Latin Google Fonts |
manifest.webmanifest |
PWA manifest — name, icons, full-screen display |
vendor/gsap.min.js |
GSAP 3.15.1, vendored so the intro animation works offline |
- Letters
a-zand digits0-9render as typed - Space inserts a space
- Basic punctuation (
. , ! ?) renders as-is - All other special characters become a random emoji from a pool of 150+
- Backspace deletes the last character
- Enter adds a newline
Six themes with matching colour palettes:
- Paper — warm cream (default)
- Space — deep navy with auto-switching to a bright colour palette for contrast
- Princess — soft pink/lavender
- Forest — earthy greens
- Ocean — light blue
- Sunset — warm coral
- Context menu, drag, and drop are disabled
- Browser shortcuts (Cmd/Ctrl) are blocked
- Pinch zoom is prevented
- Clear requires a double-tap to confirm
- Navigation away is blocked in fullscreen
- Respects
prefers-reduced-motion— letter pop animations and transitions are disabled - Dark theme auto-swaps to high-contrast colour palette
- Device dark mode is ignored (
color-scheme: light only) to prevent unexpected appearance changes - All toolbar buttons meet minimum 44px touch target size
Contributions are welcome! Feel free to open issues or submit pull requests.
