thiscord
A self-hosted Discord alternative: chat, voice, camera and screenshare.
- Proof
- ✓ 197 server checks in 7 suites
- Proof
- ✓ 83/83 end-to-end tests
- Proof
- ✓ Restore drill passed
My role
Architecture, Rust server, deployment and operations. Desktop/Android client built with an AI coding agent under my spec and review.
The problem
Group chat with real-time voice and screenshare is usually rented. I wanted to know what it takes to run the whole stack myself, on one small VPS, without it falling over.
What I built
- A Rust gateway (axum, Tokio, sqlx) speaking WebSockets: rooms, presence, reactions, replies, read markers, pins, search, roles and audit log.
- Self-hosted LiveKit SFU for voice, camera and screenshare, with server-issued tokens.
- Tauri 2 + React desktop and Android clients, with auto-reconnect, lock-screen call controls and an update banner.
- Docker Compose deployment behind Caddy, nightly backups with a passed restore drill, and memory budgets for a shared box.
Hard parts
Making a ban actually stick
A ban refuses new tokens while holding the lock through signing, removes the user from every live room (timeout plus retry), and re-kicks on a signed participant-joined webhook in case of a race. In a live test the removal landed 88 ms after the ban request.
Ordering under concurrency
Twelve concurrent reactions arrive strictly in order. Message size limits are enforced before allocation, and idle or slow sockets are dropped on a timer.
Recovering from a dropped connection
Clients rejoin automatically after a network drop (back in 7 s in a real drop test) and keep their mute and deafen state.
Stack
- Rust
- axum
- Tokio
- sqlx
- PostgreSQL
- LiveKit
- WebRTC
- Tauri 2
- React
- TypeScript
- Docker
- Caddy
Skills shown: Rust (axum, Tokio), PostgreSQL, WebSockets, WebRTC / LiveKit, Tauri, React, TypeScript, Docker, Linux servers, Automated testing, Auth & abuse defense, AI-assisted development