All voice channels sit under one non-collapsible "Voice" heading below every text channel (BufferList.tsx:602-603, VoiceChannels.tsx:37); the heading lacks the category heading's weight (app.css:4735 vs 4636).
Voice rows are full-width and square with 2px/8px padding (4747) while text rows have a 4px margin, 5px/8px padding and 8px radius (265-275).
VoiceMember has avatarUrl, muted, deafened (wire.ts:239-251) but members are drawn as a name-hash coloured dot with no mute/deafen icons and no speaking indicator (VoiceChannels.tsx:68-91).
Fix: member avatars, mute/deafen icons and a green speaking ring; rows styled like text rows; collapsible heading.
Part of the v1.0 UI pass.
- All voice channels sit under one non-collapsible "Voice" heading below every text channel (BufferList.tsx:602-603, VoiceChannels.tsx:37); the heading lacks the category heading's weight (app.css:4735 vs 4636).
- Voice rows are full-width and square with 2px/8px padding (4747) while text rows have a 4px margin, 5px/8px padding and 8px radius (265-275).
- `VoiceMember` has `avatarUrl`, `muted`, `deafened` (wire.ts:239-251) but members are drawn as a name-hash coloured dot with no mute/deafen icons and no speaking indicator (VoiceChannels.tsx:68-91).
**Fix:** member avatars, mute/deafen icons and a green speaking ring; rows styled like text rows; collapsible heading.
_Part of the v1.0 UI pass._
Salastil
added this to the v1.0 milestone 2026-10-07 20:43:07 -04:00
Before (left) and after (right), a staged call with four people in the channel you are in:
Faces instead of coloured dots - each member's picture (the daemon already sent avatarUrl; it was never drawn) or their initial.
Muted and deafened marks (mic-off, headset-off) beside the name, from the muted / deafened fields that were being ignored.
A green ring on whoever is speaking, from the daemon's levels, polled five times a second while you are in the call and the window is showing. From outside a call there are no levels to read, so the list says who is here and nothing more.
The "Voice" heading is collapsible like a category (remembered, with the channel you are in staying visible when folded), and the channel rows are the same shape as a text channel's (margin, padding, radius).
(The disconnect-button nesting bug in this list was #274.)
Checked against staged data and a test-only override for the speaking set; not against a live Discord call (receive-only account), so the ring's threshold (a peak above 0.01) is worth a look on the next real call.
Finished: [843288d](https://git.salastil.com/Salastil/moho/commit/843288d61a9a99920749e66f8206e2c73dce5c8e).
Before (left) and after (right), a staged call with four people in the channel you are in:

- **Faces instead of coloured dots** - each member's picture (the daemon already sent `avatarUrl`; it was never drawn) or their initial.
- **Muted and deafened marks** (mic-off, headset-off) beside the name, from the `muted` / `deafened` fields that were being ignored.
- **A green ring on whoever is speaking**, from the daemon's levels, polled five times a second while you are in the call and the window is showing. From outside a call there are no levels to read, so the list says who is here and nothing more.
- **The "Voice" heading is collapsible** like a category (remembered, with the channel you are in staying visible when folded), and the channel rows are the same shape as a text channel's (margin, padding, radius).
- (The disconnect-button nesting bug in this list was #274.)
Checked against staged data and a test-only override for the speaking set; **not against a live Discord call** (receive-only account), so the ring's threshold (a peak above 0.01) is worth a look on the next real call.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
VoiceMemberhasavatarUrl,muted,deafened(wire.ts:239-251) but members are drawn as a name-hash coloured dot with no mute/deafen icons and no speaking indicator (VoiceChannels.tsx:68-91).Fix: member avatars, mute/deafen icons and a green speaking ring; rows styled like text rows; collapsible heading.
Part of the v1.0 UI pass.
Finished: 843288d.
Before (left) and after (right), a staged call with four people in the channel you are in:
avatarUrl; it was never drawn) or their initial.muted/deafenedfields that were being ignored.Checked against staged data and a test-only override for the speaking set; not against a live Discord call (receive-only account), so the ring's threshold (a peak above 0.01) is worth a look on the next real call.