From 12cc724291833b652b77f7f92e589352881c1420 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Thu, 16 Apr 2026 09:09:30 -0400 Subject: [PATCH 1/3] fix(rmeets): add recording button + post-meeting transcript link - Add "recording" to Jitsi toolbarButtons in both clean room mode and folk-jitsi-room shell mode so users can trigger Jibri recording - Add "View Transcript & Summary" link on meeting-ended screen - Jibri network connectivity fixed on Netcup (was on wrong Docker network, couldn't reach Prosody XMPP) Co-Authored-By: Claude Opus 4.6 --- modules/rmeets/components/folk-jitsi-room.ts | 2 +- modules/rmeets/mod.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/rmeets/components/folk-jitsi-room.ts b/modules/rmeets/components/folk-jitsi-room.ts index 117fb46d..8def9dca 100644 --- a/modules/rmeets/components/folk-jitsi-room.ts +++ b/modules/rmeets/components/folk-jitsi-room.ts @@ -148,7 +148,7 @@ class FolkJitsiRoom extends HTMLElement { "raisehand", "tileview", "toggle-camera", "fullscreen", "chat", "settings", "participants-pane", "select-background", - "sharedvideo", + "sharedvideo", "recording", ], // Hide panels that add stray close (×) buttons disableChat: false, diff --git a/modules/rmeets/mod.ts b/modules/rmeets/mod.ts index c8413518..f3bc49f3 100644 --- a/modules/rmeets/mod.ts +++ b/modules/rmeets/mod.ts @@ -755,7 +755,7 @@ routes.get("/:room", (c) => { "raisehand","tileview","toggle-camera", "fullscreen","chat","settings", "participants-pane","select-background", - "sharedvideo","shareaudio", + "sharedvideo","shareaudio","recording", ], }, customToolbarButtons: [ @@ -784,7 +784,8 @@ routes.get("/:room", (c) => { try { window.close(); } catch(e) {} document.getElementById("jitsi-container").innerHTML = '
Meeting ended' - + 'Back to rMeets
'; + + 'View Transcript & Summary' + + 'Back to rMeets'; }); } catch(e) { document.getElementById("jitsi-container").innerHTML = From 8592abd467c1f521aaae2db5df36e50b225504b1 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Thu, 16 Apr 2026 09:36:29 -0400 Subject: [PATCH 2/3] feat(rmeets): chat popup notifications + right-side chat panel - Enable chat notifications (brief popup for all participants) - Move chat panel to right side via CHAT_PANEL_POSITION - Applied to both clean room mode and folk-jitsi-room shell mode Co-Authored-By: Claude Opus 4.6 --- modules/rmeets/components/folk-jitsi-room.ts | 2 ++ modules/rmeets/mod.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/modules/rmeets/components/folk-jitsi-room.ts b/modules/rmeets/components/folk-jitsi-room.ts index 8def9dca..6017522d 100644 --- a/modules/rmeets/components/folk-jitsi-room.ts +++ b/modules/rmeets/components/folk-jitsi-room.ts @@ -143,6 +143,7 @@ class FolkJitsiRoom extends HTMLElement { hideConferenceSubject: false, disableVirtualBackground: false, disableProfile: false, + notifications: ['chat'], toolbarButtons: [ "camera", "microphone", "desktop", "hangup", "raisehand", "tileview", "toggle-camera", @@ -160,6 +161,7 @@ class FolkJitsiRoom extends HTMLElement { SHOW_BRAND_WATERMARK: false, CLOSE_PAGE_GUEST_HINT: false, SHOW_PROMOTIONAL_CLOSE_PAGE: false, + CHAT_PANEL_POSITION: 'right', SETTINGS_SECTIONS: ['devices', 'language', 'moderator', 'profile', 'sounds', 'more'], }, }); diff --git a/modules/rmeets/mod.ts b/modules/rmeets/mod.ts index f3bc49f3..d2d382c8 100644 --- a/modules/rmeets/mod.ts +++ b/modules/rmeets/mod.ts @@ -750,6 +750,7 @@ routes.get("/:room", (c) => { enableClosePage: false, disableVirtualBackground: false, disableProfile: false, + notifications: ['chat'], toolbarButtons: [ "microphone","camera","desktop","hangup", "raisehand","tileview","toggle-camera", @@ -768,6 +769,7 @@ routes.get("/:room", (c) => { MOBILE_APP_PROMO: false, HIDE_DEEP_LINKING_LOGO: true, DISABLE_JOIN_LEAVE_NOTIFICATIONS: false, + CHAT_PANEL_POSITION: 'right', SETTINGS_SECTIONS: ['devices', 'language', 'moderator', 'profile', 'sounds', 'more'], }, }); From a2f74faa3e971e2c2ad81ecf0bb3a0fee76da979 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Thu, 16 Apr 2026 11:04:14 -0400 Subject: [PATCH 3/3] =?UTF-8?q?feat(rtime):=20split-screen=20layout=20?= =?UTF-8?q?=E2=80=94=20commitment=20form=20left,=20pool=20viz=20right?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restructured rTime from pool+weaving side-by-side to commitment entry form (left 50%) and pool orb visualization (right 50%). Inline form replaces modal for pledging time. Commitments list shows below form. Weaving SVG moved to separate toggled view via "Weave" button. Co-Authored-By: Claude Opus 4.6 --- modules/rtime/components/folk-timebank-app.ts | 391 +++++++++++++----- 1 file changed, 296 insertions(+), 95 deletions(-) diff --git a/modules/rtime/components/folk-timebank-app.ts b/modules/rtime/components/folk-timebank-app.ts index 8c8c9c72..45304fba 100644 --- a/modules/rtime/components/folk-timebank-app.ts +++ b/modules/rtime/components/folk-timebank-app.ts @@ -287,7 +287,7 @@ class FolkTimebankApp extends HTMLElement { private poolPointerId: number | null = null; private poolPointerStart: { x: number; y: number; cx: number; cy: number } | null = null; private poolPanelCollapsed = false; - private _panelSplitPct = 35; + private _panelSplitPct = 50; private _dividerDragging = false; private _dividerDragStartX = 0; private _dividerDragStartPct = 0; @@ -375,12 +375,14 @@ class FolkTimebankApp extends HTMLElement { this._history.push(view); this.currentView = view; const canvasView = this.shadow.getElementById('canvas-view'); + const weaveView = this.shadow.getElementById('weave-view'); const collabView = this.shadow.getElementById('collaborate-view'); const dashView = this.shadow.getElementById('dashboard-view'); if (canvasView) canvasView.style.display = view === 'canvas' ? 'flex' : 'none'; + if (weaveView) weaveView.style.display = 'none'; if (collabView) collabView.style.display = view === 'collaborate' ? 'flex' : 'none'; if (dashView) dashView.style.display = view === 'dashboard' ? 'flex' : 'none'; - if (view === 'canvas') { this.resizePoolCanvas(); this.rebuildSidebar(); } + if (view === 'canvas') { this.resizePoolCanvas(); this.rebuildSidebar(); this.renderCommitmentsList(); } if (view === 'collaborate') this.refreshCollaborate(); if (view === 'dashboard') this.refreshDashboard(); } @@ -395,7 +397,7 @@ class FolkTimebankApp extends HTMLElement { else this.currentView = 'canvas'; this.dpr = window.devicePixelRatio || 1; this._theme = (localStorage.getItem('rtime-theme') as 'dark' | 'light') || 'dark'; - this._panelSplitPct = parseFloat(localStorage.getItem('rtime-split-pct') || '35'); + this._panelSplitPct = parseFloat(localStorage.getItem('rtime-split-pct') || '50'); this.render(); this.applyTheme(); this.setupPoolPanel(); @@ -524,6 +526,7 @@ class FolkTimebankApp extends HTMLElement { this.buildOrbs(); this.updateStats(); + this.renderCommitmentsList(); this.rebuildSidebar(); this.applyRestoredConnections(); @@ -544,13 +547,52 @@ class FolkTimebankApp extends HTMLElement {
- + +
+
+ Pledge Time + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ + +
+ +
+
+ Commitments + 0 +
+
+
+ +
+
Commitment Pool - drag orb to weave \u2192 - - +
@@ -570,22 +612,17 @@ class FolkTimebankApp extends HTMLElement {
-
-
- -
-
-
- -
- +
+ +