Required Type dropdown (general|work|report|discuss|triage|custom) in the
create-channel modal; sends xType; shows type badge on channel rows.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- full design system rewrite (dark theme, system tokens)
- chat shell: server rail / channel sidebar / message area / members
- message rows with avatars, author + time; empty/loading states
- login screen redesign; add-guild moved to a modal
- removed debug v1/v2/v4 panel toggles; members toggle in topbar
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Guild access tokens (15-min TTL) are persisted in localStorage but were
never refreshed on page (re)load - only the center token was. After the
TTL elapsed, GET /channels failed with 401 ('Failed to load channels').
Re-issue guild tokens via refreshGuilds() on mount and reload channels
when the guild token changes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- create-channel modal: Public checkbox (default off), self excluded from
member list (creator auto-added), shows member display names
- Settings modal to edit your own display name
- members panel shows names and marks (you)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- createChannel falls back to selectedGuildId when guildDbId is unknown,
so the first channel of a guild can be created (no chicken-and-egg)
- channel is created under the currently selected guild
- errors now show in a dismissible modal instead of the Messages pane
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>