From 1e76f62f71d54d09e15b7f73c6a8044bfc7b7e86 Mon Sep 17 00:00:00 2001 From: Russell Ballestrini Date: Sun, 31 May 2026 10:54:36 -0400 Subject: [PATCH] zebra-spaces v0.1: multi-party voice rooms with roles, identity, vault New page: web/zebra-spaces.html. Extends the rendezvous + WebRTC mesh model from zebra-audio (1:1) to a room of up to ~8 speakers (host + 2 co-hosts + speakers) with listeners (deferred to v0.2 for SFU fan-out). Identity: per-browser persistent Ed25519 keypair in localStorage, plus a per-session UUID for in-room "whose who". Password-vault backup/restore (PBKDF2 600k + AES-GCM, matches zebra-audio's crypto) emits a self-contained 'zspc-id-v1|...' blob. Roles: everyone joins as listener; mods (host + co-hosts) extend mic-invites that listeners accept/decline; host promotes to co-host; mods demote and boot. Co-hosts cannot remove the host. Every role transition is signed by the acting mod's Ed25519 over a canonical input bound to room_id + epoch, so a compromised relay cannot forge promotions, only refuse to relay them. Pairs with cmd/zebra-spaces-signal in proxy.unturf.com. Nav: zebra-audio and host-your-own cross-link to spaces. Makefile: stamp target now covers zebra-spaces.html (web/chat.html and web/how-it-works.html stamps refreshed today as a side effect). --- Makefile | 2 +- web/chat.html | 6 +- web/host-your-own.html | 10 +- web/how-it-works.html | 6 +- web/zebra-audio.html | 7 +- web/zebra-spaces.html | 992 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 1008 insertions(+), 15 deletions(-) create mode 100644 web/zebra-spaces.html diff --git a/Makefile b/Makefile index 61c1e2b..5b43bc9 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ PULSE = src/pulse.c # stamp each web page with today's date + its own md5/sha256 (run before deploy) stamp: - @node web/stamp.js web/chat.html web/zebra-audio.html web/how-it-works.html web/host-your-own.html + @node web/stamp.js web/chat.html web/zebra-audio.html web/zebra-spaces.html web/how-it-works.html web/host-your-own.html all: tx rx chat bt carrier zebrad diff --git a/web/chat.html b/web/chat.html index 7579faf..3932a7a 100644 --- a/web/chat.html +++ b/web/chat.html @@ -1649,9 +1649,9 @@ logLine('sys', 'chat content lives in encrypted SRTP audio. no IP packets carry })(); diff --git a/web/host-your-own.html b/web/host-your-own.html index 88d6185..f932ada 100644 --- a/web/host-your-own.html +++ b/web/host-your-own.html @@ -71,8 +71,8 @@ unturf

- The zebra pages (the chat and the voice - call) need exactly two things from a server: a rendezvous relay + The zebra pages (the chat, the 1:1 voice + call, and the multi-party spaces) need exactly two things from a server: a rendezvous relay so two browsers can find each other, and a TURN server so they can still connect when both sit behind NAT. Everything else — the crypto, the modem, the audio — runs in the browser. This page hands you the whole @@ -383,9 +383,9 @@ turn.example.com {

diff --git a/web/how-it-works.html b/web/how-it-works.html index 163fcb6..9830fa9 100644 --- a/web/how-it-works.html +++ b/web/how-it-works.html @@ -267,9 +267,9 @@

diff --git a/web/zebra-audio.html b/web/zebra-audio.html index 2e2c41e..8f7bf35 100644 --- a/web/zebra-audio.html +++ b/web/zebra-audio.html @@ -74,6 +74,7 @@

zebra audio

encrypted voice  ·  webrtc  ·  rendezvous  ·  + spaces  ·  host your own  ·  unturf

@@ -651,9 +652,9 @@ else wirePuppet(); diff --git a/web/zebra-spaces.html b/web/zebra-spaces.html new file mode 100644 index 0000000..70ab301 --- /dev/null +++ b/web/zebra-spaces.html @@ -0,0 +1,992 @@ + + + + + +zebra spaces + + + + +

zebra spaces

+

encrypted voice rooms  ·  webrtc  ·  rendezvous  ·  + 1:1 call  ·  + host your own  ·  + unturf

+ +
+

identity

+
+ + + +
+
+ + your key lives only in this browser; back it up if you want it on another device or after clearing data. +
+ +
+ +
+

space

+
+ + +
+
+ + idle + + +
+ + +

+ everyone joins as a listener. host (first to enter) can invite listeners to the + mic. co-hosts share mod powers but cannot remove the host. audio is end-to-end + encrypted (DTLS-SRTP); SDP is encrypted with the rendezvous code before reaching + the relay. +

+
+ + + + + + + +
+

log

+
+
+ + + + + +