A complete, modern web application for learning Morse code easily with interactive learning methods.
- Train your ears to recognize Morse code by listening
- Customizable speed (WPM), frequency, and content type
- Automatic validation and score tracking
- Practice with letters, numbers, or mixed content
- Progressive, structured learning following the proven Koch Method
- 27 lessons starting with pairs of characters
- Three-phase learning: Guided Listening → Random Testing → Validation Exercises
- Automatic progress saving
- 30 exercises per lesson (15 random + 15 validation)
- Effortless learning through passive listening
- Multiple modes:
- Random letters
- Random numbers
- Mixed content
- Groups of 5 characters
- Common words
- Adjustable speed and display frequency
- Frontend Framework: Vanilla JavaScript (ES6+)
- Build Tool: Vite
- Audio Generation: Web Audio API
- Styling: Modern CSS3 with CSS Variables
- Storage: Browser localStorage
- Design: Mobile-first, responsive
- Node.js (v14 or higher)
- npm or yarn
-
Clone or navigate to the project directory
cd DotDashLearn -
Install dependencies
npm install
-
Start the development server
npm run dev
The application will open automatically at
http://localhost:3000 -
Build for production
npm run build
The built files will be in the
dist/folder. -
Preview production build
npm run preview
DotDashLearn/
├── index.html # Main HTML file
├── package.json # Project dependencies and scripts
├── vite.config.js # Vite configuration
├── src/
│ ├── main.js # Application entry point
│ ├── audio.js # Morse code audio generation (Web Audio API)
│ ├── storage.js # LocalStorage management
│ ├── practice.js # Practice mode implementation
│ ├── koch.js # Koch Method learning system
│ ├── passive.js # Passive listening mode
│ └── styles/
│ └── main.css # Complete styling (light/dark theme)
└── dist/ # Production build (generated)
- Select from three learning methods
- Easy navigation with the top menu
- Adjust settings (WPM, frequency, content type)
- Click "Start Exercise"
- Listen to the Morse code
- Type your answer
- Get immediate feedback
- Select a lesson from the sidebar
- Follow the three-phase approach:
- Phase 1: Listen to new characters with guidance
- Phase 2: Random testing (you must get 15 correct)
- Phase 3: 30 validation exercises
- Progress is automatically saved
- Unlock new lessons as you complete them
- Choose a listening mode
- Adjust WPM and frequency
- Click "Start Listening"
- Characters will play automatically with display
- Click "Stop" to end session
The application includes Morse code for:
- A-Z (All letters)
- 0-9 (All numbers)
- Punctuation: . , ? ' ! / ( ) & : ; = + - _ " $ @
- Toggle with the moon/sun icon in the navbar
- Theme preference is saved
- Mobile-first design
- Optimized for phones, tablets, and desktops
- Touch-friendly interface
- Start with easy characters
- Gradually increase difficulty
- Regular review of previous content
- Entire application runs in the browser
- No internet connection required after initial load
- Fast audio generation using Web Audio API
- ARIA labels for screen readers
- Keyboard navigation support
- High contrast support
- Reduced motion support
- Range: 5-40 WPM
- Standard PARIS method for timing
- Default: 20 WPM
- Range: 400-1200 Hz
- Standard: 700-800 Hz
- Adjustable per mode
- Dot duration: 1.2 / WPM seconds
- Dash duration: 3× dot
- Gaps automatically calculated
- ✅ Chrome/Chromium (latest)
- ✅ Firefox (latest)
- ✅ Edge (latest)
- ✅ Safari (latest)
- ✅ Mobile browsers (iOS Safari, Chrome Mobile)
The application saves:
- Koch lesson progress and phase completion
- Practice scores and statistics
- User settings (theme, WPM, frequency)
- Session history
All data is stored locally in the browser and never sent to a server.
- Start with the Koch Method - It's designed for optimal learning progression
- Consistent practice - 10-15 minutes daily is more effective than occasional long sessions
- Adjust speed gradually - Start slower and increase WPM as you improve
- Use passive listening - Background listening helps your brain recognize patterns
- Take breaks - Don't overwhelm yourself; give your brain time to process
| Letter | Code | Letter | Code |
|---|---|---|---|
| A | .- | N | -. |
| B | -... | O | --- |
| C | -.-. | P | .--. |
| D | -.. | Q | --.- |
| E | . | R | .-. |
| S | ... | T | - |
| I | .. | U | ..- |
| M | -- | W | .-- |
- Check browser volume
- Check system volume
- Ensure audio context is initialized (interact with the page first)
- Try a different browser
- Reduce WPM for faster playback
- Close other CPU-intensive applications
- Try a different browser
- Enable localStorage in browser settings
- Check browser privacy settings
- Try incognito/private mode
The application follows a modular architecture:
- main.js: Application orchestration and routing
- audio.js: Web Audio API wrapper for Morse generation
- storage.js: LocalStorage abstraction layer
- practice.js, koch.js, passive.js: Mode implementations
- ES6+ modern JavaScript
- Clear variable and function names
- Comprehensive comments
- Modular, reusable components
- Create a new module in
src/ - Export a class with
initializeUI()method - Import in
main.js - Initialize in the
DotDashLearnAppconstructor
- Lazy loading of modes
- Efficient audio synthesis
- Minimal DOM manipulation
- CSS animations with GPU acceleration
- Debounced event handlers
This project is open source and available for educational purposes.
Feel free to fork, modify, and improve this project!
For issues, suggestions, or improvements:
- Review the code comments
- Check the README
- Test in multiple browsers
- Clear browser cache if needed
Happy learning!