Skip to content

Feat/explore page UI#338

Merged
motirebuma merged 10 commits intomainfrom
feat/explorePage-ui
Apr 24, 2026
Merged

Feat/explore page UI#338
motirebuma merged 10 commits intomainfrom
feat/explorePage-ui

Conversation

@motirebuma
Copy link
Copy Markdown
Collaborator

  • The UI for the Explore page has been completely redesigned and refined.
  • fix the UI of the Your Profile section.
  • Enhanced the UI of the message section.
  • Refined the UI of the post detail page.
  • Updated and polished the navbar UI.

Copilot AI review requested due to automatic review settings April 24, 2026 22:19
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 24, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
quotevote Ready Ready Preview, Comment Apr 24, 2026 10:19pm

@motirebuma motirebuma merged commit 689a104 into main Apr 24, 2026
8 checks passed
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR focuses on a broad UI refresh across the dashboard experience, with the biggest shift being a new Explore page layout and updated navigation/chat/notification presentation.

Changes:

  • Redesign Explore into a multi-column layout: left notifications + filters, center feed, right chat panel (xl+).
  • Standardize avatar rendering across chat/buddy list components by moving to DisplayAvatar.
  • Update dashboard navbar/search styling and adjust several UI elements in posts/notifications/chat.

Reviewed changes

Copilot reviewed 18 out of 18 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
quotevote-frontend/src/components/Profile/ProfileHeader.tsx Adjusts z-index stacking for banner vs. profile info.
quotevote-frontend/src/components/Post/Post.tsx Removes vote button emojis; hides Follow button for owners.
quotevote-frontend/src/components/Notifications/NotificationLists.tsx Simplifies empty state UI and switches list leading visuals from avatar+badge to icon-only.
quotevote-frontend/src/components/Notifications/Notification.tsx Refactors notification popover/page header and loading skeleton styling.
quotevote-frontend/src/components/Navbars/NavSearch.tsx Makes search fully responsive-width and improves dark-mode styling.
quotevote-frontend/src/components/Chat/MessageItem.tsx Migrates message avatar rendering to DisplayAvatar.
quotevote-frontend/src/components/Chat/MessageBox.tsx Migrates chat header avatar rendering to DisplayAvatar.
quotevote-frontend/src/components/Chat/ChatTabs.tsx Renames “Groups” tab label to “Discussions”.
quotevote-frontend/src/components/Chat/ChatList.tsx Uses DisplayAvatar and normalizes avatar URL resolution via parseAvatarToUrl.
quotevote-frontend/src/components/Chat/ChatContent.tsx Removes the close control in the “no room selected” view and tweaks layout styling.
quotevote-frontend/src/components/BuddyList/BuddyListWithPresence.tsx Migrates buddy avatars to DisplayAvatar.
quotevote-frontend/src/components/BuddyList/BuddyItemList.tsx Migrates buddy item avatars to DisplayAvatar.
quotevote-frontend/src/components/Avatar.tsx Tightens image rendering guard to string src only.
quotevote-frontend/src/app/dashboard/layout.tsx Centers search in desktop navbar and changes which global actions are shown; updates mobile nav items.
quotevote-frontend/src/app/dashboard/explore/ExploreContent.tsx Implements the new Explore page structure with notifications/filters sidebar and chat panel.
quotevote-frontend/src/tests/components/Chat/MessageItem.test.tsx Adds DisplayAvatar mocking to keep MessageItem tests passing.
quotevote-frontend/src/tests/components/Chat/ChatList.test.tsx Updates tests to align with DisplayAvatar behavior.
quotevote-frontend/src/tests/app/dashboard/notifications/NotificationsPageContent.test.tsx Updates assertion to match the new empty notifications copy.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +231 to 237
const handleClearAll = useCallback(
() => updateParams({ friends: null, interactions: null, sort: null, from: null, to: null }),
[updateParams]
)

const hasDateFilter = !!(from || to)
const hasAnyFilter = interactions || friends || sortOrder !== '' || hasDateFilter || !!q
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

“Clear all” is shown when hasAnyFilter is true, but hasAnyFilter includes the search query (q) while handleClearAll does not clear q. This makes the button ineffective when the only active filter is search (and it can also stay visible after clearing). Either include q: null in handleClearAll, or exclude q from hasAnyFilter if search isn’t intended to be cleared here.

Copilot uses AI. Check for mistakes.
Comment on lines +101 to +116
{/* Sort order */}
<div className="space-y-2">
<p className="text-xs font-medium text-muted-foreground uppercase tracking-wider">Sort</p>
<div className="space-y-2">
{sortOptions.map(({ value, label }) => (
<label key={value} className="flex items-center gap-2.5 cursor-pointer group">
<Checkbox
checked={sortOrder === value}
onCheckedChange={() => onSortChange(value)}
id={`sort-${value || 'default'}`}
/>
<span className="text-sm text-foreground/80 group-hover:text-foreground transition-colors select-none">
{label}
</span>
</label>
))}
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The sort selector is implemented as a list of independent checkboxes but is being used as a mutually-exclusive choice. This is confusing for assistive tech (and makes it hard to express the intent of a single selection). Use a radio group / segmented control for sort, or at minimum ensure the interaction matches checkbox semantics (including allowing uncheck to clear the sort).

Copilot uses AI. Check for mistakes.
Comment on lines 51 to 53
<Users2 className="h-4 w-4 transition-transform duration-200" />
<span>Groups</span>
<span>Discussions</span>
{groupCount > 0 && (
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This tab label change (“Groups” → “Discussions”) will break existing tests and any UI code relying on the visible text (e.g., ChatContent.test.tsx uses getByText('Groups')). Update the affected tests/selectors (prefer stable data-testid/aria-labels over visible text) to keep CI green and reduce brittleness going forward.

Copilot uses AI. Check for mistakes.
Comment on lines 222 to 250
@@ -243,29 +246,6 @@ export default function DashboardLayout({
<span>Create</span>
</button>

{/* Notifications */}
<Link href="/dashboard/notifications" className="outline-none" aria-label="Notifications">
<IconBtn
label={unreadCount > 0 ? `Notifications (${unreadCount} unread)` : 'Notifications'}
badge={unreadCount}
badgeColor="red"
active={isActive('/dashboard/notifications')}
>
<Bell className="size-5" fill={isActive('/dashboard/notifications') ? 'currentColor' : 'none'} />
</IconBtn>
</Link>

{/* Messages */}
<IconBtn
label="Messages"
badge={unreadChat}
badgeColor="green"
active={chatOpen}
onClick={() => setChatOpen(!chatOpen)}
>
<MessageSquare className="size-5" fill={chatOpen ? 'currentColor' : 'none'} />
</IconBtn>

{/* Avatar dropdown */}
{loggedIn && (
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Desktop navbar no longer provides any navigation to Notifications (/dashboard/notifications) or a way to open the chat panel. The avatar dropdown also doesn’t include these items, so on desktop these screens become effectively unreachable except via deep links. Consider adding back the bell/chat actions (or adding entries in the account dropdown) to preserve access.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants