Control Room module — standalone Vue 3 SPA, status: 🟢 ACTIVE. Extracted from the legacy Nuxt monolith (already removed): there are no legacy sources left to maintain, all the code has been ported here.
Stack
| Component | Technology |
|---|---|
| Framework | Vue 3 (Composition API) |
| CSS Framework | Tailwind CSS ^4.x |
| Build | Vite |
| Language | TypeScript |
| Communication | WebSocket (useWsRegia → /ws/regia) + REST fallback |
Pages
| Page | Feature | What it does |
|---|---|---|
| Dashboard | / | Summary: online devices, active links, WS connection status, current event |
| Streams | /streams | View of the 3 slots (MAIN/FEED/ALT) with stream name, URL, ON AIR status. "Free stream" button to remove an active link |
| Links | /links | Full CRUD of streaming links. Activate/block/unblock links on the various slots |
| Devices | /devices | List of connected iPads, heartbeat, rename, delete |
| Events | /events | Event management: create, edit, delete, push event to devices |
| License | /license | License status: client, expiry, days remaining, time bar, revoke |
Components
| Component | Feature | What it does |
|---|---|---|
| LinkPanel | Link management | Card for each link with name, URL, slot, status (active/blocked/inactive). Buttons: Activate on slot, Free, Block/Unblock, Ping 📡 |
| DevicePanel | Device management | Card for each iPad with name, IP, last heartbeat, status. Buttons: Rename, Delete, Restart all, MAIN/FEED/ALT slot controls (▶ ⏹ 🔄) |
| EventPanel | Event management | Event create/edit form, Push and Terminate buttons |
| ConfirmModal | Confirmation | Generic modal for destructive actions (delete, block, revoke) |
| Sidebar | Navigation | Side menu with icons for each page: Dashboard, Streams, Links, Devices, Events, License |
| Connection status | WS status | Visual indicator in the header: green (connected), red (disconnected), yellow (reconnecting) |
Real-time interactions
| Feature | What it does |
|---|---|
| Live WS status | Every change to links/devices/events instantly propagates to all open Control Room browsers |
| Link ping | Tests the reachability of a stream URL with visual feedback (time in ms or ERR) |
| Remote slot control | From the Control Room you can stop/restart a stream on a specific iPad |
| Device reset | Restarts all 3 streams on an iPad without restarting the app |
Future evolution
- Full dashboard → Split pages, ON AIR/STANDBY status, device health
- Microservices → Integration with an API Gateway post-production