Murmur
A voice-first communication platform, built from scratch.

Discord is the reference for community communication. But building something similar — from scratch, alone — is the best way to understand what makes a real-time platform actually work. Murmur started as an experiment and became a production-ready product.
Real-time voice is hard. WebRTC signaling needs to be fast and reliable. Managing concurrent WebSocket connections for chat while handling voice routing is a different problem than building a typical web app. Add auth, file storage, friends, multilingual UI, and E2EE for DMs — and the scope becomes significant.
Rust for the backend
Axum + Tokio handles WebSocket signaling and the HTTP API. Performance-critical, memory-safe. The compiler forces you to think through failure modes before they reach production.
SolidJS for the frontend
Fine-grained reactivity means the UI updates surgically — no virtual DOM overhead. Better for real-time dashboards, voice status, and live channel lists.
PostgreSQL + Redis
Relational data for persistence, Redis for pub/sub and real-time event routing across instances.
WebRTC for voice
Browser-native peer-to-peer mesh. Screen sharing included. No relay server needed for small rooms.
E2EE for direct messages
Web Crypto API + TweetNaCl. Privacy by default. The server never sees plaintext DM content.
Production-ready: deployable in one command via Docker Compose, monitored with Prometheus + Grafana + Uptime Kuma, load-tested with autocannon and k6. CI/CD via GitHub Actions → GHCR → self-hosted runner → VPS.
- 01Real-time systems force you to think about failure modes you would never consider in a CRUD app.
- 02Observability is not optional for production. If you can't measure it, you can't improve it.
- 03Rust's strict compiler is the point — it catches a class of bugs before they reach production.
- 04Building at this scope solo requires ruthless scope management and the discipline to ship something imperfect.