Meeting & Huddle
Real-time video conferencing — WebRTC calls, screen sharing, in-meeting chat, and quick actions from any channel.
Overview
Meeting & Huddle is TotalApp's real-time video conferencing screen. It opens directly from a Collab Chat channel huddle button, establishing a peer-to-peer WebRTC call between all participants in that channel. Each participant sees live video tiles, can control their own mic and camera, share their screen, and collaborate through a side drawer with in-meeting chat, quick action creation, and a live people roster.
Real WebRTC Video
Connects real browser media streams (camera + microphone) through a signaling server. Remote participants appear as live video tiles — no mock data. The grid scales from 1-up to 4-column depending on participant count.
Media Controls
Toggle your microphone and camera independently at any time during a call. A MicOff icon appears in the participant's name bar when their mic is off. Camera-off participants show their avatar initials instead of video.
Screen Share
Share your entire screen, a window, or a browser tab. The screen share stream replaces your camera tile with a monitor icon indicator. Other participants see your shared screen as a live video tile.
In-Meeting Chat
A full chat panel inside the meeting drawer — send messages without leaving the video grid. Unread message count appears as a badge on the Chat control button. Press Enter to send; Shift+Enter for a new line.
Quick Actions
Create a task, note, or workflow automation directly from the meeting via the Actions drawer tab — or use the command bar with /task, /note, or /flow slash commands. Actions are timestamped and listed in the activity feed.
People Roster
The People tab shows every live participant with their name, mic status, and camera status. Hover a participant row to see additional controls. Invite new participants directly from the roster.
Channel Chat System Messages
When a huddle starts or ends, a system message is posted to the Collab Chat channel — "Call started by Name" and "Call ended by Name" — so team members who weren't in the call can see the activity in the channel timeline.
Auto-Leave on Peer Disconnect
When all remote participants leave, the local user is automatically returned to the Collab Chat screen. This prevents a user from sitting alone in an ended call unaware that others have left.
Starting a Meeting
- Navigate to Collaboration → Collab Chat.
- Select the channel you want to call in. The call will be scoped to that channel's room — only people in the same channel room can join.
- Click the Video Call button () in the channel header toolbar.
- The Meeting & Huddle screen opens full-screen. Your browser will prompt for camera and microphone permission if not already granted.
- A "Call started by You" system message appears in the channel chat so other members know a call is active.
- Other channel members see the huddle indicator in the channel list. They can join by clicking the same Video Call button in that channel.
Browser Permission Required
Your browser must grant camera and microphone access. If you deny the permission prompt, you can join the call with audio-only or camera-off — your avatar will show instead of a video tile. Grant permissions in your browser's address bar settings and rejoin.
Video Grid
The main area of the meeting screen shows all participants as video tiles. The grid layout adapts automatically to the number of active participants.
| Participant count | Grid layout |
|---|---|
| 1 (you only) | Single centered tile, max 2xl width |
| 2 | 2 columns side by side |
| 3–4 | 2×2 grid |
| 5–9 | 3-column grid |
| 10+ | 4-column grid |
Tile states
- Live video — camera is on and a live video track is available. The video fills the tile.
- Camera off / no stream — the participant's coloured avatar circle with initials is centred in the tile.
- Speaking — a pulsing primary-colour ring appears around the tile border when the participant is speaking.
- Mic off — a MicOff icon appears in the bottom name bar of the tile.
Your Own Tile
Your local video tile is always muted (you hear yourself through your own speakers otherwise). The local stream uses muted on the video element so you don't get audio feedback from your own microphone.
Media Controls
The control bar at the bottom of the meeting screen contains all call management buttons.
| Button | State when active | State when off / inactive |
|---|---|---|
| Mic | Normal (mic is on, audio is live) | Rose-tinted border — MicOff icon — your audio is muted |
| Video | Normal (camera is on, video is live) | Rose-tinted border — VideoOff icon — your camera is off |
| Share | Rose active state — ScreenShareOff icon — sharing is active; click to stop |
Normal — ScreenShare icon — click to start sharing |
| Chat | Drawer opens on Chat tab; unread badge cleared | Badge shows unread message count (up to 99+) |
| Actions | Drawer opens on Actions tab | — |
| People | Drawer opens on People tab | — |
| End Call | — | Rose-filled — leaves the call and returns to Collab Chat; posts "Call ended" system message |
Toggling the same drawer tab that is already open closes the drawer. Switching to a different tab while the drawer is open switches the tab without closing it.
Side Drawer
The right-side drawer has three tabs: Chat, Actions, and People.
Chat tab
An in-meeting chat for text messages during the call. Messages show the sender's avatar, name (for others), and timestamp. Your own messages appear on the right in a primary-tinted bubble.
- Press Enter to send. Press Shift+Enter for a new line.
- Emoji and file attachment buttons are available in the composer (these open browser native pickers).
- The chat is session-scoped — messages are not persisted after the call ends.
- Unread count badge appears on the Chat control button when the drawer is closed or on a different tab.
Actions tab
Create work items directly from the meeting without switching screens.
| Action type | Button / Command | Icon color |
|---|---|---|
| New Task | Button or /task <name> |
Indigo (primary) |
| New Note | Button or /note <name> |
Amber |
| New Workflow | Button or /flow <name> |
Emerald |
Created actions appear in the activity feed below the quick-action buttons, tagged with the channel name and the time they were created. The feed shows the last 5 actions.
The command bar at the bottom of the Actions tab accepts slash commands: type /task Meeting recap and press Enter to create a task labelled "New Task: #channel-name".
People tab
Shows a live roster of all participants currently in the call. Each row shows:
- Coloured avatar with initials
- Display name (with "(you)" label on your own entry)
- Mic and camera status icons (visible on hover)
- Three-dot menu for participant options (on remote participants)
The Invite button at the top of the People tab lets you add new participants to the call.
Channel System Messages
The Meeting & Huddle screen posts automatic system messages to the originating Collab Chat channel at two moments:
| Event | Message posted to channel | Trigger |
|---|---|---|
| Call started | "📞 Call started by [Your Name]" | When the video call button is clicked in the channel header |
| Call ended | "📵 Call ended by [Your Name]" | When End Call is clicked (or the last peer disconnects) |
These messages appear in the channel timeline with a distinct isCall styling (phone icon, muted text colour, no avatar) so they are visually distinct from regular chat messages. They are visible to all channel members, including those who did not join the call.
Auto-Leave Behaviour
When all remote participants leave the call, the Meeting screen detects that the peer count has dropped to zero after previously having at least one peer, and automatically calls the leave handler — returning the local user to Collab Chat and posting the "Call ended" system message.
Why this matters
Without auto-leave, a user would remain in the Meeting screen alone after the other party hangs up, with no indication the call has ended. The auto-leave ensures the screen always returns to Chat when the call is over, regardless of who clicked End Call first.
The detection works with a hadPeersRef flag: the ref is set to true the first time remoteStreams.length > 0. When remoteStreams drops back to zero while hadPeersRef.current is true, leave is triggered. This prevents auto-leave from firing on initial load (before any peer has connected).
FAQ
/note) during the call — those are timestamped in the activity feed.useWebRTC hook is tied to the Meeting screen component. If you use the TotalApp sidebar or header to switch to another screen, the WebRTC connections are dropped and the call effectively ends — the other participants will see you disconnect. Always click End Call to leave cleanly and post the "Call ended" system message.