From 13410dd3e7f6e133a147ce7a23af9d13674301e6 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Mon, 6 Apr 2026 14:11:05 -0400 Subject: [PATCH] fix(rmeets): default room view to clean full-screen Jitsi without shell Swap default /:room route to serve minimal full-screen Jitsi (previously required ?minimal=1). Shell mode now opt-in via ?shell=1 or director mode. Co-Authored-By: Claude Opus 4.6 --- modules/rmeets/mod.ts | 72 +++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 26 deletions(-) diff --git a/modules/rmeets/mod.ts b/modules/rmeets/mod.ts index d730b1d..611590e 100644 --- a/modules/rmeets/mod.ts +++ b/modules/rmeets/mod.ts @@ -454,6 +454,19 @@ routes.get("/:room", (c) => { const director = c.req.query("director") === "1"; const sessionId = c.req.query("session") || ""; + // Full rSpace shell mode — only when explicitly requested via ?shell=1 or director mode + if (c.req.query("shell") === "1" || director) { + return c.html(renderShell({ + title: `${room} — rMeets | rSpace`, + moduleId: "rmeets", + spaceSlug: space, + modules: getModuleInfoList(), + theme: "dark", + body: ``, + scripts: ``, + })); + } + if (c.req.query("iframe") === "1") { return c.html(renderExternalAppShell({ title: `${room} — rMeets | rSpace`, @@ -466,21 +479,27 @@ 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(` + // Default: clean full-screen Jitsi — no rSpace shell, mobile-friendly + const jitsiRoom = encodeURIComponent(room); + return c.html(` - + + + + ${escapeHtml(room)} — Meeting @@ -500,34 +519,35 @@ routes.get("/:room", (c) => { startWithVideoMuted: false, prejoinPageEnabled: true, disableDeepLinking: true, + disableThirdPartyRequests: true, + enableClosePage: false, + disableInviteFunctions: false, + toolbarButtons: [ + "microphone","camera","desktop","hangup", + "raisehand","tileview","toggle-camera", + "fullscreen","chat","settings", + "participants-pane","select-background", + ], }, interfaceConfigOverrides: { SHOW_JITSI_WATERMARK: false, SHOW_BRAND_WATERMARK: false, SHOW_POWERED_BY: false, - TOOLBAR_BUTTONS: [ - "microphone","camera","closedcaptions","desktop","fullscreen", - "fodeviceselection","hangup","chat","recording","livestreaming", - "etherpad","settings","raisehand","videoquality","filmstrip", - "feedback","shortcuts","tileview","participants-pane", - ], + MOBILE_APP_PROMO: false, + HIDE_DEEP_LINKING_LOGO: true, + DISABLE_JOIN_LEAVE_NOTIFICATIONS: false, }, }); - api.addEventListener("readyToClose", () => { window.close(); }); + api.addEventListener("readyToClose", function() { + try { window.close(); } catch(e) {} + // window.close() fails if the tab wasn't opened by JS (common on mobile) + document.getElementById("jitsi-container").innerHTML = + '
Meeting ended' + + 'Back to rMeets
'; + }); `); - } - - return c.html(renderShell({ - title: `${room} — rMeets | rSpace`, - moduleId: "rmeets", - spaceSlug: space, - modules: getModuleInfoList(), - theme: "dark", - body: ``, - scripts: ``, - })); }); // ── Helpers ──