Commit Graph

223 Commits

Author SHA1 Message Date
Usman Baig
76248233b9 fix: revalidate funnels list after creating a new funnel
Mutate the SWR funnels cache key before navigating back so the
list page shows the newly created funnel without requiring a refresh.
2026-03-15 18:38:51 +01:00
Usman Baig
220d3905be fix: use 0-based step order when creating funnels
Backend expects sequential order starting from 0 (0, 1, 2, ...),
but the frontend was sending 1-based order (1, 2, 3, ...).
2026-03-15 18:33:30 +01:00
Usman Baig
6d6c1ee8f6 fix: prevent grid children from overflowing on mobile
Add [&>*]:min-w-0 to lg:grid-cols-2 grids so widget cards
respect the grid track width instead of expanding to content size.
2026-03-15 18:20:08 +01:00
Usman Baig
24c71f7991 fix: mobile responsiveness across all pages
- SiteNav: add horizontal scroll for 8 tabs on mobile
- NotificationCenter: full-width dropdown on mobile
- ContentStats/Locations/TechSpecs: scrollable tab bars
- FrustrationTable: fix selector text overflow
- FrustrationByPageTable: horizontal scroll on mobile
- CDN: better stat card grid breakpoints
- Home: reduce stat card height, prevent button wrap
- Billing: shorter invoice labels on mobile
- Bump @ciphera-net/ui to 0.2.6 (AppLauncher mobile fix)
2026-03-15 18:15:06 +01:00
Usman Baig
e7907d68bf fix: default depth 10, bar rounding, exit row height, connection line reach 2026-03-15 13:39:41 +01:00
Usman Baig
e8f00e06ec feat: replace sankey chart with column-based journey visualization 2026-03-15 12:17:48 +01:00
Usman Baig
7e30d04df3 feat: redesign top paths as breadcrumb cards with icons 2026-03-15 11:47:52 +01:00
Usman Baig
47d884e47b fix: remove focus ring from depth slider, debounce API calls until drag ends 2026-03-15 11:43:04 +01:00
Usman Baig
f858bb7811 refactor: remake journeys page with pricing-style slider, remove top paths table 2026-03-15 11:39:33 +01:00
Usman Baig
302e683b32 feat: increase journey depth slider max from 5 to 10 2026-03-15 11:27:18 +01:00
Usman Baig
b305b5345b refactor: remove performance insights (Web Vitals) feature entirely
Remove Performance tab, PerformanceStats component, settings toggle,
Web Vitals observers from tracking script, and all related API types
and SWR hooks. Duration tracking is preserved.
2026-03-14 22:47:33 +01:00
Usman Baig
7247281ce2 feat: move performance to dedicated tab, fix 0/99999 metrics bug
Performance metrics moved from dashboard into a new Performance tab.
Fixed null handling so "No data" shows instead of misleading zeros.
Script no longer sends INP=0 when no interaction occurred.
2026-03-14 22:01:44 +01:00
Usman Baig
f278aada7a fix: use flag icons, show per-datacenter dots on map, format tooltip as bytes 2026-03-14 21:35:26 +01:00
Usman Baig
1e61926bc6 fix: parse bunnycdn datacenter codes to ISO country codes for map dots and flags 2026-03-14 21:26:51 +01:00
Usman Baig
77b280341b fix: use official bunnycdn logo, redesign traffic distribution with map and country grid 2026-03-14 21:21:53 +01:00
Usman Baig
d9c01b9b06 feat: add traffic distribution dotted map to CDN tab 2026-03-14 21:12:07 +01:00
Usman Baig
2512be0d57 fix: bunnycdn logo and api key security 2026-03-14 21:08:42 +01:00
Usman Baig
fb85c431f0 feat: add BunnyCDN integration 2026-03-14 20:46:26 +01:00
Usman Baig
a8fe171c8c fix: use ShieldCheck icon for Data & Privacy settings tab 2026-03-14 18:30:41 +01:00
Usman Baig
4d869d8cb1 fix: place Search and Goals side by side in two-column grid 2026-03-14 18:13:07 +01:00
Usman Baig
a3f50dc38f fix: restore Peak Hours layout and hide empty Search panel
Peak Hours back in its original grid position next to Campaigns.
Search panel now placed below as a standalone row, and hides
entirely when there's no GSC data instead of showing zeros.
2026-03-14 18:09:07 +01:00
Usman Baig
8f00193e0f feat: add Search panel to dashboard and enrich Search tab
Dashboard: compact Search Performance panel showing top 5 queries,
clicks, impressions, and avg position alongside Campaigns.

