guestlink v1: self-hosted guest line (Cleanfeed replacement)

Go + Pion + libopus. One guest, live audio both ways, anonymous chat.
README for this version was not preserved; see the next commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
namandClaude Opus 5.5 committed 2026-11-02 16:14:00 -06:00
commit b0e3b805b1
13 files changed
+1839

No files matched your search

+34
View File
@@ -0,0 +1,34 @@
<!doctype html>
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Guest Line Console</title><link rel="stylesheet" href="/static/style.css"></head>
<body>
<header><h1>Guest Line - host console</h1><span id="conn" class="pill">connecting…</span></header>
<main class="grid">
<section class="card">
<h2>Invite</h2>
<div class="row"><input id="link" readonly placeholder="No active link"><button id="copy">Copy</button></div>
<div class="row">
<button id="newlink">New link</button>
<button id="revoke" class="danger">Revoke link</button>
</div>
<p class="muted small">A new link ends the current session and clears chat. Old links stop working.</p>
<h2>Guest</h2>
<div id="guest" class="big">No guest connected</div>
<div id="callinfo" class="muted small"></div>
<div class="meter"><span>Guest &rarr; show</span><div class="bar"><i id="mIn"></i></div><b id="dIn"></b></div>
<div class="meter"><span>Mix-minus &rarr; guest</span><div class="bar"><i id="mOut"></i></div><b id="dOut"></b></div>
<div id="jb" class="muted small mono"></div>
<div class="row">
<button id="endcall">End audio</button>
<button id="kick" class="danger">Kick guest</button>
</div>
</section>
<section class="card chat">
<div class="row between"><h2>Chat</h2><button id="clear" class="small">Clear</button></div>
<div id="log" class="log" aria-live="polite"></div>
<form id="chatform" class="row"><textarea id="msg" rows="2" maxlength="2000" placeholder="Message the guest… (Enter to send)"></textarea><button class="primary">Send</button></form>
</section>
</main>
<script src="/static/common.js"></script>
<script src="/static/host.js"></script>
</body></html>