/** * rMeets module — video meetings powered by Jitsi. * * Hub page with Quick Meet + room name input, * room pages embed Jitsi via renderExternalAppShell. */ import { Hono } from "hono"; import { renderShell, renderExternalAppShell, escapeHtml } from "../../server/shell"; import { getModuleInfoList } from "../../shared/module"; import type { RSpaceModule } from "../../shared/module"; const JITSI_URL = process.env.JITSI_URL || "https://jeffsi.localvibe.live"; const routes = new Hono(); // ── Room embed ── routes.get("/room/:room", (c) => { const space = c.req.param("space") || "demo"; const room = c.req.param("room"); return c.html(renderExternalAppShell({ title: `${room} — rMeets | rSpace`, moduleId: "rmeets", spaceSlug: space, modules: getModuleInfoList(), appUrl: `${JITSI_URL}/${encodeURIComponent(room)}`, appName: "Jitsi Meet", theme: "dark", })); }); // ── Direct Jitsi lobby ── routes.get("/meet", (c) => { const space = c.req.param("space") || "demo"; return c.html(renderExternalAppShell({ title: `Jitsi Meet — rMeets | rSpace`, moduleId: "rmeets", spaceSlug: space, modules: getModuleInfoList(), appUrl: JITSI_URL, appName: "Jitsi Meet", theme: "dark", })); }); // ── Hub page ── routes.get("/", (c) => { const space = c.req.param("space") || "demo"; const base = `/${escapeHtml(space)}/rmeets`; const randomId = Math.random().toString(36).slice(2, 10); return c.html(renderShell({ title: `rMeets — ${space} | rSpace`, moduleId: "rmeets", spaceSlug: space, modules: getModuleInfoList(), theme: "dark", styles: ``, body: `
Video meetings powered by Jitsi — no account required