Version 0.0.4 "Mestiere"
Desktop application for podcast production built with React 19, TypeScript, and Electron. Designed specifically for journalists, podcasters, and content creators to produce broadcast-quality audio locally, offline, and without audio engineering expertise.
The mission of Runtime Radio Podcast Toolkit is to allow anyone to create high-level podcast productions without having to master the technical complexities of sound engineering (compressor ratios, thresholds, or LUFS).
- Locale-First, Zero Cost: 100% offline, running on the user's hardware. No cloud subscriptions, no external APIs.
- True Desktop App: Native OS dialogs, system application menu, real disk paths, dirty-flag exit confirmation, and crash-recovery slots.
- Human Language: Simple, intuitive controls rather than obscure acoustic jargon.
- Bilingual by Design: Fully typed Italian and English (US) interface and native menus.
- Sacred User Work: 50-step undo/redo, automatic crash-recovery backup every 60s, non-destructive workflows.
- Verifiable Quality: Strict TypeScript, 0-warning ESLint, automated Vitest suite.
- 🎵 Multi-Track Timeline:
- Drag & drop audio from the File Bin directly onto Voice, Music, Background, and FX tracks via
@dnd-kit. - Clip Splitting: Split clips at the playhead position using hotkey
Sor via right-click context menu (Split at Playhead). - Fade In / Fade Out: Per-clip parametric fades with visual gradient overlays and 5ms anti-click micro-fades.
- Track Controls: Mute [M] and Solo [S] buttons on every track header with multi-solo support and muted-voice ducking awareness. Inline track renaming via double-click.
- Magnetic Snapping: Snap to 1s grid, clip boundaries, and playhead (hold
Altto bypass). - Anti-Overlap Engine: Automatic placement into nearest free gaps to prevent accidental track collisions.
- Native Looping: Single-node audio looping with accurate segment seek support.
- Click-to-Seek Ruler: Interactive ruler with adaptive tick density and instant click seek.
- Drag & drop audio from the File Bin directly onto Voice, Music, Background, and FX tracks via
- 🎚️ Audio Processing & Effects:
- Parametric EQ (High-pass, Low-pass, Peaking, High-shelf, Low-shelf) and dynamics compressor.
- Real-Time Master VU-Meter: High-precision peak LED bar with dBFS numeric readout (zero React re-renders).
- Hardware-like Ducking: Music and background automatically duck during speech with zero-lag scheduled ramps (excludes muted voices).
- 22 Curated Presets: 6 voice, 8 music, and 8 mastering presets.
- 📤 Export Engine:
- Offline mix rendering with background Web Worker encoding (
exportEncoder.worker.ts) — the UI never freezes. - Output formats: WAV (lossless PCM) and MP3 (via
lamejs). - Professional peak normalization to −1 dBFS headroom.
- Offline mix rendering with background Web Worker encoding (
- 💾 Workspace & Desktop Integration:
- Inline Project Renaming: Rename your project anytime directly in the top header.
- Crash-Recovery Slot: Periodic autosave (
userData/autosave.json) with startup restoration prompt. - Hardened Error Boundary: Bilingual crash screen with zero
process.envdependencies. - Recent Projects: Quick access to recent
.jsonprojects from Welcome Screen and nativeFile → Open Recent. - Window Memory: Bounds and maximized state remembered between sessions.
- ⌨️ Shortcuts & Context Menus:
- Playback:
Spacebar(Play/Pause). - Timeline:
S(Split clip at playhead),Ctrl+C(Copy),Ctrl+V(Paste),Delete(Delete clip). - Project:
Ctrl+S(Save),Ctrl+Z(Undo),Ctrl+Y/Ctrl+Shift+Z(Redo).
- Playback:
- 🌍 Internationalization (i18n):
- Complete Italian and English (US) coverage across UI, toasts, dialogs, and native menus.
- Loudness Compliance: Currently normalized to -1 dBFS peak; ITU-R BS.1770-4 (-16 LUFS) targeting arrives in v0.1.0.
- Memory Footprint: Audio files are decoded in RAM. Best performance with files under 200MB until the streaming architecture arrives in v0.2.0.
- Node.js 18+
- npm 9+
git clone https://github.com/Pitz72/runtime-professional-podcast-editor.git
cd runtime-professional-podcast-editor
npm install
npm run devnpm run typecheck # TypeScript strict check (renderer + main)
npm run lint # ESLint (0 warnings allowed)
npm run test:run # Vitest automated test suite (35 tests)npm run build
# Output: builds/0.0.4/src/
├── main/ # Electron main process (window, native menus, secure IPC, autosave slot)
│ ├── main.cts
│ └── preload.cts # Sandboxed ContextBridge API
├── renderer/ # React UI (Vite + React 19 + Tailwind CSS)
│ ├── components/ # Timeline, Editor, Clip, PropertiesPanel, FileBin, Transport, etc.
│ ├── hooks/ # useAudioEngine, useClipClipboard, useKeyboardShortcuts, useWaveformData
│ ├── services/ # audioUtils, encoders, exportService, projectIO, timelineUtils
│ ├── workers/ # exportEncoder.worker.ts (off-thread WAV/MP3 encoding)
│ ├── i18n.ts # Typed bilingual dictionaries (IT / EN)
│ ├── presets.ts # Curated EQ and compressor presets
│ └── store.ts # Unified Zustand store with 50-step undo/redo history
└── shared/ # Shared TypeScript models (Project schemaVersion 1)
| Layer | Technology | Version |
|---|---|---|
| Desktop Platform | Electron | 39.2.4 |
| Frontend Framework | React + TypeScript | React 19.1 / TS 5.8 |
| Build & Bundling | Vite | 6.2.0 |
| Styling | Tailwind CSS | 3.4.17 |
| State & History | Zustand | 5.0.8 |
| Drag & Drop | @dnd-kit/core | 6.3.1 |
| Audio Processing | Web Audio API + OfflineAudioContext | Native |
| Encoding | Web Worker + lamejs | 1.2.1 |
| Testing | Vitest | 3.2.4 |
| Packaging | electron-builder (NSIS) | 26.0.12 |
- Roadmap verso la v1.0: Progettazione e visione completa a 6 fasi.
- Changelog: Cronologia dettagliata delle versioni.
- v0.0.3 "Mestiere": Release note v0.0.3 (i18n, autosave, snapping, context menu).
- v0.0.2 "Precisione": Release note v0.0.2 (worker export, ducking fix, playhead).
- v0.0.1 "Fondamenta": Release note v0.0.1 (reboot da web app a vera app desktop).
- User Guide: Guida utente aggiornata.
- Regression Testing: Checklist e procedure QA.
- v0.0.4 "L'Attrezzatura": Split clip al playhead (S), Fade-in/Fade-out con micro-fade 5ms, pulsanti Mute/Solo visibili, barra spaziatrice per play/pausa, click-to-seek sul righello, rinomina traccia inline.
- v0.1.0 "Il Suono Giusto": Normalizzazione conforme ITU-R BS.1770-4 (-16 LUFS), funzione locale "Migliora la Voce", Master Peak/VU Meter in linguaggio umano.
- v0.2.0 "La Voce": Registrazione multitraccia integrata con scrittura su disco a chunk.
- v0.3.0 "Le Parole": Trascrizione locale con Whisper.cpp, text-based editing, rimozione pause.
- v0.4.0 "La Redazione": Template di puntata, capitoli ID3v2, metadati di pubblicazione.
- v0.5.0 "La Distribuzione": Auto-updater, icona applicazione, installer rifinito.
- v1.0.0: Rilascio pubblico generale.
MIT License — Created by Simone Pizzi
Runtime Radio Podcast Toolkit v0.0.3 "Mestiere" 🎙️
