@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', $room->isWebinar() => 'webinar', default => 'meeting', }; $sessionNounTitle = ucfirst($sessionNoun); $presenterRefsList = (array) ($presenterRefs ?? []); $headerHostPerson = ParticipantPresenter::headerHost($joinedParticipants->all(), $roomHost); $headerParticipantLabel = ParticipantPresenter::headerCountLabel( $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:

You can speak — your microphone is available

@csrf
@if ($participant->isHost()) @endif

Start breakout rooms

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

End {{ $sessionNoun }} for everyone?

All participants will be disconnected and the session will close.

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

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

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

Stage layout

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

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

{{ $sessionNounTitle }} tools and extras

@if ($participant->isHost())

Broadcast to breakouts

@endif
@if ($isWebinar ?? false)

Q&A

  • No questions yet.
@endif