A research-based, progressive web application for learning touch typing. Built with SolidJS and Tailwind CSS, featuring offline support and intelligent content management.
- Progressive Difficulty: Sentences ranked using evidence-based algorithms
- Common Pattern Focus: Emphasizes frequent bigrams and high-frequency words (Fry's list)
- Readability Metrics: Flesch-Kincaid scoring for appropriate complexity
- Accuracy First: Following research that shows accuracy should precede speed
- Real-time Feedback: Character-by-character validation with visual feedback
- Performance Tracking: WPM, accuracy, errors, and time tracking
- Progress Persistence: Local storage of user progress and statistics
- Weak Pattern Detection: Identifies bigrams that need more practice
- Progressive Web App: Install on any device, works offline
- Mobile-Friendly: Responsive design for desktop and mobile (with keyboard)
- Dark Mode: Automatic theme support
- Fast & Lightweight: Optimized build with Vite
# Install dependencies
npm install
# Start development server
npm run devVisit http://localhost:5173 to see the app.
# Build the app
npm run build
# Preview the production build
npm run previewThis app uses a powerful content management system that lets you process your own text content into optimized typing practice sentences.
-
Analyze your content (optional but recommended):
npm run analyze-sentences your-text-file.txt
-
Process sentences:
npm run process-sentences your-text-file.txt --output sentences.json
-
Import into app:
npm run import-sentences sentences.json
That's it! Refresh the app to see your new content.
Analyzes your text and provides detailed statistics:
- Difficulty distribution
- Readability scores
- Common pattern usage
- Bigram frequency
- Recommendations for improvement
Example:
npm run analyze-sentences sample-text.txtProcesses text into ranked sentences suitable for typing practice.
Options:
--output <file>: Output file (default: sentences.json)--min-words <n>: Minimum words per sentence (default: 3)--max-words <n>: Maximum words per sentence (default: 30)--difficulty <0-4|all>: Filter by difficulty (default: all)--limit <n>: Limit number of sentences--sort <method>: Sort by 'score', 'difficulty', or 'length' (default: score)
Examples:
# Basic processing
npm run process-sentences my-book.txt
# Only beginner sentences, limit to 100
npm run process-sentences my-book.txt --difficulty 0 --limit 100
# Intermediate difficulty, short sentences
npm run process-sentences my-book.txt --difficulty 2 --max-words 15Imports processed sentences into the app with validation.
Example:
npm run import-sentences sentences.jsonSee CONTENT_GUIDE.md for detailed content management documentation.
- Open the app in your browser
- Connect a keyboard (required for mobile devices)
- Start typing the displayed sentence
- Track your progress in real-time
- Focus on Accuracy First: Speed comes naturally with practice
- Practice Daily: 10 minutes per day is more effective than longer irregular sessions
- Proper Technique:
- Rest fingers on home row (ASDF JKL;)
- Use the correct finger for each key
- Don't look at the keyboard
- Take Breaks: Rest if your hands feel tired
- SolidJS: Reactive UI framework
- TypeScript: Type-safe JavaScript
- Tailwind CSS 3: Utility-first styling
- Vite: Fast build tool and dev server
- Vite PWA Plugin: Progressive Web App support
Our sentence scoring system uses multiple factors:
- Word Frequency (25% weight): Fry's high-frequency words
- Bigram Patterns (25% weight): Common English letter pairs
- Readability (15% weight): Flesch-Kincaid formula
- Sentence Length (15% weight): Word count
- Word Complexity (15% weight): Average word length
- Special Characters (5% weight): Punctuation complexity
Sentences are ranked so lower scores appear first in practice.
This app is built on established typing pedagogy research:
- Progressive Practice: Start with home row, gradually expand
- Frequency-Based: Focus on most common patterns first
- Accuracy Priority: Research shows accuracy must precede speed
- Daily Practice: 10-15 minutes daily more effective than longer sessions
Happy Typing! ⌨️