BarBot Dashboard
Room-first operator surface for listeners, MCs, server owners, and developers.
- Player and live word hero
- Voice, queue, history, and catalogue
- Cypher rotation and server settings
Two coordinated pull requests turn the dashboard and BarBotJS into one live Discord cypher workspace: music, words, voice-room context, queue, catalogue, and rotation state working across the same contract.
The dashboard owns interaction and presentation. BarBotJS owns authoritative runtime state and mutations. Discord, Lavalink, and Cloudflare R2 remain the execution and media layer.
Room-first operator surface for listeners, MCs, server owners, and developers.
Authoritative HTTP and WebSocket contracts, backed by the live bot runtime.
The deployed system under the API: Discord voice, Lavalink playback, and remote HTTP beats.
The PRs are independently reviewable, but the end-user result depends on both. Each card below reflects the actual branch and GitHub diff currently under review.
Delivers the approved room-first dashboard: a resizable live control console with the word as hero, unified playback workspaces, command-driven Cloudflare discovery, and stable settings.
Restores dashboard parity on the remote HTTP/Lavalink branch and adds the live contracts required by the redesigned room console.
This is the useful review lens: each customer-facing capability mapped to the UI that exposes it and the BarBotJS contract that makes it real.
| Capability | Dashboard delivery | BarBotJS delivery | Status |
|---|---|---|---|
| Live word | Hero card above the console, responsive word sizing, current-turn identity, FreeFlow state. | Publishes generated-word state and keeps HTTP/WebSocket consumers synchronized. | Delivered |
| Voice room | Connected room, current user room, approved destinations, join/disconnect, listener and bitrate context. | Guild voice context, available channel metadata, connection and disconnection mutations. | Delivered |
| Playback | Live track metadata, duration, seek, volume, pause/resume, previous/next, responsive player layout. | Remote HTTPS sources, authoritative Lavalink pause/position/duration state, legacy compatibility fields. | Delivered |
| Queue + history | Unified tabs, track duration and requester, reorder, play now, remove, shuffle, and clear. | Queue mutation ordering, runtime synchronization, playback history, and requested-by provenance. | Delivered |
| Catalogue | Search command bar, contextual autocomplete, expandable filters, comboboxes, tempo/duration ranges. | Cloudflare discovery filters, key/mood/genre/BPM/duration/order, pagination, and identical-read caching. | Delivered |
| Cypher | Live rotation workspace, metrics, participants, join/leave, words/rules, stable actions and FreeFlow. | Unified rotation/current-user state, persisted limits, non-blocking join/leave, mutation semantics. | Delivered |
| Settings | Stable-height navigable settings shell with contained scrolling and retained destinations. | Typed configuration contracts and persisted cypher settings. | Delivered |
| Auth + lifecycle | Local auth bootstrap, restored OAuth navigation, bounded WebSocket retries, unmount cleanup. | JWT/session middleware and compatibility helpers used by dashboard routes. | Delivered |
The incremental history is intentional: it preserves the progression from transport and parity work through the approved interaction model and final adversarial hardening.
The evidence is deliberately split by repository. GitHub currently reports no configured status checks, so the command-level validation recorded in each PR is the authoritative test record.
npm test -- --run passed. TypeScript checking and the Vite production build passed. Added-line whitespace audit was clean.
npm test passed. The TypeScript production build passed using Node v22.22.2 and npm 10.9.7.
Independent product/UX and runtime/API reviewers examined the complete dashboard diff. Blocking findings were fixed in 48289602 and 2eff1cbc. Final verification reported no new P0–P2 findings.
Earlier Docker/Lavalink/Discord validation against SenseiBaruBoto confirmed Cloudflare track metadata, actual pause/resume playback, and persistent cypher join/leave. Local and deployed compose playback were smooth during the network diagnosis pass.
The most useful review is not “does every file look reasonable?” It is whether the dashboard and API agree while the live bot changes state underneath them.
These are explicit review or contract decisions, not hidden omissions. They are recorded here so the project history remains useful after the PRs move on.
/voice/listeners with the dashboard’s richer listener model and verify voice-route permissions for regular Discord guild owners and administrators, not only the development role path.music.track_ended handler once the event is owned end to end, and consolidate unused legacy word-response types.