judolas.xyz

chat.judolas.xyz

A homeserver that behaves like infrastructure, not a demo.

Element Web on a hardened Synapse homeserver, a self-hosted LiveKit voice stack tuned past six pacer bugs, and a native music bot that never touches Docker on the audio hot path.

Shell

One homeserver, themed end to end

Not the stock client with a logo swapped in. The welcome flow, the sign-in card, the empty states all belong to a homeserver people are actually asked to join.

Accounts

Your credentials stay on your server

Username and password go straight to Synapse. No OAuth hop through a third party that gets to log every sign-in on a homeserver it doesn't run.

Invite-only

Registration without an open door

Sign-up is gated by invite tokens, so federation can stay open to partner homeservers without the instance turning into a spam target the day it gets found.

Shared surfaces

A whiteboard and a watch party, docked in the call

A self-hosted Excalidraw stack and a synced YouTube, Twitch and Kick watch party with its own DJ queue, both living inside the in-call UI instead of behind a link-out tab.

Loading frames…

The buffer

It grew by 23ms every second, and nobody noticed

A -0.5ms lead offset looked negligible. It was a permanent clock error of 2.56%, and the jitter buffer climbed from 7576ms to 9925ms before the ceiling forced a 2.6 second crash.

Six pacer bugs, one root cause

FILL and HOLD, cleanly separated

An absolute 20ms clock replaced the sleeping-per-frame drift reset. The buffer settled at 2974 to 3015ms across a 5.5 minute test, with the CPU under load and zero underruns.

RED

A healthy buffer still lost packets

One glitch survived at a fully stable buffer. RED redundancy was off. Turning it on ships every Opus frame twice, so a single lost RTP packet costs nothing.

LiveKit SFU voice

Group calls route through a self-hosted LiveKit SFU with RED-protected Opus audio and an adaptive jitter buffer tuned across six separate pacer bugs before it held steady.

Native music bot

YouTube and SoundCloud search, a prefetching queue, and cache eviction run as a native systemd service next to Synapse, so the audio hot path never pays a Docker network tax.

MatrixRTC-verified identity

The LiveKit JWT service checks every caller's OpenID token against their own homeserver before minting an identity. A real impersonation bug was found and fixed here, not a theoretical one.

Tech Stack

Frontend

  • Element Web
  • Excalidraw

Backend

  • Synapse
  • PostgreSQL

Infra

  • LiveKit
  • Caddy

Protocol

  • Matrix CS-API

Ready when you are.

The buffer holds at three seconds, RED covers the packet loss RTT can't, and underneath all of it it's still just Matrix.