Commit Graph

1085 Commits

Author SHA1 Message Date
Usman Baig
01dfa6954f fix: center site picker hover state in collapsed sidebar
Reduce all sidebar section outer padding from px-3 to px-2 so hover
backgrounds are wider and items center properly in the 64px collapsed
width. All sections now consistent: px-2 outer + px-2.5 inner.
2026-03-18 17:03:08 +01:00
Usman Baig
9773735d2b chore: bump @ciphera-net/ui to 0.2.11 2026-03-18 16:59:44 +01:00
Usman Baig
84c23faa0f style: reduce glass transparency to 90% opacity
Sidebar and content header were too transparent — content bled through.
Bump from bg-*/70 to bg-*/90 with backdrop-blur-xl for a subtle glass
effect that's still readable.
2026-03-18 16:57:34 +01:00
Usman Baig
981eaaff39 fix: center site picker hover state in collapsed sidebar
Match site picker button padding (px-2.5) with nav items so the hover
background aligns consistently. Remove title tooltip.
2026-03-18 16:55:10 +01:00
Usman Baig
b0983e5a3f style: glassy transparency on sidebar and content header
Apply the same backdrop-blur-2xl + semi-transparent bg treatment from
the AppLauncher dropdown to the sidebar and content header. Matches
the Ciphera design language: bg-white/70 dark:bg-neutral-900/70 with
supports-[backdrop-filter] progressive enhancement. Soften all borders
to /60 opacity.
2026-03-18 16:52:40 +01:00
Usman Baig
6fcb6df295 fix: widen collapsed sidebar to 64px, prevent header flash on refresh
Collapsed width 56px→64px to stop clipping site picker badge and icons.
Return null while auth is loading on site pages to prevent brief flash
of the public floating header before the sidebar layout renders.
2026-03-18 16:51:01 +01:00
Usman Baig
5c8f334017 fix: eliminate sidebar jitter on collapse/expand
Root cause: class switching (px-2↔px-3, justify-center↔gap-2.5,
conditional DOM rendering) caused instant layout jumps during the
200ms width transition.

