Type with sound. Feel the rhythm.
Free, full-stack typing test - Keystroke sounds · Error feedback · WPM tracking · Sound packs · PWA
Stroke it is a typing test built around sound. Every keystroke triggers a real recorded audio sample — choose from 5 sound packs including the original OGG sprite and 4 crisp MP3 alternatives. Miss a key? Get instant feedback from 7 distinct error sounds. No sign-up, no distractions. Just you, the words, and the sound of typing.
It uses Next.js 16 (App Router) for the frontend, Turso (libSQL) + Drizzle ORM for optional leaderboard storage, and a polished Tailwind CSS v4 dark interface with subtle accent glow.
- Rhythm-based typing — hear every keystroke through real recorded audio (OGG sprite + 4 MP3 packs)
- 7 error sounds — pick your favourite "fahhhhh", buzz, thud, or spring jump on mistype
- Sound packs — 5 keystroke sound sets to switch between in settings
- Customizable volume — per-sound-type control with up to 5× gain
- WPM tracking — real-time words-per-minute, accuracy, and personal bests
- Words & quotes modes — type random words or famous quotes
- Pure black dark UI — subtle accent glow, zero clutter
- PWA installable — works offline after first visit
- Keyboard shortcuts — mute (⌘⇧M), settings (⌘K)
- Zero ads · Zero tracking · Zero sign-up
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 16.1.7 |
React framework (App Router) |
| TypeScript | — | Type safety |
| React | ^19.2.4 |
UI library |
| Tailwind CSS | v4 |
Utility-first styling |
| motion | ^12.38.0 |
Animations & transitions |
| Phosphor Icons | ^2.1.10 |
Icon library |
| Tabler Icons | ^3.41.1 |
Icon library |
| @number-flow/react | ^0.6.0 |
Animated number transitions |
| clsx + tailwind-merge | — | Conditional class merging |
| Technology | Version | Purpose |
|---|---|---|
| Turso (libSQL) | — | Edge-hosted SQL database |
| Drizzle ORM | ^0.45.2 |
Type-safe database queries |
| Serwist | ^9.5.7 |
PWA service worker |
| Vercel | — | Production deployment |
| Technology | Purpose |
|---|---|
| Web Audio API (AudioBuffer + AudioSprite) | Real-time keystroke & error playback |
- Node.js
18.xor higher - npm
git clone https://github.com/code2ahm/strokeit.git
cd strokeit
npm installnpm run devOpen http://localhost:3000.
npm run build
npm start# Install Vercel CLI
npm install -g vercel
# Deploy
vercelOr connect your GitHub repo directly via vercel.com/import.
Any host supporting Next.js (Cloudflare Pages, Netlify, etc.):
npm run build
# Output in /.nextPull requests are welcome. For major changes, open an issue first.
# Fork and clone
git clone https://github.com/your-username/strokeit.git
cd strokeit
# Create a feature branch
git checkout -b feat/your-feature
# Make changes, then
npm run build
# Push and open a PR
git push origin feat/your-featureBuilt with Next.js · Turso · Drizzle · Tailwind CSS