feat: username reset, system-message UX, meetings polish, sidebar identity

- auth: forgot-password now has Email/Username tabs; new public
  /api/auth-helpers/reset-by-username resolves a username and hands off to the
  existing reset flow (real email or admin-notify fallback)
- messages: conversations expose isSystem; System notices are read-only (no
  composer, no call button) and styled distinctly (shield icon + badge)
- meetings: compact, larger control bar; self tile shows real initials and an
  avatar (not black) when the camera is off; delete-room UI with confirm
- sidebar: username-only accounts show @username instead of a synthetic email

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Khalid Abdi
2026-06-20 22:39:48 +03:00
parent 90e6ec4cc0
commit b74d5d2d05
12 changed files with 343 additions and 97 deletions
+4
View File
@@ -145,10 +145,14 @@ async function buildSummaries(
: (others[0]?.name ?? "Conversation"));
const lastMessage = lastByConv.get(b.convId) ?? null;
const unreadCount = unreadByConv.get(b.convId) ?? 0;
// A one-way System notice (e.g. forgot-password alerts): the reserved system
// user is a participant. The UI hides the composer/call and styles it apart.
const isSystem = participants.some((p) => p.id === SYSTEM_USER_ID);
return {
id: b.convId,
name: displayName,
isGroup: b.isGroup,
isSystem,
participants,
lastMessage,
unread: unreadCount > 0,