Add conference stage layouts for plenary and panel discussions.
Deploy Ladill Meet / deploy (push) Successful in 37s

Speakers get a full-screen spotlight with overlapping audience avatars; hosts can configure panels in the green room and switch layouts live.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-01 21:03:02 +00:00
co-authored by Cursor
parent 158b7b650a
commit 1037cd6ee6
14 changed files with 889 additions and 32 deletions
@@ -14,6 +14,7 @@ use App\Services\Meet\RecordingService;
use App\Services\Meet\SecurityPolicyService;
use App\Services\Meet\SessionService;
use App\Services\Meet\SpaceService;
use App\Services\Meet\StageLayoutService;
use App\Services\Meet\TranscriptService;
use App\Services\Meet\WebinarService;
use Illuminate\Http\JsonResponse;
@@ -64,6 +65,7 @@ class MeetingRoomController extends Controller
$webinars = app(WebinarService::class);
$spaces = app(SpaceService::class);
$isAudioOnly = $room->isAudioOnly();
$stageLayout = app(StageLayoutService::class);
return view('meet.room.show', [
'session' => $session,
@@ -86,6 +88,8 @@ class MeetingRoomController extends Controller
? $spaces->canPublish($room, $participant)
: $webinars->canPublish($room, $participant),
'isAttendee' => $participant->isAttendee() || $spaces->isListener($room, $participant),
'usesStageLayout' => $stageLayout->usesStageLayout($room),
'stageConfig' => $stageLayout->config($room),
]);
}
@@ -241,7 +245,7 @@ class MeetingRoomController extends Controller
->limit(20)
->get();
return response()->json([
return response()->json(array_merge([
'participants' => $session->participants->map(
fn ($p) => ParticipantPresenter::toArray($p, $avatars, $session->room->host_user_ref)
),
@@ -287,7 +291,7 @@ class MeetingRoomController extends Controller
'original_name' => $f->original_name,
'file_size' => $f->file_size,
]),
]);
], app(StageLayoutService::class)->config($session->room)));
}
public function startRecording(Request $request, Session $session): JsonResponse