A sleek, MonkeyType-inspired typing practice app built with React + Vite. Improve your typing speed and accuracy with progressive modes, real-time feedback, and a distraction-free zen experience.
- 6 Progressive Typing Modes -- train row by row or go full keyboard
- Home Row (Basic):
a s d f j k l ; - Home Row (Full):
a s d f g h j k l ; - Top Row:
q w e r t y u i o p - Bottom Row:
z x c v b n m , . / - Numbers Row:
1 2 3 4 5 6 7 8 9 0 - Full Keyboard: all keys combined (24 coherent prose stories)
- Home Row (Basic):
- 3 Text Lengths -- short (~150 chars), medium (~280), long (~450)
- Live Stats -- real-time WPM and elapsed time while typing
- Smart Cursor -- smooth linear-gliding cursor with character-level tracking
- Zen Mode -- UI fades away as you type; logo stays visible at low opacity
- Keyboard Shortcuts --
Escto restart,Tabto switch modes - Result Screen -- WPM, accuracy, time, errors with retry & next story options
- Responsive Design -- scales from mobile to ultrawide (14px--36px font range)
- Sentence-Boundary Trimming -- stories are cut cleanly at sentence endings
- No Word Splitting -- words never break mid-word across lines
| Layer | Tech |
|---|---|
| Framework | React 19 |
| Bundler | Vite 7 |
| Fonts | Roboto Mono, JetBrains Mono |
| Styling | CSS-in-JS (inline styles) |
| Linting | ESLint 9 |
# Clone the repo
git clone https://github.com/avdeshjadon/practiceTyping.git
cd practiceTyping
# Install dependencies
npm install
# Start development server
npm run devOpen http://localhost:5173 in your browser.
| Command | Description |
|---|---|
npm run dev |
Start dev server with HMR |
npm run build |
Production build to dist/ |
npm run preview |
Preview production build |
npm run lint |
Run ESLint |
src/
├── components/ # UI components (Header, TextDisplay, ResultScreen, Footer)
├── constants/ # Character states, design tokens
├── data/
│ ├── modes.js # Mode definitions (id, label, keys)
│ └── stories/ # Story pools per mode (homeHalf, homeFull, top, bottom, numbers, full)
├── hooks/
│ └── useTypingSession.js # Core typing logic, stats, keyboard handling
├── styles/ # Style objects (app, result)
├── utils/ # getRandomStory, formatTime
├── App.jsx
├── TypingTrainer.jsx # Main app orchestrator
└── main.jsx # Entry point
- Pick a mode from the navbar (or press
Tabto cycle) - Choose length -- short, medium, or long
- Start typing -- the timer starts on your first keystroke
- Track progress -- live WPM and timer in the stats bar; correct characters turn white, errors turn red
- Finish -- see your WPM, accuracy, time, and error count on the result screen
- Retry or next -- retype the same text or load a new story
MIT -- free to use, modify, and distribute.
Avdesh Jadon -- GitHub