Skip to content
all work
Closed beta· 2026-09Personal project

thiscord

A self-hosted Discord alternative: chat, voice, camera and screenshare.

Visit live Private repo. Walkthrough on request.
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