A dual-endpoint web application for synchronized keystroke and audio recording. The system consists of a keyboard input endpoint and a control/monitoring endpoint that can record audio while capturing keystrokes from remote keyboard clients.
- SPEC.md - Full specification and architecture
- PROTOCOL.md - WebSocket protocol specification
npm installStart the development server:
npm run devNote: In development mode, the WebSocket server is not available. You must build and run in production mode to use WebSocket features.
Build the application:
npm run buildRun the production server (with WebSocket support):
npm start
# or
npm run previewThe server will start on http://localhost:3000 by default.
- Home Page (
/): Navigation to all endpoints - Keyboard Endpoint (
/keyboard): Open this on devices where you want to capture keystrokes - Control Panel (
/control): Monitor connected keyboards, select one, and record audio synchronized with keystrokes - Playback Panel (
/control/playback): View, play, and delete recordings
ws://localhost:3000/ws/keyboard- Keyboard clients connect herews://localhost:3000/ws/control- Control clients connect here
Recordings are stored in ./recordings/ directory with:
recording_YYYYMMDD_HHMMSS.json- Metadata and keystroke datarecording_YYYYMMDD_HHMMSS.webm- Audio file
Built with:
- Frontend: Svelte 5 + SvelteKit
- Backend: Node.js with Express
- WebSockets: ws library
- Audio: MediaRecorder API (WebM format)
- Styling: Dark theme with green highlights (terminal/hacker aesthetic)