A cross-platform Electron desktop application for continuous, multi-hour audio recording sessions with AI-powered transcription and developer diary generation.
This app helps developers document their workflow by:
- Recording long audio sessions (hours if needed) of their work commentary
- Transcribing the audio locally using Whisper AI (automatic language detection)
- Generating structured developer diary reports summarizing daily work
Privacy-first, offline-capable, and optimized for daily developer use.
- โ Long-duration audio recording - Record for hours without memory issues
- โ Chunk-based persistence - Audio saved directly to disk in 60-second chunks
- โ Local transcription - Powered by Whisper CLI with automatic language detection
- โ Mixed-language support - Handles Portuguese, English, and other languages seamlessly
- โ Developer diary generation - AI-powered daily summaries via OpenAI API
- โ Offline-first - Recording and transcription work without internet
- โ Cross-platform - Linux, macOS, Windows support via Electron
- Node.js 16+ and npm
- Electron (installed via npm)
- ffmpeg (optional but recommended for audio post-processing)
- Whisper CLI - Required for local transcription feature
- OpenAI API key - Required for developer diary generation
git clone <repository-url>
cd dev-diary-audio
npm installffmpeg fixes WebM metadata to enable seeking in media players.
Ubuntu/Debian:
sudo apt install ffmpegmacOS:
brew install ffmpegWindows: Download from ffmpeg.org and add to PATH.
Whisper requires Python 3.8+.
Install Python
sudo apt install python3 python3-venv python3-pipCreate a venv
mkdir whisper-local
cd whisper-local
python3 -m venv .venv
source .venv/bin/activateInstall via pip:
pip install --upgrade pip
pip install openai-whisperVerify installation:
whisper --helpNote: Whisper also requires ffmpeg (see step 2 above).
For more details, see the official Whisper repository.
Create a .env file in the project root:
cp .env.example .envEdit .env and add your OpenAI API key:
OPENAI_API_KEY=your-api-key-here
OPENAI_MODEL=gpt-4o-mini
OPENAI_MAX_TOKENS=4000
OPENAI_TEMPERATURE=0.7Get an API key: platform.openai.com/api-keys
npm run start- Click "Start Recording" button
- Grant microphone permissions when prompted
- Speak naturally - the app handles long sessions automatically
- Click "Stop Recording" when done
Audio is saved to: ~/.config/dev-diary-audio/recordings/YYYY-MM-DD/session-HH-MM-SS/
- Browse to a date with recordings
- Click "Generate Transcription for [date]"
- Wait for Whisper to process all audio files (this may take time for long recordings)
- Transcript appears automatically when complete
Transcripts are saved as: recordings/YYYY-MM-DD/transcript-YYYY-MM-DD.txt
- Ensure a transcript exists for the day
- Click "Generate Developer Diary"
- Wait for OpenAI API to generate the diary
- Diary appears automatically when complete
Diaries are saved as: recordings/YYYY-MM-DD/diary.txt
npm run packagenpm run makeThis creates .deb, .rpm, .zip, or Windows installers depending on your platform.
- Recordings:
~/.config/dev-diary-audio/recordings/(Linux) - Recordings:
~/Library/Application Support/dev-diary-audio/recordings/(macOS) - Recordings:
%APPDATA%/dev-diary-audio/recordings/(Windows)
recordings/
โโโ 2026-01-24/
โโโ session-09-30-15/
โ โโโ recording.webm
โ โโโ recording.json (Whisper output)
โโโ session-14-20-30/
โ โโโ recording.webm
โ โโโ recording.json
โโโ transcript-2026-01-24.txt
โโโ diary.txt
- Renderer process: MediaRecorder API captures from microphone
- 60-second chunks: Automatic flushing prevents memory buildup
- IPC to main: Chunks sent via
append-audio-chunkhandler - Main process: Immediately appends to disk using
fs.appendFileSync() - Post-processing: ffmpeg remuxes WebM for better compatibility
- Format: WebM (Opus codec)
- Channels: Mono (sufficient for speech)
- Sample Rate: 44.1 kHz
- Enhancements: Echo cancellation, noise suppression enabled
- Whisper processes each recording independently
- Outputs JSON with timestamped segments
- App merges all segments chronologically
- Single daily transcript file created
- Reads daily transcript
- Sends to OpenAI API with specialized prompt
- Returns structured summary of developer's day
- Saves locally as plain text
- main.js - IPC handlers, file operations, external process execution
- renderer.js - MediaRecorder logic, UI state management
- preload.js - Secure communication bridge between main and renderer
See the docs/ADR/ directory for detailed architectural decision records
- Transcription cannot be cancelled once started
- No real-time transcription progress updates
- Whisper model hardcoded to 'small' (balance of speed/accuracy)
- Diary generation requires internet connection
- No versioning or history of diary entries
This is currently a personal developer tool. Future contributions may be welcome as the project evolves.
MIT