72 Commits

Author SHA1 Message Date
Usman Baig
20d7bdd482 fix: larger sidebar tooltips (text-sm, more padding) 2026-03-28 22:56:57 +01:00
Usman Baig
ef1cb32c51 fix: consistent group header height prevents icon shift on toggle 2026-03-28 22:54:47 +01:00
Usman Baig
3067101fec fix: tooltip uses content panel bg (neutral-950) + 100ms delay 2026-03-28 22:53:25 +01:00
Usman Baig
16fd913351 fix: increase sidebar tooltip delay to 400ms 2026-03-28 22:52:12 +01:00
Usman Baig
c7f2600460 fix: portal-based sidebar tooltips, visible when collapsed
Old tooltips were clipped by overflow-hidden on the aside.
New SidebarTooltip renders via createPortal with fixed positioning,
100ms delay, rounded-lg glass styling with border and shadow.
2026-03-28 22:48:30 +01:00
Usman Baig
62df9b3521 Revert "feat: double sidebar with icon rail + nav panel"
This reverts commit 24fb5258d5.
2026-03-28 22:27:15 +01:00
Usman Baig
24fb5258d5 feat: double sidebar with icon rail + nav panel
Rail (always visible, 56px): Pulse logo, home icon, site favicons
with quick switch, add site, notifications, profile.
Panel (collapsible, 200px): context-specific nav groups.
Site favicons in rail show ring highlight for active site.
Collapse toggle hides panel, rail stays visible.
2026-03-28 22:21:49 +01:00
Usman Baig
4c1f70655a feat: move app switcher from sidebar to breadcrumbs
Breadcrumbs now show: Pulse ▾ > Your Sites > site ▾ > Page
"Pulse ▾" opens the Ciphera apps dropdown (Drop, Auth).
Removed AppLauncher and CIPHERA label from sidebar top.
2026-03-28 21:20:09 +01:00
Usman Baig
48320c4db3 feat: move site picker from sidebar to breadcrumbs
Replaced simple breadcrumb dropdown with the full sidebar-style
site picker (search, favicons, name+domain, add new site, animation).
Removed SitePicker from sidebar and cleaned up unused props.
2026-03-28 20:57:29 +01:00
Usman Baig
45c518b3ba feat: add home sidebar nav (sites list, workspace, resources)
Three nav groups in home mode:
- Your Sites: each site with favicon, Add New Site
- Workspace: Integrations, Pricing, Workspace Settings
- Resources: Documentation (external link)

