A macOS menu bar app for learning proper touch typing technique with AI-powered exercises.
- Menu Bar Integration - Lives in your menu bar for quick access anytime
- Progressive Lessons - Start with home row keys and gradually add more as you improve
- Visual Keyboard - On-screen keyboard shows which finger to use for each key
- AI-Generated Exercises - Uses Claude API to create fresh, contextual typing exercises
- Real-time Feedback - See correct/incorrect characters as you type
- Performance Tracking - Monitors accuracy and words per minute
- macOS 13.0+
- Xcode 15.0+
- Optional: Anthropic API key for AI-generated exercises
- macOS 13.0 (Ventura) or later
- Xcode 15.0 or later (download from Mac App Store)
-
Clone the repository
git clone https://github.com/patrickfreyer/TenFingerTyping.git cd TenFingerTyping -
Open in Xcode
open TenFingerTyping.xcodeproj
-
Build and run
- Press
Cmd + Rin Xcode, or - From command line:
xcodebuild -scheme TenFingerTyping -destination 'platform=macOS' build
- Press
-
Grant permissions
- The app may request accessibility permissions to capture keystrokes
- Go to System Settings → Privacy & Security → Accessibility if prompted
The app will appear as a keyboard icon in your menu bar.
To enable AI-generated typing exercises, set your Anthropic API key:
Option 1: Environment Variable
export ANTHROPIC_API_KEY="your-api-key"Option 2: UserDefaults
The app also checks UserDefaults for the key anthropic_api_key.
If no API key is configured, the app falls back to built-in exercises.
- Click the keyboard icon in the menu bar
- Start typing the displayed exercise
- The virtual keyboard highlights which finger to use
- Complete exercises to track your progress
- Advance through levels to learn new keys
- Level 1: Home row basics (a, s, d, f, j, k, l)
- Level 2: Top row introduction
- Level 3: Bottom row
- Level 4+: Full keyboard with punctuation
TenFingerTyping/
├── TenFingerTypingApp.swift # App entry point
├── Models/
│ ├── FingerMap.swift # Key-to-finger mapping
│ ├── Lesson.swift # Lesson definitions
│ └── TypingSession.swift # Session state tracking
├── Services/
│ └── ClaudeAPIService.swift # AI exercise generation
├── ViewModels/
│ └── TypingViewModel.swift # Main view model
└── Views/
├── ContentView.swift # Main container view
├── KeyboardView.swift # Virtual keyboard
├── KeyView.swift # Individual key component
└── TypingPromptView.swift # Exercise display
MIT
