Branding overrides, settings dialog layout, and display name lock via source modifications
- PreMeetingScreen: use CSS variable cascade for left column background color (--navpri/--color-primary fallback) - PreMeetingScreen: add favicon override from ...
Clear stale hexheads on page refresh instead of restoring orphaned state
Minimized tool windows don't survive refresh, so restoring hexhead positions created orphaned heads with missing icons and non-functional click handlers. Now cl...
Add comprehensive logging to email invite route for debugging, handle multiple email field formats
Make readOnlyName override more aggressive so Meet cannot overwrite it
Meet can replace window.config entirely during bootstrap, clearing the readOnlyName flag. Add Object.defineProperty trap on window.config to re-inject readOnlyN...
Listen for async branding load event so logo and org colors render
PreMeetingScreen, Watermarks, and WelcomePage were reading window.__KAMO_MEET_BRANDING once during render, missing the data when the async loadBranding() comple...
Resolve settings dialog quality issues — height, tab overflow, and white-on-white text
Change fixed 560px height to auto with 85vh max so content fits without scroll bars. Add flexWrap to tab bar so tabs wrap instead of clipping. Override white th...
Rewrite HexHead placement system with deterministic layout engine
Replaces the buggy collision-avoidance system (spiralSearch, resolveCollisions, flyToHomeRow, dock/group RAF loops) with a single deterministic reflow() functio...
Preserve original room name (no capitalization/spaces), add copyable meeting URL field
1. Disabled safeStartCase() which was converting 'myroom123' to 'Myroom 123' with capitalization and random spaces. Room names now display exactly as ente...
Restyle settings dialog with glassmorphism design and horizontal tab bar
Add typing indicator to AI chat while waiting for response
The streaming bubble only showed when content was already being streamed, leaving no visual feedback during the REST wait. Added bouncing dots indicator that di...
Hide member-specific tabs when memberID is "new" to prevent BAD_REQUEST errors
The /settings/member/new URL (from "Add Team Member" button) is caught by the [memberID] dynamic route, causing AccountActivityTab, MembershipPermissionsTab, an...
Validate OTK FIRST before loading any theme assets to prevent expiry
ROOT CAUSE: branding/overrides.js was loading org config, CSS, favicon BEFORE validating the OTK. These network requests took 10+ seconds, causing the OTK to ex...
60s OTK TTL for meet windows, independent chat/email invites that don't block on backend
ROOT CAUSE: The OTK had a 10-second TTL. By the time the kamo-meet page loaded all its assets and branding/overrides.js ran to validate the OTK, it had already ...
Properly lock display name via config override + DOM mutation observer
Three-layer approach to ensure name is locked for authenticated users: 1. localStorage flag 'kamo-meet-authenticated' survives the OTK→JWT redirect 2. After red...
Send chat invites via existing chat session API, email invites via multipart to EmailService
Chat invites: creates/gets a chat session via POST /api/media/sessions/chat then sends the meeting invite as a text message in that session. Uses the exact same...
Commit pending infrastructure config changes across auto-cert, cockroachdb, coturn, janus, mail, nats, and traefik
Use getServerName() instead of getHeader(Host) for original host resolution
ForwardedHeaderFilter consumes X-Forwarded-Host and adapts getServerName() accordingly, while getHeader(Host) returns the raw HTTP Host which may be a K8s inter...
Lock display name via Meet's native readOnlyName config for authenticated users
- Sidecar config.js now sets readOnlyName:true when user has *** cookie or JWT in the page URL (detected via referer/cookie headers) - nginx passes Cookie and...
Send chat invites to correct WebSocket topic /topic/chat/incoming/{memberId}
Was publishing to /topic/chat/member/{id} but kamo-internal subscribes to /topic/chat/incoming/{id}. Also fixed Member entity field access **************** inst...
Forward all meeting fields (sendChatInvite, sendEmailInvite, customMessage, roomAlias, joinUrl) to backend
The Next.js API route was stripping sendChatInvite, sendEmailInvite, customMessage, and roomAlias — only forwarding roomName and inviteMemberIds. Backend receiv...
Implement chat WebSocket and email invite sending for meetings
MeetController now reads sendChatInvite, sendEmailInvite, and customMessage from the create request body and triggers async invite sending. MeetService.sendInv...
Pass availableMembers to all MeetingDialog instances and self-fetch when not provided
- MemberList passes availableMembers to each MemberItem - MemberItem passes availableMembers to its MeetingDialog - MeetingDialog self-fetches members from ****...
Generate Prosody JWT from OTK session and redirect with ?jwt= for proper moderator auth
The OTK flow now: 1. Validates OTK via sidecar → gets session (memberId, displayName, etc.) 2. Saves display name to localStorage 3. Calls /api/auth/jwt to gene...
Apply org nav color to entire pre-meeting left column, not just toolbar strip
Target .premeeting-screen (the full-height container) and its content panel children instead of generated class names. Also covers in-meeting toolbox and filmst...
Add glass transparency effect to feature cards on homepage and settings
Full settings modal with Devices/Sounds/More/Shortcuts tabs, display name on main card, primary color overlay
- Display name is now a required field on the main card above the room input, not in settings. Users must enter their name before joining. - Settings modal ha...
Forward visitor IP and User-Agent to backend for accurate account activity logging
The Next.js API routes were not forwarding X-Forwarded-For, X-Real-IP, or User-Agent headers to the Java backend, causing account activity to log the Next.js po...
Use HTTP on port 80 for meet service URL to match other services
The HTTPS endpoint on 8443 causes SSL cert mismatch when routing through K8s internal DNS. All other services use HTTP on port 80.
Validate room existence before anonymous join, add settings modal with device selection
Anonymous users must enter a valid meeting room name - the welcome page checks /api/meet/exists/{roomName} before allowing join. If the meeting doesn't exist or...
Add GET /api/meet/exists/{roomName} endpoint for anonymous room validation
Add findByRoomNameAndStatusIn query to MeetingRecordRepository
Add custom message textarea to MeetingDialog for chat/email invitations
Shows a multiline text input when at least one notification option is enabled, allowing the meeting creator to add a personal note to the invitation. Hidden whe...
Show MeetingDialog for per-member meetings instead of bypassing directly
Both MemberItem (Interaction Center) and ChatBox (chat tool window) now open the MeetingDialog with the target member pre-selected, allowing the user to set the...
Route meet config API through APIService instead of direct MediaService
The existing meet/create route uses forwardToApi (APIService), which proxies to MediaService. The new config/background routes must follow the same pattern to w...
Lock display name input for authenticated users on pre-join screen
Authenticated members (arriving via OTK) get their name pre-filled and locked — the input is set to readOnly with pointer-events disabled. A MutationObserver en...
Use relative BOSH/WS URLs in config.js, add OTK auth with name pre-fill, load org CSS for nav colors
Three fixes: 1. config.js BOSH URL changed from cluster-internal address to relative /http-bind (nginx proxies to Prosody). WebSocket uses host header. 2. br...
Add custom welcome page with org-themed backgrounds, glassmorphism card, and room name input
Replaces Meet's default welcome screen with a custom landing page that: - Loads org backgrounds from MinIO theme with carousel transitions - Shows org logo and ...
Add dnsPolicy ClusterFirstWithHostNet to JVB StatefulSets so hostNetwork pods can resolve cluster DNS
Move New Tab button after Chat Now as icon-only, remove duplicate Notes link
New Tab is now an icon button (no label) placed to the right of Chat Now. Notes removed from NavTop since it's already in NavPri.
Enable nginx SSI and copy missing HTML include files (head.html, base.html, fonts.html, body.html, plugin.head.html)
Meet Meet uses nginx Server Side Includes to compose index.html from multiple partial HTML files. Without SSI enabled and the include files present, the page re...
Configure Prosody, Jicofo, and secrets for Jibri recording support
Enable recording in Prosody, add Jibri XMPP passwords to secrets, and configure Jicofo brewery MUC for Jibri instance discovery.
Add Jibri deployment manifests for Meet meeting recording
Kubernetes deployment, service, and configmap for Jibri (Meet Broadcasting Infrastructure) to enable meeting recording with MinIO storage integration.
Add /settings/features/meets page with 5 tabs for org-level video conferencing config
New settings page with General, Security & Access, Recording, Branding, and Notifications tabs. Includes meetApi client, MediaService proxy routes, logo variant...
Je, unaona nini kuhusu usafiri?
Kila moja ya hizi updates ardhi katika nafasi yako ya kazi moja kwa moja. Kuanza bure na kuangalia kukua wiki baada ya wiki.