feat: user profile customization with banner, accent color, bio, and full profile modal

Add banner image, accent color, and bio fields to user profiles with
full-stack support: schema migration, API validation (hex color format,
190-char bio limit), sanitizeUser propagation, and new GET /users/:id/mutuals
endpoint. Rewrite AccountPanel with live preview card, avatar/banner upload
via ImageCropModal, 16-preset accent color picker, and bio editor. Enhance
UserProfilePopout with banner display, accent-colored names, bio rendering,
and mutual counts. Add new UserProfileModal with About/Mutual Friends/Mutual
Spaces tabs and friend action buttons.
This commit is contained in:
Jannis Braun
2026-03-10 17:08:29 +01:00
parent 88bfc17580
commit 003eff2268
16 changed files with 1066 additions and 72 deletions
@@ -33,6 +33,9 @@ export function ActivityPanel() {
username: friend.username,
displayName: friend.displayName,
avatar: friend.avatar,
banner: friend.banner,
accentColor: friend.accentColor,
bio: friend.bio,
status: friend.status,
customStatus: friend.customStatus,
createdAt: friend.createdAt,
@@ -15,6 +15,7 @@ import { SpaceSettingsModal } from '../modals/SpaceSettings';
import { ChannelSettingsModal } from '../modals/ChannelSettingsModal';
import { NewDmModal } from '../modals/NewDmModal';
import { AddDmMemberModal } from '../modals/AddDmMemberModal';
import { UserProfileModal } from '../modals/UserProfileModal';
import { IncomingCallModal } from '../voice/IncomingCallModal';
import { PictureInPicture } from '../voice/PictureInPicture';
import { SoundController } from '../voice/SoundController';
@@ -276,6 +277,7 @@ export function AppLayout() {
<ChannelSettingsModal />
<NewDmModal />
<AddDmMemberModal />
<UserProfileModal />
<IncomingCallModal />
<ImagePreview />
<PictureInPicture />