@include('partials.favicon') @vite(['resources/css/app.css', 'resources/js/meet-room.js']) @php use App\Models\User; use App\Services\Meet\ParticipantPresenter; $joined = $session->participants->whereIn('status', ['joined', 'waiting']); $participantAvatars = ParticipantPresenter::avatarMap($joined, $room->host_user_ref); $joinedParticipants = $joined ->map(fn ($p) => ParticipantPresenter::toArray($p, $participantAvatars, $room->host_user_ref)) ->values(); $roomHostUser = User::query()->where('public_id', $room->host_user_ref)->first(); $roomHost = [ 'user_ref' => $room->host_user_ref, 'display_name' => $roomHostUser?->name ?? 'Host', 'avatar_url' => $roomHostUser?->avatarUrl(), ]; $isConferenceSession = $isConference ?? false; $sessionNoun = match (true) { $isConferenceSession => 'conference', ($isSpace ?? false) => 'room', $room->isWebinar() => 'webinar', default => 'meeting', }; $sessionNounTitle = ucfirst($sessionNoun); $presenterRefsList = (array) ($presenterRefs ?? []); $headerHostPerson = ParticipantPresenter::headerHost($joinedParticipants->all(), $roomHost); $headerParticipantCount = ParticipantPresenter::headerCountNumber( $joinedParticipants->all(), (bool) ($usesStageLayout ?? false), $presenterRefsList, ); $headerParticipantSuffix = ParticipantPresenter::headerCountSuffix( $joinedParticipants->all(), (bool) ($usesStageLayout ?? false), $presenterRefsList, ); $headerWaitingCount = $joinedParticipants->where('status', 'waiting')->count(); $stageLayoutName = ($stageConfig['stage_layout'] ?? 'plenary') === 'panel' ? 'Panel discussion' : 'Plenary'; $initialConferenceStatus = match (true) { ($inBreakout ?? false) => 'Breakout · meeting mode', ($isGreenRoom ?? false) && ($usesStageLayout ?? false) => "Green room · {$stageLayoutName}", ($isGreenRoom ?? false) => 'Green room', ! ($usesStageLayout ?? false) => 'Conference live', ($stageConfig['stage_layout'] ?? 'plenary') === 'panel' => 'Panel discussion live', default => 'Plenary live', }; $initialConferenceStatusClass = match (true) { ($inBreakout ?? false) => 'text-amber-400/90', ($isGreenRoom ?? false) => 'text-violet-400/90', ($stageConfig['stage_layout'] ?? 'plenary') === 'panel' => 'text-violet-400/90', default => 'text-sky-400/90', }; @endphp @if (! $mediaConfigured)
LiveKit is not configured. Set LIVEKIT_URL, LIVEKIT_API_KEY, and LIVEKIT_API_SECRET in .env for video.
@endif

{{ $room->title }}

@if ($isAudioOnly ?? false)

Audio room

@elseif ($isConference ?? false)

{{ $initialConferenceStatus }}

@endif

is_locked) style="display: none" @endunless class="rounded bg-amber-600 px-2 py-0.5 font-medium text-white">Locked

Green room

Only hosts and speakers are visible. Attendees join after you go live.

Stage layout:

Breakout session

Breakouts are active

Attendees are in smaller discussion groups. You remain on the main stage.

Invite others

Share this link so people can join the {{ $sessionNoun }}.

Passcode:

@php $toolbarShowMic = ($canPublish ?? true) && ((! ($audioOnlyPublish ?? false)) || ($speakGranted ?? false)); $toolbarShowVideo = ($canPublish ?? true) && ! ($isAudioOnly ?? false) && ! ($audioOnlyPublish ?? false); $toolbarShowAudiencePrimary = ($isSpace ?? false) ? ! ($canPublish ?? true) : (($usesSpeakAccess ?? false) && ((! ($canPublish ?? true)) || ($audioOnlyPublish ?? false))); $toolbarShowAudienceDesktop = ($isSpace ?? false) ? ! ($canPublish ?? true) : (($usesSpeakAccess ?? false) ? ((! ($canPublish ?? true)) || ($audioOnlyPublish ?? false)) : ($canPublish ?? true)); $toolbarShowReactPrimary = $toolbarShowAudiencePrimary && ! (($usesSpeakAccess ?? false) && ($speakGranted ?? false) && ($audioOnlyPublish ?? false)); @endphp

You can speak — your microphone is available

You've been invited to speak
@if ($participant->isHost()) @endif
@unless ($isSpace ?? false) @endunless @if (($isSpace ?? false) && $participant->isHost()) @endif
@csrf
@if ($participant->isHost()) @endif
@unless ($isSpace ?? false)

Start breakout rooms

Attendees and speakers are split into smaller groups with full meeting controls. You stay on the main stage.

@endunless

End {{ $sessionNoun }} for everyone?

All participants will be disconnected and the session will close.

@unless ($isSpace ?? false)

Messages are visible to everyone in the call

@foreach ($messages as $message) @php $isOwn = $message->sender_name === $participant->display_name; @endphp
@unless ($isOwn)

{{ $message->sender_name }}

@endunless

{{ $message->body }}

{{ $message->created_at->format('g:i A') }}

@endforeach
@endunless @unless ($isSpace ?? false)

Lineup from Events when linked to this {{ $sessionNoun }}

@include('meet.room.partials.programme-panel', [ 'programmeSnapshot' => $programmeSnapshot, 'linkedProgrammeItems' => $linkedProgrammeItems ?? [], 'sessionNoun' => $sessionNoun, ])
@endunless

Stage layout

Choose how speakers appear on stage. Changes apply when you save.

Plenary shows one speaker on the main stage.

On stage

Switching to panel discussion changes the live stage to a multi-speaker grid for everyone in the room.

@unless ($isSpace ?? false)

{{ ($isSpace ?? false) ? 'Audio room controls' : $sessionNounTitle.' tools and extras' }}

@unless ($isSpace ?? false) @endunless @if ($participant->isHost()) @unless ($isSpace ?? false)

Broadcast to breakouts

@endunless @endif
@if ($isWebinar ?? false)

Q&A

  • No questions yet.
@endif

@endunless