Skip to content

Repository files navigation

⌨️ Typing Practice

A research-based, progressive web application for learning touch typing. Built with SolidJS and Tailwind CSS, featuring offline support and intelligent content management.

🌟 Features

Research-Based Approach

  • 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

Smart Practice System

  • 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

Modern Technology

  • 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

🚀 Quick Start

Installation

# Install dependencies
npm install

# Start development server
npm run dev

Visit http://localhost:5173 to see the app.

Building for Production

# Build the app
npm run build

# Preview the production build
npm run preview

📝 Content Management

This app uses a powerful content management system that lets you process your own text content into optimized typing practice sentences.

Quick Content Workflow

  1. Analyze your content (optional but recommended):

    npm run analyze-sentences your-text-file.txt
  2. Process sentences:

    npm run process-sentences your-text-file.txt --output sentences.json
  3. Import into app:

    npm run import-sentences sentences.json

That's it! Refresh the app to see your new content.

Available Scripts

npm run analyze-sentences <file>

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.txt

npm run process-sentences <file> [options]

Processes 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 15

npm run import-sentences <file>

Imports processed sentences into the app with validation.

Example:

npm run import-sentences sentences.json

See CONTENT_GUIDE.md for detailed content management documentation.

🎯 Using the App

Getting Started

  1. Open the app in your browser
  2. Connect a keyboard (required for mobile devices)
  3. Start typing the displayed sentence
  4. Track your progress in real-time

Tips for Success

  1. Focus on Accuracy First: Speed comes naturally with practice
  2. Practice Daily: 10 minutes per day is more effective than longer irregular sessions
  3. Proper Technique:
    • Rest fingers on home row (ASDF JKL;)
    • Use the correct finger for each key
    • Don't look at the keyboard
  4. Take Breaks: Rest if your hands feel tired

🔧 Technical Details

Key Technologies

  • 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

Scoring Algorithm

Our sentence scoring system uses multiple factors:

  1. Word Frequency (25% weight): Fry's high-frequency words
  2. Bigram Patterns (25% weight): Common English letter pairs
  3. Readability (15% weight): Flesch-Kincaid formula
  4. Sentence Length (15% weight): Word count
  5. Word Complexity (15% weight): Average word length
  6. Special Characters (5% weight): Punctuation complexity

Sentences are ranked so lower scores appear first in practice.

📚 Research References

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! ⌨️

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages