From 8f0658e90d59cdd6eda49c08c9b0d79cf526df1f Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 6 Nov 2025 08:41:30 +0800 Subject: [PATCH] feat(web): enhance inbox notifications and user profile layouts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Polish inbox notification items with improved visual hierarchy - Add original memo snippet with left border indicator - Redesign comment preview with gradient background and primary accent - Increase spacing and improve typography with consistent sizing - Add ring borders to avatars and refined icon badges - Enhance loading and error states with better skeleton designs - Improve hover states and transitions throughout - Redesign user profile header layout - Create full-width centered header with avatar and user info - Add horizontal layout for profile actions - Improve responsive design with proper flex wrapping - Allow memo list to use full width for masonry layout 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../components/Inbox/MemoCommentMessage.tsx | 86 +++++++++++-------- web/src/pages/UserProfile.tsx | 64 ++++++++------ 2 files changed, 87 insertions(+), 63 deletions(-) diff --git a/web/src/components/Inbox/MemoCommentMessage.tsx b/web/src/components/Inbox/MemoCommentMessage.tsx index b18bf9a20..187fe88a5 100644 --- a/web/src/components/Inbox/MemoCommentMessage.tsx +++ b/web/src/components/Inbox/MemoCommentMessage.tsx @@ -91,12 +91,13 @@ const MemoCommentMessage = observer(({ notification }: Props) => { if (!initialized && !hasError) { return ( -
+
-
-
-
-
+
+
+
+
+
@@ -105,20 +106,20 @@ const MemoCommentMessage = observer(({ notification }: Props) => { if (hasError) { return ( -
+
-
- +
+
- {t("inbox.failed-to-load")} + {t("inbox.failed-to-load")}
@@ -130,71 +131,86 @@ const MemoCommentMessage = observer(({ notification }: Props) => { return (
{/* Unread indicator bar */} - {isUnread &&
} + {isUnread &&
}
{/* Avatar & Icon */} -
- +
+
- +
{/* Content */}
{/* Header */} -
-
- {sender?.displayName || sender?.username} - commented on your memo - - · {notification.createTime?.toLocaleDateString([], { month: "short", day: "numeric" })} at{" "} +
+
+ {sender?.displayName || sender?.username} + commented on your memo + + {notification.createTime?.toLocaleDateString([], { month: "short", day: "numeric" })} at{" "} {notification.createTime?.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })}
-
+
{isUnread ? ( ) : ( )}
+ {/* Original Memo Snippet */} + {relatedMemo && ( +
+

+ Original: + {relatedMemo.content || Empty memo} +

+
+ )} + {/* Comment Preview */} {commentMemo && (
- -

- {commentMemo.content || Empty comment} -

+
+ +
+
+

Comment

+

+ {commentMemo.content || Empty comment} +

+
)} diff --git a/web/src/pages/UserProfile.tsx b/web/src/pages/UserProfile.tsx index 0a2110ac1..27addd638 100644 --- a/web/src/pages/UserProfile.tsx +++ b/web/src/pages/UserProfile.tsx @@ -64,39 +64,47 @@ const UserProfile = observer(() => { }; return ( -
-
- {!loadingState.isLoading && - (user ? ( - <> -
-
-
- -
-

- {user.displayName || user.username} -

-

{user.description}

+ {user.description && ( +
+

{user.description}

-
- ( - - )} - listSort={listSort} - orderBy={orderBy} - filter={memoFilter} - /> - - ) : ( -

Not found

- ))} -
+ )} +
+ + {/* Memo list - full width for proper masonry layout */} + ( + + )} + listSort={listSort} + orderBy={orderBy} + filter={memoFilter} + /> + + ) : ( +
+

Not found

+
+ ))}
); });