Commit Graph

990 Commits

Author SHA1 Message Date
Usman Baig
b000d0e1f7 fix: replace horizontal dashed lines with solid vertical column dividers 2026-03-15 13:20:57 +01:00
Usman Baig
58272f3fb5 fix: remove scroll fade gradient that was overlapping column content 2026-03-15 13:15:42 +01:00
Usman Baig
722b5de88d feat: polish journey columns with bar charts, count pills, colored selection, dotted connectors 2026-03-15 13:12:17 +01:00
Usman Baig
ada2c65d8f fix: show exit as red card in next column instead of SVG text hack 2026-03-15 13:03:06 +01:00
Usman Baig
b10abd38fc feat: show exit count when selecting a page, fix scroll fade overlay 2026-03-15 12:56:59 +01:00
Usman Baig
9f9f4286b7 fix: selections only show connection lines, no longer filter column data 2026-03-15 12:46:48 +01:00
Usman Baig
a7e9f7c998 fix: cascade column selection filter downstream, trim empty columns, add scroll fade 2026-03-15 12:42:49 +01:00
Usman Baig
4103014cdb fix: restyle journey columns to match Pirsch card-based design 2026-03-15 12:28:43 +01:00
Usman Baig
9528eca443 fix: handle 204 No Content responses in API client
Prevent error toasts on successful delete operations by checking for
204 status before attempting to parse response body as JSON.
2026-03-15 12:23:05 +01:00
Usman Baig
e8f00e06ec feat: replace sankey chart with column-based journey visualization 2026-03-15 12:17:48 +01:00
Usman Baig
1e147c955b fix: improve visit duration reliability with pagehide fallback and dedup guard 2026-03-15 11:58:33 +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
20cda8d464 docs: add CDN refresh interval changelog entry 2026-03-14 23:38:46 +01:00
Usman Baig
bc2534a22b fix: reduce false positives in rage click and dead click detection
- Skip rage clicks when text is selected (triple-click to select)
- Exclude tabindex="-1" elements from dead click interactive selector
- Observe document.body for DOM changes (modals, drawers, overlays)
- Listen for popstate/hashchange to detect SPA navigations
2026-03-14 23:32:31 +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
4ceb33b946 feat: add header icons to all dashboard panels
Consistent icon treatment across Pages, Referrers, Locations,
Technology, Campaigns, Peak Hours, Goals, and Search panels.
2026-03-14 18:27:12 +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
af29bb77cd fix: stop retrying rate-limited and auth-failed requests
SWR was retrying 429/401/403 responses with exponential backoff,
which cascaded into a flood of failed requests when the tab regained
focus. Now skips retries entirely for these status codes.
2026-03-14 17:16:23 +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
9b7781115f Merge pull request #50 from ciphera-net/staging
feat: track time-on-page via unload ping for accurate visit durations
2026-03-14 14:26:39 +01:00
Usman Baig
cf0b6b8a68 feat: track time-on-page via unload ping for accurate visit durations
Sends duration to the metrics endpoint on visibilitychange and SPA
navigation. Also lowers journey min_sessions to 1 for low-traffic sites.
2026-03-14 14:07:54 +01:00
Usman
8e7c273ebc Merge pull request #49 from ciphera-net/staging
feat: centralise date/time formatting with European conventions
2026-03-14 13:49:20 +01:00
Usman Baig
11ef95ef45 fix: use full day names in Peak Hours busiest-time callout 2026-03-14 13:40:42 +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
2242a159c7 fix: use 24-hour time in Peak Hours heatmap
Axis labels, bucket ranges, and busiest-time callout now use
24-hour format (00:00, 06:00, 12:00, 18:00) instead of AM/PM.
2026-03-14 13:38:51 +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
7ba5e063ca feat: add free plan to pricing page and enforce 1-site limit
Show the free tier (€0, 1 site, 5k pageviews, 6 months retention)
as the first card on the pricing page. Enforce a 1-site limit for
free plan users in the frontend.
2026-03-13 21:28:04 +01:00
Usman Baig
ed80290431 Merge branch 'staging' 2026-03-13 20:35:11 +01:00
Usman Baig
d6d42b5759 fix: portal delete modal to body so backdrop-blur covers header
The modal was rendered inside <main> which is a sibling of the
fixed header. Browser compositing didn't apply backdrop-blur
across the header's separate GPU layer. Using createPortal to
render at document.body matches how the delete account modal
works (rendered as sibling to header via SettingsModalWrapper).
2026-03-13 20:35:04 +01:00
Usman Baig
3619a1e644 Merge branch 'staging' 2026-03-13 20:29:47 +01:00
Usman Baig
618c4fd5fe fix: bump delete modal z-index to z-[100] to cover fixed header
Header uses fixed z-50 with backdrop-blur which creates its own
stacking context. z-[60] wasn't enough, z-[100] matches the
pattern used by VerificationModal.
2026-03-13 20:29:47 +01:00
Usman Baig
68536ed71a Merge branch 'staging' 2026-03-13 20:10:24 +01:00
Usman Baig
39e06183c3 fix: delete modal overlay z-index above navbar 2026-03-13 20:10:23 +01:00
Usman Baig
cad588da52 fix: delete modal overlay now covers navbar
Bumped z-index from z-50 to z-[60] so the backdrop-blur
renders above the sticky navbar.
2026-03-13 20:10:02 +01:00
Usman Baig
6c31f3fc60 fix: show org name in delete modal and fix subscription card visibility
Modal now says "Delete Ciphera?" instead of generic "Delete Organization?".
Subscription cancellation card now shows for any paid plan (solo/team/business)
regardless of subscription_status, which could be 'active' or 'trialing'.
2026-03-13 19:58:01 +01:00
Usman Baig
86077557a8 style: redesign org delete modal to match delete account style
Red border, frosted overlay, destruction items as prominent
red-bordered cards with warning icons instead of small bullet
points. Button text changed to "Delete Forever".
2026-03-13 19:44:03 +01:00
Usman Baig
e86021caf8 fix: await subscription fetch before opening delete modal
The delete button fired loadSubscription() without awaiting it,
so the modal opened with subscription=null and the destruction
summary (sites count, active subscription) never rendered.
2026-03-13 19:35:12 +01:00