From c037e13423990a70590bf54b6fc2886d9eee2d85 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Mon, 6 Apr 2026 01:24:15 +0000 Subject: [PATCH 1/2] feat(rmeets): minimal mode for clean meeting links without rSpace shell Add ?minimal=1 query param that renders a full-screen Jitsi meeting page without the rSpace header, tab bar, or module chrome. Used by scheduled meeting links so guests get a clean, direct video call experience. Includes prejoin screen, all standard Jitsi controls, and auto-closes the tab when the meeting ends. Co-Authored-By: Claude Opus 4.6 (1M context) --- modules/rmeets/mod.ts | 53 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/modules/rmeets/mod.ts b/modules/rmeets/mod.ts index ad91c8d..d730b1d 100644 --- a/modules/rmeets/mod.ts +++ b/modules/rmeets/mod.ts @@ -466,6 +466,59 @@ routes.get("/:room", (c) => { })); } + // Minimal mode — full-screen Jitsi without rSpace shell (for scheduled meeting links) + if (c.req.query("minimal") === "1" || c.req.query("join") === "1") { + const jitsiRoom = encodeURIComponent(room); + return c.html(` + + + + +${escapeHtml(room)} — Meeting + + + +
+
Connecting to meeting...
+
+ + + +`); + } + return c.html(renderShell({ title: `${room} — rMeets | rSpace`, moduleId: "rmeets", From 6c1298b796565ea4a94be0cd1377b164441a4f44 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Mon, 6 Apr 2026 12:27:41 -0400 Subject: [PATCH 2/2] fix(routing): prevent cached 301 redirects on root and standalone domains Root route now sends no-cache headers to bust stale 301s from the rcal standaloneDomain mishap. Standalone domain redirects changed from 301 (permanent/browser-cached) to 302 (temporary) so misconfiguration can never stick in user browsers again. Co-Authored-By: Claude Opus 4.6 --- server/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/index.ts b/server/index.ts index efb63c6..b12741d 100644 --- a/server/index.ts +++ b/server/index.ts @@ -2936,6 +2936,7 @@ for (const mod of getAllModules()) { // Landing page: rspace.online/ → server-rendered main landing app.get("/", (c) => { + c.header("Cache-Control", "no-cache, no-store, must-revalidate"); return c.html(renderMainLanding(getModuleInfoList())); }); @@ -3352,7 +3353,7 @@ const server = Bun.serve({ redirectUrl = `https://rspace.online/${standaloneModuleId}${remainingPath}`; } if (url.search) redirectUrl += url.search; - return Response.redirect(redirectUrl, 301); + return Response.redirect(redirectUrl, 302); } // ── WebSocket upgrade ──