Same styling as site dashboard sidebar nav items.
2026-03-28 19:24:41 +01:00
Usman Baig
a6054469ee feat: wrap home page in DashboardShell, remove stat cards
Home page now uses the same sidebar layout as dashboard pages.
Sidebar shows simplified home mode (logo, app switcher, profile)
without site-specific nav groups. Stat cards removed — plan info
lives in settings, site count is self-evident from the list.
2026-03-28 19:12:45 +01:00
Usman Baig
0ca65a50fb fix: org switcher in sidebar uses SPA navigation instead of hard reload 2026-03-27 11:55:34 +01:00
Usman Baig
ee1196f061 fix: pass onOpenOrgSettings to UserMenu — no more page navigation for org settings 2026-03-26 11:26:38 +01:00
Usman Baig
61a106eed6 refactor: replace all legacy settings links with unified modal openers 2026-03-26 10:47:51 +01:00
Usman Baig
0cb13e08fd refactor(settings): wire all settings entry points to unified modal 2026-03-25 18:10:42 +01:00
Usman Baig
24858030ba fix: align AppLauncher with collapse toggle — pt-1.5 on both sides 2026-03-25 16:47:42 +01:00
Usman Baig
953d828cd9 fix: align collapse toggle with sidebar AppLauncher row (Dokploy-style) 2026-03-25 16:39:53 +01:00
Usman Baig
9aacd63d1d fix: collapse toggle back in glass top bar, removed from sidebar 2026-03-24 23:53:44 +01:00
Usman Baig
132afa749c fix: collapse toggle as first sidebar item, realtime stays in glass bar
Collapse icon at top of sidebar (aligned with all icons). Glass top
bar now only shows realtime indicator on the right.
2026-03-24 23:44:49 +01:00
Usman Baig
102551b1ce feat: content header with collapse toggle + realtime indicator
- New SidebarProvider context for shared collapse state
- ContentHeader visible on desktop: collapse icon left, "Live" right
- Collapse button removed from sidebar bottom (moved to header)
- Keyboard shortcut [ handled by context, not sidebar
- Realtime indicator polls every 5s, ticks every 1s for freshness
2026-03-24 22:57:41 +01:00
Usman Baig
f3d72c9841 fix: move glassmorphism to shell level, sidebar becomes transparent
Shell now has the glass treatment so sidebar and surrounding area
are one seamless surface. No more visible line between sidebar
and content panel. Desktop sidebar is transparent over the shell.
Mobile sidebar keeps its own glass since it overlays independently.
2026-03-24 22:28:18 +01:00
Usman Baig
b607a9a76e fix: site picker opens outside sidebar when collapsed
No longer expands sidebar first. When collapsed, dropdown appears
to the right of the button (like AppLauncher/UserMenu/Notifications).
When expanded, opens below the button.
2026-03-24 22:11:46 +01:00
Usman Baig
441fd9afda fix: remove border-r from desktop sidebar 2026-03-24 22:05:09 +01:00
Usman Baig
441abbd568 fix: portal site picker to document.body to avoid glass-on-glass
Dropdown now uses createPortal + fixed positioning like AppLauncher,
UserMenu and NotificationCenter. Renders over page content instead
of over the glass sidebar, so /65 opacity looks correct.
2026-03-24 22:04:16 +01:00
Usman Baig
71e98d72b4 fix: site picker dropdown matches AppLauncher glassmorphism exactly 2026-03-24 21:59:25 +01:00
Usman Baig
def483cf6d fix: site picker dropdown opacity — more opaque over glass sidebar
Glass-on-glass caused double transparency. Use bg-neutral-900/90
since this dropdown overlays the already-translucent sidebar.
2026-03-24 21:54:44 +01:00
Usman Baig
f686063f0a feat: glassmorphism sidebar matching website header treatment
- Sidebar body: bg-neutral-900/65 + backdrop-blur-3xl + saturate-150
- All borders changed to white/[0.08] and white/[0.06] dividers
- Hover states use white/[0.06] for glass consistency
- Site picker dropdown gets same glass treatment
- Search input uses bg-white/[0.04] + border-white/[0.08]
- Mobile sidebar matches desktop glass effect
2026-03-24 21:51:15 +01:00
Usman Baig
bb4861dbdc fix(settings): remove duplicate comma listener from Sidebar — modal handles it globally 2026-03-24 17:24:45 +01:00
Usman Baig
3c17895d64 feat(settings): unified settings modal with context switcher (Phase 1)
New unified settings modal accessible via `,` keyboard shortcut.
Three-context switcher: Site (with site dropdown), Workspace, Account.
Horizontal tabs per context with animated transitions.

Phase 1 tabs implemented:
- Site → General (name, timezone, domain, tracking script with copy)
- Site → Goals (CRUD with inline create/edit)
- Workspace → General (org name, slug, danger zone)
- Workspace → Billing (plan card, usage, cancel/resume, portal)
- Account → Profile (wraps existing ProfileSettings)

Phase 2 tabs show "Coming soon" placeholder:
- Site: Visibility, Privacy, Bot & Spam, Reports, Integrations
- Workspace: Members, Notifications, Audit Log
- Account: Security, Devices

Old settings pages and profile modal remain functional.
2026-03-23 20:57:20 +01:00
Usman Baig
ca2f1ce19d fix(dashboard): content panel as rounded card, sidebar border removed
- Content panel: bg-neutral-950, rounded-2xl, border, margin on top/right/bottom
- Sidebar: removed border-r — content panel's left border acts as separator
- Outer shell: bg-neutral-900 matches sidebar, creating "floating panel" effect
2026-03-23 19:59:56 +01:00
Usman Baig
9510e2da8c feat(sidebar): fix backdrop fade transition, add shimmer to SSR placeholder
Use opacity instead of bg-color swap for proper transition-opacity
animation on mobile backdrop. Add shimmer gradient to the sidebar
loading placeholder in DashboardShell.
2026-03-23 15:28:03 +01:00
Usman Baig
414e112d3d feat(sidebar): mobile exit animation, site picker entrance, hover nudge, CSS tooltips 2026-03-23 15:23:31 +01:00
Usman Baig
d6cef95c4b fix(sidebar): dynamic collapse label, favicon fallback, escape key, remove setTimeout hack 2026-03-23 15:19:52 +01:00
Usman Baig
198bd3b00f feat(sidebar): extract SidebarContent to proper React component
Convert the sidebarContent(isMobile) closure function to a proper
SidebarContent component with explicit props, enabling correct React
reconciliation for both desktop and mobile sidebar instances.
2026-03-23 15:15:28 +01:00
Usman Baig
55a08301f4 fix(build): extract FAVICON_SERVICE_URL to prevent server-side createContext error
The share/[id] layout is a server component that imported FAVICON_SERVICE_URL
from icons.tsx, pulling in the entire React icon registry and triggering
createContext on the server. Moved the constant to its own favicon.ts module.
2026-03-23 13:29:53 +01:00
Usman Baig
52906344cf feat(pagespeed): add PageSpeed page with gauges, CWV cards, chart, and diagnostics
- ScoreGauge SVG component with color-coded circular arcs
- Full page: disabled state, score overview, CWV metrics, trend chart
- Diagnostics accordion with opportunities/diagnostics/passed groups
- Mobile/desktop strategy toggle, manual check trigger
- Loading skeleton, frequency selector
2026-03-22 18:13:08 +01:00
Usman Baig
780dd464a1 feat(pagespeed): add API client, SWR hooks, and sidebar navigation
- PageSpeed API client with types for config, checks, and audits
- SWR hooks: usePageSpeedConfig, usePageSpeedLatest, usePageSpeedHistory
- GaugeIcon added to sidebar under Infrastructure group
2026-03-22 18:05:17 +01:00
Usman Baig
7bf7e5cc3d feat: glass treatment + dark-only cleanup for dashboard components and navigation 2026-03-21 19:26:25 +01:00
Usman Baig
177c33830c fix: add tooltips to notifications and profile when sidebar collapsed 2026-03-19 01:02:16 +01:00
Usman Baig
3e67af5646 fix: sidebar dropdown clipping, settings placement, and theme removal
- Add relative z-10 to sidebar aside to fix dropdowns (AppSwitcher,
  Notifications, UserMenu) rendering behind content area due to
  backdrop-blur-xl creating a stacking context
- Move Site Settings from bottom utility section into Infrastructure
  nav group where it logically belongs
- Remove ThemeToggle from sidebar (available in user settings)
- Rename Settings to Site Settings for clarity
2026-03-19 00:23:08 +01:00
Usman Baig
2fa498fb8f feat: sidebar utility items match NavLink styling
Use variant='sidebar' for ThemeToggle, NotificationCenter, and
compact UserMenu so they render with the same icon+label layout
as nav items. Fixed dropdown positioning uses fixed to escape
sidebar overflow:hidden.
2026-03-18 22:48:52 +01:00
Usman Baig
0b545eaa76 fix: align sidebar utility items with nav item layout
Use left-aligned rows with fading labels for theme, notifications,
and profile — matching the nav items pattern. Fix app switcher
alignment at top to match logo row.
2026-03-18 22:32:56 +01:00
Usman Baig
342e3705e8 fix: stack sidebar utility icons vertically
Horizontal row didn't fit in 64px collapsed sidebar. Stack theme,
notifications, and profile icons vertically like nav items.
2026-03-18 22:27:53 +01:00
Usman Baig
f1fc8facb4 feat: move utility items from header to sidebar
Move theme toggle, notifications, app switcher, and user profile from
the top header bar into the sidebar. App switcher at the top (scope
switch), utilities at the bottom. Header now only shows on mobile for
the hamburger menu.
2026-03-18 22:01:51 +01:00
Usman Baig
e8b3227dcf fix: use design system skeleton colors for favicon loading
Match the platform skeleton pattern (bg-neutral-100 dark:bg-neutral-800)
instead of the mismatched bg-neutral-200/700.
2026-03-18 21:23:41 +01:00
Usman Baig
323ed9c137 fix: add skeleton loading for favicon in site picker
Show a pulsing placeholder while the favicon loads from Google's
service instead of an empty container.
2026-03-18 21:20:08 +01:00
Usman Baig
c24a053c07 fix: remove favicon alt text to prevent Firefox flash in site picker
Firefox renders alt text while images load from Google's favicon service,
causing "Ci" to flash briefly in the 28px container before the icon appears.
2026-03-18 21:12:51 +01:00
Usman Baig
7ed04fb85c fix: load Sidebar with ssr:false — zero server-rendered content
The sidebar now uses next/dynamic with ssr:false, meaning it renders
NOTHING in the server HTML. No DOM content = no possible flash of
"Ci" or any text during SSR-to-hydration gap. The sidebar only mounts
on the client where localStorage is immediately available, so
collapsed state is correct from the very first render.
2026-03-18 19:42:14 +01:00
Usman Baig
a63dfa231e fix: render empty sidebar shell until client is ready
Previous opacity-0 approach still rendered DOM content which could
flash during SSR hydration. Now render an empty div (just border +
background, no content) at collapsed width until useEffect fires.
Then swap in the real aside with content. Zero DOM content = zero
possible flash of text or icons.
2026-03-18 18:42:36 +01:00
Usman Baig
137ab4c2ba fix: eliminate sidebar flash on page load for good
The sidebar is now invisible (opacity-0) on the initial render.
In a single useEffect: read collapsed state from localStorage,
then requestAnimationFrame to reveal (opacity-1). React batches
the state update with the reveal, so the sidebar appears at its
correct width with correct label visibility in one frame. No
intermediate states, no hydration mismatch, no transitions on load.
2026-03-18 18:39:17 +01:00