Search tab: clicks/impressions trend chart, top query position
tracker cards, and new queries badge.
2026-03-14 18:05:05 +01:00
Usman Baig
34c705549b feat: add Google Search Console integration UI
Search Console page with overview cards, top queries/pages tables,
and query↔page drill-down. Integrations tab in Settings for
connect/disconnect flow. New Search tab in site navigation.
2026-03-14 15:36:37 +01:00
Usman Baig
19db02e945 fix: lower min_sessions to 1 for journey data visibility
Journeys page showed empty state on low-traffic sites because
min_sessions=2 filtered out all single-occurrence transitions.
2026-03-14 13:40:40 +01:00
Usman Baig
25210013d3 feat: centralise date/time formatting with European conventions
All dates now use day-first ordering (14 Mar 2025) and 24-hour time
(14:30) via a single formatDate.ts module, replacing scattered inline
toLocaleDateString/toLocaleTimeString calls across 12 files.
2026-03-14 13:31:30 +01:00
Usman Baig
f7bd61187a style: make verified state match button shape of unverified state 2026-03-13 16:46:51 +01:00
Usman Baig
344838e0cd style: use subtle inline text for verified status in settings 2026-03-13 16:44:00 +01:00
Usman Baig
e336d2c7e5 feat: show verification status in site settings page 2026-03-13 16:40:37 +01:00
Usman Baig
b5d408b4e8 style: add skeleton loading & fade transition to behavior page 2026-03-13 14:30:01 +01:00
Usman Baig
8c4bb8f861 style: add fade-in transition from skeleton to content
Smooth out the jarring visual pop when loading skeletons are replaced
by real content. Only animates after an actual skeleton was shown —
cached data still renders instantly with no delay.
2026-03-13 12:45:48 +01:00
Usman Baig
6380f216aa perf: migrate Settings, Funnels, and Uptime to SWR data fetching
Replace manual useState/useEffect fetch patterns with SWR hooks so
cached data renders instantly on tab revisit. Skeleton loading now
only appears on the initial cold load, not every navigation.

New hooks: useFunnels, useUptimeStatus, useGoals, useReportSchedules,
useSubscription — all with background revalidation.
2026-03-13 12:21:55 +01:00
Usman Baig
b6a7c642f2 feat: add skeleton loading to Journeys page
Use JourneysSkeleton with useMinimumLoading hook, matching the
loading pattern used on Dashboard, Funnels, Uptime, and Settings.
2026-03-13 11:58:35 +01:00
Usman Baig
0112004457 fix: depth default 3 max 5, min_sessions 2, 5 nodes per column, stricter labels 2026-03-12 23:58:56 +01:00
Usman Baig
90de83ad6d fix: lower min_sessions from 3 to 1 for journey data 2026-03-12 23:30:12 +01:00
Usman Baig
4cd9544672 fix(journeys): use correct session_count property in entry point dropdown 2026-03-12 21:39:31 +01:00
Usman Baig
b3e335ec6c feat(journeys): add skeleton and error boundary 2026-03-12 21:36:27 +01:00
Usman Baig
dc1030036c feat(journeys): add Journeys page with controls and layout 2026-03-12 21:35:05 +01:00
Usman Baig
6964be9610 refactor: remove realtime visitors detail page
Remove the individual session journey page and make the live visitor
count a static indicator. Prepares for the new aggregated User Journeys
feature (v0.17).
2026-03-12 20:45:58 +01:00
Usman Baig
03e3f41e48 refactor: use bundled /behavior endpoint via useBehavior SWR hook
Replaces 4 separate frustration API calls with single useBehavior hook.
Removes manual fetchData, loading/error state, and refresh interval—SWR
handles caching, revalidation, and error state automatically.
2026-03-12 20:24:28 +01:00
Usman Baig
eb17e8e8d6 fix: hide scroll depth and trend chart when rate-limited
Frustration APIs and dashboard API are separate — when frustration
calls fail, Scroll Depth still rendered from cached SWR data,
creating a broken mixed state. Now tracks error state and hides
the bottom section entirely on failure.
2026-03-12 18:35:36 +01:00
Usman Baig
5050422a60 refactor: match frustration tables to dashboard pattern
- Remove column headers for cleaner look
- Show secondary info (avg, sessions, last seen) on hover
- Add orange percentage badge that slides in on hover
- Add empty row padding for consistent card height
2026-03-12 18:27:20 +01:00
Usman Baig
2f01be1c67 feat: polish behavior page UI with 8 improvements
- Add column headers to rage/dead click tables
- Rich empty states with icons matching dashboard pattern
- Add frustration trend comparison chart (current vs previous period)
- Show "New" badge instead of misleading "+100%" when previous period is 0
- Click-to-copy on CSS selectors with toast feedback
- Normalize min-height to 270px for consistent card sizing
- Fix page title to include site domain (Behavior · domain | Pulse)
- Add "last seen" column with relative timestamps
2026-03-12 18:03:22 +01:00
Usman Baig
9179e058f7 refactor: move scroll depth from dashboard to behavior tab 2026-03-12 16:56:26 +01:00
Usman Baig
d5aafdc48a feat: add behavior page shell 2026-03-12 16:56:00 +01:00
Usman Baig
27a9836d5a feat: add time-of-day controls to scheduled reports UI
Add send hour, day of week/month selectors to report schedule modal.
Schedule cards now show descriptive delivery times like
"Every Monday at 9:00 AM (UTC)". Timezone picker moved into modal.
2026-03-12 15:17:46 +01:00
Usman Baig
31aff95552 feat: add Reports tab to site settings with schedule CRUD 2026-03-12 14:33:05 +01:00
Usman Baig
a189952fad feat: add Peak Hours heatmap dashboard panel 2026-03-11 23:59:22 +01:00
Usman Baig
136ceff962 feat: add dividers to period selector dropdown 2026-03-11 23:47:52 +01:00
Usman Baig
b5dd5e7082 feat: add This week / This month period options and fix comparison labels 2026-03-11 23:33:24 +01:00
Usman Baig
0f5d5338f3 fix: make scroll depth block half-width and enlarge radar chart 2026-03-11 22:26:15 +01:00