EchoWrite
A magical voice-to-text dictation tool that turns your spoken words into typed text anywhere your cursor blinks—terminals, browsers, IDEs, you name it. Because sometimes your fingers need a break, but your ideas don't.
View on GitHub# Hold Ctrl+Alt and speak...
$
// "Creating a new function to handle user authentication"
// Recorded 3.2s • Transcribing...
function handleUserAuthentication() {
// TODO: Implement auth logic
}
// Magic! Pasted automatically at your cursor ✨
$
The Problem (That Needed Solving)
You're deep in the zone, coding in your terminal, when you need to write a detailed commit message. Or you're documenting a complex function, and your fingers are cramping from typing. Maybe you just think faster than you type.
The Typing Bottleneck
Traditional dictation tools force you to context-switch: open an app, click record, copy text, switch back, paste. EchoWrite eliminates all that friction with a single hotkey that works everywhere.
What Makes It Magic
Global Hotkey Recording
Press and hold Ctrl+Alt from anywhere—your IDE, browser, terminal, or even Slack. Release to transcribe. Press Escape mid-recording if you change your mind. It just works.
Lightning-Fast AI Transcription
Leverages Replicate's whisper model that chews through 150 minutes of audio in ~100 seconds. Your 5-second recording transcribes before you can say "whoa, that was fast."
Smart Vocabulary Corrections
Knows that "n8n" isn't nonsense and "Retell" isn't "retail." Custom regex patterns automatically fix technical terms, so your code comments actually make sense.
Seamless Integration
Automatically copies to clipboard and pastes with Ctrl+V at your cursor position. Works universally, no API integrations needed. Your fingers never leave the keyboard.
Plugin Architecture
Extensible status indicators via plugins. Already includes i3status bar integration (for the window manager crew), with hooks for notifications, system tray, or even a web dashboard.
Under the Hood
Built with extensibility in mind, EchoWrite uses clean OOP patterns that make it a joy to hack on and extend.
2,000+ Lines
Of thoughtful Python code, built with proper abstraction layers, error handling, and documentation that doesn't suck.
60+ Tests
Comprehensive test suite with mocking, integration tests, and coverage reporting. Because shipping without tests is like driving blindfolded.
5 Major Modules
Main application, provider system, plugin architecture, status management, and configuration—each with a single responsibility and clear interfaces.
The Good Architecture Stuff
Provider Pattern
Abstract base class for transcription services. Want to swap Replicate for OpenAI Whisper, Google Cloud, or run local models? Just implement the interface. No core code changes needed.
Plugin System
Status indicators use the observer pattern. The StatusManager notifies all registered plugins when state changes. Add desktop notifications, system tray icons, or a web dashboard with minimal effort.
Thread-Safe Recording
Audio capture runs in a separate daemon thread so hotkey detection stays responsive. Chunked recording (100ms chunks) means instant stop when you release the keys.
Where It Shines
Writing Commit Messages
"Fixed the race condition in the user authentication middleware and added proper error handling for edge cases." All without typing a single character.
Documenting Code
Speak naturally: "This function takes three parameters, validates the input, and returns a promise that resolves to either a user object or throws a validation error." Perfect JSDoc comments, every time.
Slack Messages
Respond to that long thread without breaking your typing flow. Just hold the hotkey and ramble your thoughts while your fingers keep coding.
Email Replies
That detailed technical explanation you've been putting off? Speak it out in your terminal, and it's already in your email composer.
The Stack
What's Next
The architecture is built for growth. Some ideas I'm playing with:
- Real-time transcription: Streaming during recording instead of waiting until you release the key
- Multiple providers: OpenAI Whisper, Google Cloud, Azure Speech, or even local Whisper models
- Desktop GUI: For those who prefer a visual interface alongside the hotkey workflow
- Custom commands: "Hey EchoWrite, create a new React component named Header"