Fix: internal layout is now 100% static — same padding, same gap,
same DOM structure in both states. Only opacity transitions on text
labels (via Label component). The sidebar overflow:hidden + width
transition handles the visual collapse. Collapse icon rotates 180deg
instead of swapping between two icons.
2026-03-18 16:45:39 +01:00
Usman Baig
5807a50092 fix: center icons in collapsed sidebar, eliminate white flash on click
Icons now use justify-center + px-0 when collapsed so they sit
perfectly centered in the 56px rail. Track pending navigation href
optimistically — clicked item shows orange immediately instead of
flashing through the inactive hover state during route transition.
2026-03-18 16:40:00 +01:00
Usman Baig
2474d6558f feat: Linear-style sidebar with explicit toggle
Rewrite sidebar from scratch: 256px expanded, 56px collapsed via
click toggle + [ keyboard shortcut. Two-phase CSS transitions (labels
fade then width contracts). Contextual ContentHeader replaces
UtilityBar (no logo, just actions). Remove framer-motion sidebar
primitive, hover-to-expand, and sidebar-context.
2026-03-18 16:33:35 +01:00
Usman Baig
db5cd4cbcb feat: replace sidebar with 21st.dev hover-to-expand component
Use framer-motion animated sidebar from 21st.dev — collapses to icons,
expands on hover. Phosphor icons instead of lucide. Remove old manual
collapse/expand and sidebar-context. Top bar has Pulse logo + user
actions, sidebar below with site picker and nav groups.
2026-03-18 16:20:32 +01:00
Usman Baig
66a70f676f fix: full-width top bar with logo, sidebar below
Restructure layout: top bar spans full width (Pulse logo left, user
actions right) with continuous bottom border. Sidebar sits below with
no vertical border collision. Remove logo from sidebar. Remove all
transition-colors from nav items to prevent white flash on click.
2026-03-18 16:12:20 +01:00
Usman Baig
d00d2e5592 fix: sidebar polish — logo, scrollbar, utility bar height, icon flash
- Fix stretched logo with object-contain
- Remove border below logo
- Add overflow-hidden to prevent scrollbar flash during transition
- Match utility bar height to old header (py-3.5)
- Remove transition-colors from active nav items to prevent white flash
2026-03-18 16:04:50 +01:00
Usman Baig
1d25368292 feat: Dokploy-style sidebar layout for site pages
Sidebar takes full viewport height with Pulse logo at top. No Header
on site pages — UtilityBar in content area provides theme toggle, app
launcher, notifications, and user menu. Non-site authenticated pages
keep static Header. No footer on dashboard pages.
2026-03-18 15:58:06 +01:00
Usman Baig
7ae5facd0c fix: proper dashboard layout — header + sidebar + content fill viewport
Use h-screen overflow-hidden on the root container for authenticated
views. Sidebar and content fill the remaining height below the header.
Remove footer from dashboard pages. Content scrolls inside its own
container, sidebar stays fixed in place.
2026-03-18 15:38:58 +01:00
Usman Baig
61ce505ee5 fix: pin sidebar to viewport with sticky positioning
Sidebar was scrolling with page content. Fix by adding sticky top-0
h-screen. Widen collapsed width to 68px to prevent icon clipping.
2026-03-18 15:34:48 +01:00
Usman Baig
80ae8311dc feat: static header + collapsible sidebar navigation
Replace floating pill header with static variant for authenticated
views. Add collapsible sidebar with site picker, grouped navigation
(Analytics/Infrastructure), and mobile overlay drawer. Remove
horizontal SiteNav tab bar.
2026-03-18 15:30:27 +01:00
Usman
9f7987fe07 Merge pull request #56 from ciphera-net/feat/funnels-v2
Funnels V2: event steps, edit UI, filters, trends, breakdowns
2026-03-18 14:41:10 +01:00
Usman Baig
94112161f0 docs: update changelog for funnels v2 2026-03-18 14:38:01 +01:00
Usman Baig
4c7ed858f7 feat(funnels): add step-level breakdown drawer with dimension tabs 2026-03-18 14:34:07 +01:00
Usman Baig
efd0c144b5 feat(funnels): add conversion trends line chart with per-step toggles 2026-03-18 14:33:25 +01:00
Usman Baig
585cb4fd88 feat(funnels): add edit funnel page with pre-populated form 2026-03-18 14:27:45 +01:00
Usman Baig
2811945d3e feat(funnels): add filter bar and exit path display to funnel detail 2026-03-18 14:26:26 +01:00
Usman Baig
18e66917d3 feat(funnels): extract reusable FunnelForm with category toggle, property filters, and conversion window 2026-03-18 14:23:25 +01:00
Usman Baig
d5b594d6f9 feat(funnels): update frontend types and API client for funnels v2 2026-03-18 14:20:15 +01:00
Usman
ff58ba5953 Merge pull request #55 from ciphera-net/staging
feat: soft-delete sites with 7-day grace period
2026-03-18 11:26:59 +01:00
Usman Baig
311f546261 fix: improve code quality in soft-delete frontend (loading state, imports, confirm dialog) 2026-03-18 11:15:14 +01:00
Usman Baig
ad1c8c5420 fix: address spec compliance gaps in soft-delete frontend 2026-03-18 11:15:14 +01:00
Usman Baig
51723bea5d feat: replace prompt() delete with DeleteSiteModal on settings page 2026-03-18 11:15:14 +01:00
Usman Baig
d7f374472a feat: integrate delete modal and soft-deleted sites list on dashboard 2026-03-18 11:15:14 +01:00
Usman Baig
7a0f106bc3 feat: add DeleteSiteModal with soft-delete and permanent-delete options 2026-03-18 11:15:14 +01:00
Usman Baig
10ad276c38 feat: add soft-delete API functions and deleted_at to Site type 2026-03-18 11:15:14 +01:00
Usman Baig
e4fa320b39 Merge remote-tracking branch 'origin/main' into staging 2026-03-17 23:10:11 +01:00
Usman Baig
78fed269db fix: replace developer jargon with user-friendly labels in visitor identity settings
Storage/TTL labels used implementation terms (localStorage, sessionStorage, TTL)
that only make sense to developers. Replaced with plain language and added a
description explaining the privacy trade-off.
2026-03-17 23:07:11 +01:00
Usman Baig
90944ce6bd fix: use screen.width fallback in trackCustomEvent to prevent bot filter false positives
window.innerWidth is 0 in hidden/minimized tabs, causing the heuristic bot
scorer (added in #40) to drop legitimate custom events with a score of 5.
Use window.screen.width as fallback, matching the existing trackPageview logic.
2026-03-17 22:32:56 +01:00
Usman Baig
d97818dfd7 fix: use screen.width fallback in trackCustomEvent to prevent bot filter false positives
window.innerWidth is 0 in hidden/minimized tabs, causing the heuristic bot
scorer (added in #40) to drop legitimate custom events with a score of 5.
Use window.screen.width as fallback, matching the existing trackPageview logic.
2026-03-17 22:32:45 +01:00
Usman
fa9fa26a1f Merge pull request #54 from ciphera-net/staging
chore: bump @ciphera-net/ui to ^0.2.8
2026-03-17 22:27:59 +01:00
Usman Baig
3aaf199a19 chore: bump @ciphera-net/ui to ^0.2.8 2026-03-17 19:47:54 +01:00
Usman
431128f4ad Merge pull request #53 from ciphera-net/staging
Slim tracking script: send raw browser state, let server handle normalization
2026-03-17 12:35:57 +01:00
Usman Baig
dedb55b113 docs: add thin client changes to changelog 2026-03-17 12:32:53 +01:00
Usman Baig
c833a759f4 refactor: slim tracking script, move logic server-side 2026-03-17 12:28:23 +01:00
Usman
553b44328e Merge pull request #52 from ciphera-net/staging
BunnyCDN, Search tab, journeys redesign, and dashboard polish
2026-03-17 11:08:26 +01:00
Usman Baig
81e2e8bd6c chore: consolidate unreleased changelog entries
Merge duplicate section headers, remove duplicate visit duration entry,
trim granular sub-features into parent entries, and reorder sections to
follow Keep a Changelog convention (Added → Improved → Removed → Fixed).
2026-03-17 11:03:17 +01:00
Usman Baig
109aca62c0 docs: add bot filtering and script improvements to changelog 2026-03-17 10:24:44 +01:00
Usman Baig
e7ebe2a923 refactor: remove client-side 0x0 screen check, handled server-side
IsSuspiciousEvent already scores 0x0 screens as +5 (bot threshold).
Keeping the check client-side hides bot traffic from analysis and
is trivially bypassable.
2026-03-17 10:20:52 +01:00
Usman Baig
ebd25770b4 revert: remove client-side bot detection from tracking script
Server-side heuristic scoring already catches these patterns via
IsSuspiciousEvent. Client-side checks are trivially bypassable
(script is public) and add payload weight for all real users.
2026-03-17 10:19:29 +01:00
Usman Baig
d45d39aa60 feat: add client-side headless browser detection
Skip events from headless Chrome (empty plugins, missing chrome
runtime), hidden browsers (zero outer dimensions), and known bot
viewports (1024x1024).
2026-03-17 10:17:21 +01:00
Usman Baig
01222bf0a9 fix: bump dark mode inline bar opacity from 25% to 40% — less brown, more orange 2026-03-16 23:14:07 +01:00
Usman Baig
1ba6f6609d fix: step numbering starts at 1 after Entry column 2026-03-16 22:27:11 +01:00
Usman Baig
b16f01bd7f fix: rename Step 1 to Entry in columns view, max depth to 6 2026-03-16 22:08:14 +01:00
Usman Baig
52427fea93 fix: change journey depth default to 4, max to 5 2026-03-16 22:02:29 +01:00