Implement conference breakouts with meeting mode and programme lineup UI.
Deploy Ladill Meet / deploy (push) Successful in 1m3s

Attendees reconnect to breakout rooms with publish access while hosts stay on stage; poll and media-token endpoints drive LiveKit reconnection, and the live room shows Events-linked programme when available.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-02 00:06:45 +00:00
co-authored by Cursor
parent e698e75f17
commit fa9b4138af
8 changed files with 545 additions and 22 deletions
+32 -1
View File
@@ -40,7 +40,10 @@ class BreakoutService
]));
}
$participants = $session->participants()->where('status', 'joined')->get();
$participants = $session->participants()
->where('status', 'joined')
->whereNotIn('role', ['host', 'co_host'])
->get();
if ($assignments) {
foreach ($assignments as $assignment) {
@@ -95,6 +98,34 @@ class BreakoutService
BreakoutAssignment::whereIn('breakout_room_id', $session->breakoutRooms()->pluck('id'))->delete();
}
public function hasActiveBreakouts(Session $session): bool
{
return $session->breakoutRooms()->where('status', 'open')->exists();
}
public function closeExpired(Session $session): bool
{
if (! $session->breakoutRooms()->where('status', 'open')->where('closes_at', '<=', now())->exists()) {
return false;
}
$this->closeAll($session);
return true;
}
public function isInActiveBreakout(Participant $participant): bool
{
if (! $participant->breakout_room_id) {
return false;
}
return BreakoutRoom::query()
->where('id', $participant->breakout_room_id)
->where('status', 'open')
->exists();
}
public function mediaRoomForParticipant(Participant $participant): string
{
if ($participant->breakout_room_id) {