# Portal Layout Redesign **Date:** 2026-03-06 **Status:** Approved ## Problem The portal has a double-header issue: a top Header bar (notifications + profile) and a PageLayout page header (title + actions) stack directly, creating two competing bars with different backgrounds and borders. The sidebar already provides navigation context, making the top header redundant. ## Decisions 1. **Remove the top Header bar entirely on desktop** -- sidebar handles everything 2. **Move profile into sidebar top** -- compact profile row below the logo 3. **Notification bell in the profile row** -- reuse existing NotificationBell component, styled for sidebar context 4. **PageLayout keeps subtle bg, drops the border** -- `bg-muted/40` stays, `border-b` removed 5. **Mobile keeps a thin hamburger-only bar** -- opens sidebar overlay with full nav + profile + notifications ## Design ### Sidebar Structure ``` +---------------------+ | Logo Assist Solns | Logo + brand | Customer Portal | | +--JD--John Doe--B+ | Profile row + bell icon with badge +---------------------+ | Dashboard | | Orders | | Billing > | | Subscriptions | | Services | | Support > | | Settings | +---------------------+ | Log out | +---------------------+ ``` - Profile row: avatar initials + display name (links to /account/settings) + notification bell with badge - Bell icon uses existing NotificationBell component, restyled for white-on-dark sidebar - Separator between profile area and nav list ### PageLayout - Keep: `bg-muted/40` background on the title area - Remove: `border-b border-border` - All existing props stay: icon, title, description, actions, back link, status pill - Content flows directly below without a hard line ### Mobile - Thin top bar with hamburger + logo mark only - Opens sidebar overlay (already exists) which contains profile + bell, full nav, logout - No separate header elements on mobile ### AppShell Main Content - Desktop: no header, content starts immediately with `
` - Mobile: thin hamburger bar above `
` ## Files to Change | File | Change | | ---------------- | ------------------------------------------------------------ | | `AppShell.tsx` | Remove `
` on desktop, keep mobile-only hamburger bar | | `Header.tsx` | Simplify to mobile-only hamburger, or inline into AppShell | | `Sidebar.tsx` | Add profile row with bell below logo | | `PageLayout.tsx` | Remove `border-b border-border` from page header | ## What Stays the Same - Sidebar colors, width (220px), collapse behavior - All page content structure - Mobile sidebar overlay animation - Auth flow, prefetching, sidebar expansion persistence - All existing PageLayout props and usage patterns - NotificationBell component logic (just restyled)