🥁 qlave

Changelog

What's shipped

Built in public. No marketing speak.

March 2026

Infrastructure

Middleware refactor + privacy page

Centralized route policy config — all CSP/auth rules in one file
Split session vs org context — API routes now get ctx.user correctly
Added Privacy Policy page
Room URLs now preserve correct origin context

March 2026

Product

Hosted rooms + landing redesign

Hosted rooms at /s/:code — share a link, no embed needed
Landing page reframed around the hosted room use case
Josefin Sans font — wider tracking, tribal warmth to match the mark
About, Terms, and Privacy pages added

February 2026

Core

WebRTC signaling aligned end-to-end

Fixed message type mismatch between QlaveSessionDO and SessionClient
ice-candidate, peer-joined, peer-left all aligned
Room code vs session UUID separation — codes are KV keys, UUIDs name DOs
SessionPage expired state UI — rooms show as expired, not broken

February 2026

Dashboard

Room creation UX

ensureRoom pattern — room created once, reused for copy and open
New room button to explicitly rotate the code
Room URL generated server-side, no window.location.origin issues
Subdomain stripping — shared links always resolve on main domain

January 2026

Core

Usage tracking

Live session state in KV — updated on joins, leaves, every 50th message
Historical session logs in D1 — flushed when last peer leaves via DO alarm
Dashboard stats: peak peers, session count, total duration
Site key rotation with KV cache busting

January 2026

Widget

Widget + bookmarklet

Widget deployed to cdn.qlave.dev — single script tag embed
Draggable pill UI, auth flow, session panel
Bookmarklet for injecting qlave onto sites you don't control
Lucide Drum icon throughout — no more emojis in UI

December 2025

Launch

Initial release

QlaveSessionDO — WebSocket hibernation, peer registry, signal relay
Site key validation against D1 with KV cache
BetterAuth + subdomain org scoping via qstart-rwsdk base
Dashboard with embed code and session history