Stop clearing the overlay on transient mute/unsubscribe, re-attach existing
screen tracks for all viewers, and resume LiveKit upstream if the browser
briefly mutes the capture while the presenter focuses another window.
Heavy per-participant poll queries were saturating the shared host during
live rooms. Cache the shared room payload for 2s, return 304 when unchanged,
throttle breakout expiry and captions, and slow client polling (6s / 20s
when hidden) so concurrent attendees no longer fan out full Laravel work.
Defer summarization until recordings finish, merge chat with deduplicated live captions, and clear the screen-share overlay so participant cards return after sharing ends.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the once-per-session sessionStorage guard (which suppressed the loading
screen after its first appearance) with entry-aware logic: show on app entry
and reloads, suppress on internal link navigations and back/forward.
Stack time, title, and details vertically in compact cards for the narrow live-room sidebar and agenda views.
Co-authored-by: Cursor <cursoragent@cursor.com>
Teleport modals to body, hide until Alpine is ready, use a single fade transition, and lock scroll on html with stable scrollbar gutter.
Co-authored-by: Cursor <cursoragent@cursor.com>
Link opens an in-page modal on conference and webinar show pages; unlink uses the shared confirm-dialog component.
Co-authored-by: Cursor <cursoragent@cursor.com>
Create rooms via the LiveKit API, retry egress when the room is missing, and resume server egress after the host connects when auto-record fell back to browser capture.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove icon-only restart buttons on webinar and conference pages; btn-group now carousels on narrow screens when actions overflow.
Co-authored-by: Cursor <cursoragent@cursor.com>
Server-side room composite egress replaces fragile MediaRecorder DOM capture when enabled, with webhook completion and browser fallback when egress is unavailable.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove the duplicate webinar header button and make the primary purple action
first in the join card, with a mobile rotate icon when restarting.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace restart button text with a compact arrow-path icon on small screens while keeping the full label on desktop.
Co-authored-by: Cursor <cursoragent@cursor.com>
Enforce invite-only room access, validate invite emails on create, assign
attendee role for listener invitations, and add invite UI on the room show
page. Redesign meetings, rooms, conferences, and webinars indexes to match
the Events hero, stats cards, and icon list layout.
Co-authored-by: Cursor <cursoragent@cursor.com>
Space speaker tiles use a different DOM than video tiles; updateParticipantTile
was throwing on missing cam badges. Also stop using the hidden attribute on
toolbar buttons so Alpine can show mic controls after promotion, and let listeners
dismiss the playback banner without needing publish access.
Co-authored-by: Cursor <cursoragent@cursor.com>
Include attendees alongside host, co-hosts, and speakers so everyone in the call gets a card with role and muted state, not just speakers.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use a three-column avatar grid with role labels and speaking/muted indicators, enable chat in audio rooms, and swap the mobile People nav button for Chat since People stays in the header.
Co-authored-by: Cursor <cursoragent@cursor.com>
Render host, co-host, and panelist cards from joined participants instead of LiveKit connections alone so listeners no longer occupy tiles and accepted speakers appear reliably.
Co-authored-by: Cursor <cursoragent@cursor.com>
Bootstrap room-type flags from meet-config before Alpine paints, gate toolbar and banners server-side per room type, and hide Alpine toolbar items until init completes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use display grid for speaker tiles, show only host/co-host/panelist on stage, and re-layout when roles change so cards stay in separate cells.
Co-authored-by: Cursor <cursoragent@cursor.com>
Remove duplicate host record button on desktop and split invite-to-speak from make co-host so listeners must accept before speaking while co-host is applied immediately.
Co-authored-by: Cursor <cursoragent@cursor.com>
Let hosts promote raised-hand listeners from People, remove the empty More menu in spaces, and put People and recording on the bottom bar.
Co-authored-by: Cursor <cursoragent@cursor.com>
Block breakouts, chat, Q&A, and other meeting-only tools in spaces, hide video controls for audio-only rooms, and stabilize mobile nav and toolbar layout.
Co-authored-by: Cursor <cursoragent@cursor.com>
Switch regular meeting tiles to a 2–3 column scrollable gallery with overlay labels so many participants fit on small screens without stacked full-width cards.
Co-authored-by: Cursor <cursoragent@cursor.com>
Recreate spotlight tiles with video on switch, limit regular meetings to four primary controls before More, and align mobile notification badge with desktop.
Spotlight by participant uuid, add on-stage picker in stage layout, and show who is currently spotlighted in the plenary status bar.
Co-authored-by: Cursor <cursoragent@cursor.com>
Show ladillmeet-logo-email.png in contact mail and publish a markdown mail header matching the Invoice pattern.
Co-authored-by: Cursor <cursoragent@cursor.com>
Show participant count without labels on phones, cap the title at 40% width, and keep four bottom-nav icons by moving React into More only after speak access is granted.
Co-authored-by: Cursor <cursoragent@cursor.com>
Cap customer-facing logos at 50vw on phones, tighten leave-feedback layout, and show icon-only share plus a blinking record dot on mobile.
Co-authored-by: Cursor <cursoragent@cursor.com>
Attendees register or sign in with a badge before the display-name screen; email is no longer collected on the Meet join form.
Co-authored-by: Cursor <cursoragent@cursor.com>
Server-side auto-record now triggers browser MediaRecorder on connect, and
the end-meeting dialog only warns when capture actually ran but produced no file.
Co-authored-by: Cursor <cursoragent@cursor.com>
Let attendees request host-granted microphone access with LiveKit reconnect,
participant panel controls, and toolbar UI that only shows mic when allowed.
Fix Events create URL, surface API key setup guidance, and align the Webinars
sidebar icon with other nav items using currentColor strokes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add Events linking UI and service client, remove Meet-native registration and invitation flows for these room types, and redirect attendees to Events registration when joining.
Co-authored-by: Cursor <cursoragent@cursor.com>