White-label live classroom orchestration for Laravel: sessions, waiting rooms, moderation, attendance, polls, breakouts, whiteboards, recordings, and provider abstraction.
Embeddable live classrooms for Laravel and modern education platforms — video meetings, teacher controls, whiteboards, attendance, recordings, polls, breakout rooms, and provider-based WebRTC integrations.
composer require mohamedhekal/classbridge
php artisan vendor:publish --tag=classbridge-config
php artisan vendor:publish --tag=classbridge-migrations
php artisan migrate
composer require mohamedhekal/classbridge-livekit
Configure in .env:
CLASSBRIDGE_DRIVER=livekit
LIVEKIT_URL=wss://your-livekit-host
LIVEKIT_API_KEY=...
LIVEKIT_API_SECRET=...
| Package | Purpose |
|---|---|
@classbridge/sdk |
TypeScript client for session events |
@classbridge/whiteboard |
Yjs collaborative whiteboard |
classbridge-vue |
Vue 3 classroom UI |
classbridge-web-components |
Framework-agnostic <classbridge-room> |
flowchart TB
subgraph Host["Laravel host app"]
API["REST API / Filament"]
CB["ClassBridgeManager"]
SVC["Services: Session, Poll, Breakout, Whiteboard, Analytics"]
DB[(MySQL / SQLite)]
end
subgraph Providers["Classroom providers"]
Fake["Fake driver (tests)"]
LK["LiveKit driver"]
end
subgraph Clients["Clients"]
Vue["classbridge-vue"]
WC["classbridge-web-components"]
WB["@classbridge/whiteboard"]
end
API --> CB
CB --> SVC
SVC --> DB
CB --> Fake
CB --> LK
Vue --> API
WC --> API
WB --> API
LK -. webhooks .-> API
use Hekal\ClassBridge\DTOs\CreateSessionData;
use Hekal\ClassBridge\Facades\ClassBridge;
$session = ClassBridge::forTenant('org-1')->session()->create(new CreateSessionData(
title: 'Intro to Algebra',
tenantId: 'org-1',
teacherDisplayName: 'Ms. Smith',
startsAt: now()->addHour(),
));
ClassBridge::session()->schedule($session, now()->addHour());
ClassBridge::session()->openWaiting($session);
ClassBridge::session()->start($session);
$poll = ClassBridge::polls()->createPoll($session, 'Ready to begin?', ['Yes', 'Not yet']);
ClassBridge::polls()->start($poll);
ClassBridge::session()->end($session);
Default driver is fake (in-memory). Register LiveKit or custom drivers via ClassBridge::extend().
api/classbridgeCLASSBRIDGE_EMBED=true)composer test
composer analyse
composer format
MIT © Mohamed Hekal
ClassBridge brings live teaching, collaboration, engagement, and replay into any education platform—without giving up its brand or learner experience.
How can I help you explore Laravel packages today?