mohamedhekal / classbridge
Unified Laravel classroom abstraction for live sessions, participants, permissions, and recordings
Requires
- php: ^8.2
- illuminate/contracts: ^11.0|^12.0
- illuminate/database: ^11.0|^12.0
- illuminate/events: ^11.0|^12.0
- illuminate/http: ^11.0|^12.0
- illuminate/routing: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
Requires (Dev)
- laravel/pint: ^1.18
- orchestra/testbench: ^9.0|^10.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- phpstan/phpstan: ^2.0
README
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.
Installation
composer require mohamedhekal/classbridge php artisan vendor:publish --tag=classbridge-config php artisan vendor:publish --tag=classbridge-migrations php artisan migrate
LiveKit provider
composer require mohamedhekal/classbridge-livekit
Configure in .env:
CLASSBRIDGE_DRIVER=livekit LIVEKIT_URL=wss://your-livekit-host LIVEKIT_API_KEY=... LIVEKIT_API_SECRET=...
Frontend packages (optional)
| 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> |
Architecture
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
Loading
Quick start
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().
Features
- Session lifecycle state machine (draft → scheduled → waiting → live → ended)
- Waiting room admit/reject flows
- Signed one-time join tokens
- Role-based moderation (mute, remove, lock, promote)
- Attendance rules and finalization
- Polls, Q&A, breakout rooms, collaborative whiteboards
- Session analytics summary
- Recording start/stop/publish via provider contract
- Multi-tenant session scoping
- Optional REST API under
api/classbridge - Optional iframe embed mode (
CLASSBRIDGE_EMBED=true) - Optional Filament admin stub (when Filament is installed)
Documentation
Testing
composer test
composer analyse
composer format
License
MIT © Mohamed Hekal
Product Vision
ClassBridge brings live teaching, collaboration, engagement, and replay into any education platform—without giving up its brand or learner experience.







