Commit Graph

58 Commits

Author SHA1 Message Date
Usman Baig
e444985295 refactor: extract frustration tracking into separate add-on script
Move rage click and dead click detection (35% of script.js) into
script.frustration.js as an optional add-on. Core script drops from
8.1KB to 5.7KB gzipped. Add-on auto-discovers core via window.pulse
polling and supports opt-out via data-no-rage/data-no-dead attributes.

- Expose cleanPath on window.pulse for add-on consumption
- Add script.frustration.js to middleware PUBLIC_ROUTES
- Update integration guides, ScriptSetupBlock, and FrustrationTable
  empty state to reference the add-on script
2026-03-16 16:59:37 +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
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
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 Baig
fcfa4bfed9 fix: use allowlist for query params to prevent path fragmentation
Switch from blocklist (strip known-bad params) to allowlist (only keep
UTM/attribution params). Eliminates cache-busters like _t and _ from
page paths without maintaining an ever-growing blocklist.
2026-03-13 13:33:11 +01:00
Usman Baig
f7340fa763 fix: include URL in outbound/download events, exclude form inputs from dead clicks 2026-03-13 09:11:23 +01:00
Usman Baig
6e213539ea feat: filter headless browsers and zero-screen bots client-side 2026-03-13 09:07:49 +01:00
Usman Baig
f69248ecfa fix: strip utm_id from page paths to prevent fragmentation 2026-03-13 08:58:33 +01:00
Usman Baig
360d6e7e71 fix: preserve UTM params for backend attribution, only strip ad click IDs 2026-03-13 08:43:55 +01:00
Usman Baig
63144a136e fix: only attribute referrer to landing page and strip Meta ad params 2026-03-13 01:31:14 +01:00
Usman Baig
1d71a13df4 fix: normalize page paths — strip UTM params and trailing slashes 2026-03-13 01:19:23 +01:00
Usman Baig
6edd5ac0b6 fix: skip pageview tracking for prerendered pages 2026-03-13 01:17:12 +01:00
Usman Baig
a57ed871f1 fix: screen size shadowing, popstate double pageview, custom event self-referrals 2026-03-13 01:09:45 +01:00
Usman Baig
765f8ec63e fix: strip self-referrals from tracking script 2026-03-13 01:06:14 +01:00
Usman Baig
aae1714b02 fix: deduplicate pageviews on page refresh 2026-03-13 00:50:13 +01:00
Usman Baig
1f64bec46d fix: correct summary card label and skip MutationObserver on html/body 2026-03-12 17:02:52 +01:00
Usman Baig
fb47716711 fix: use hasAttribute for data-no-rage and data-no-dead opt-out checks 2026-03-12 16:50:20 +01:00
Usman Baig
247a0b3460 feat: add dead click detection to tracking script 2026-03-12 16:47:53 +01:00
Usman Baig
9e6e2a2214 feat: add rage click detection to tracking script 2026-03-12 16:47:15 +01:00
Usman Baig
b05f7bbcf6 feat: add element identifier function for frustration tracking 2026-03-12 16:46:32 +01:00
Usman Baig
5677f30f3b feat: add dashboard dimension filtering and custom event properties
Dashboard filtering: FilterBar pills, AddFilterDropdown with dimension/
operator/value steps, URL-serialized filters, all SWR hooks filter-aware.

Custom event properties: pulse.track() accepts props object, EventProperties
panel with auto-discovered key tabs and value bar charts, clickable goal rows.

Updated changelog with both features under v0.13.0-alpha.
2026-03-06 21:02:14 +01:00
Usman Baig
8b1d196812 feat: add automatic 404 detection, scroll depth tracking, and scroll depth dashboard card
- 404 detection: checks document.title for "404" or "not found", fires custom event, SPA-aware
- Scroll depth: passive scroll listener fires events at 25/50/75/100% thresholds
- ScrollDepth dashboard card: progress bar visualization showing % of visitors reaching each threshold
- Scroll events filtered out of GoalStats to avoid duplication
- Both features on by default, opt-out via data-no-404 / data-no-scroll
2026-03-06 20:00:22 +01:00
Usman Baig
53a0341925 feat: automatic outbound link and file download tracking
Adds a single click listener in the tracking script that detects
external link clicks and file download clicks, firing outbound_link
and file_download custom events. On by default, opt-out via
data-no-outbound / data-no-downloads attributes.
2026-03-06 19:41:11 +01:00
Usman Baig
4a8f627a5c refactor: enhance session ID caching logic to handle legacy string format and improve expiration checks 2026-02-11 15:52:30 +01:00
Usman Baig
10df76454a refactor: improve comment clarity in session ID caching logic within script.js 2026-02-11 15:31:51 +01:00
Usman Baig
d9f07f5cde refactor: simplify TTL parsing in script.js and add comment for session ID caching behavior 2026-02-11 14:29:44 +01:00
Usman Baig
1454d15142 docs: clarify default and optional data-storage options in ScriptSetupBlock and script.js for improved user understanding 2026-02-11 14:13:05 +01:00
Usman Baig
f423d01d7b refactor: remove redundant logging code from script.js to streamline session ID management 2026-02-11 13:54:18 +01:00
Usman Baig
f10b79efac refactor: update logging endpoints in script.js to use dynamic API URL for improved flexibility 2026-02-11 11:32:26 +01:00
Usman Baig
5886cc661c feat: implement race condition fix for session ID management in script.js, ensuring correct ID usage across multiple tabs 2026-02-11 11:26:29 +01:00
Usman Baig
2b3d052f87 feat: add logging for session ID management in script.js to enhance debugging and monitoring 2026-02-11 11:20:05 +01:00
Usman Baig
f1c27e458a feat: update ScriptSetupBlock and script.js to support new visitor ID storage options 2026-02-11 11:06:27 +01:00
Usman Baig
c827e82376 feat: enhance ScriptSetupBlock and script.js with optional persistent visitor ID storage 2026-02-11 10:57:01 +01:00
Usman Baig
14f3fe7fbb feat: add duplicate event name validation in SiteSettingsPage and update user guidance for event name changes 2026-02-04 15:56:25 +01:00
Usman Baig
90a743c170 feat: implement custom events tracking and goals management in the dashboard 2026-02-04 14:33:06 +01:00
Usman Baig
e75d70269f refactor(replay): remove session replay functionality and related components to streamline codebase 2026-01-23 18:21:50 +01:00
Usman Baig
e42e2d9440 fix: reduce LCP observation timeout to 100ms and enhance SPA navigation tracking with MutationObserver and history API integration 2026-01-19 17:50:18 +01:00
Usman Baig
fe38525cf1 feat: implement SPA navigation handling for LCP metrics, ensuring accurate tracking during route changes 2026-01-19 17:42:36 +01:00
Usman Baig
d92884f7ff feat: enhance performance metrics tracking by observing LCP and CLS events, ensuring accurate data reporting only when metrics are available 2026-01-19 17:34:16 +01:00
Usman Baig
3da53aa6c0 refactor: enhance public API for replay control with backward compatibility for Ciphera and branding update to Pulse 2026-01-19 17:22:13 +01:00
Usman Baig
5d867dd519 refactor: update application name and related identifiers from Analytics to Pulse for consistent branding across the codebase 2026-01-19 17:20:01 +01:00
Usman Baig
035d78175f refactor: update branding from Ciphera Pulse to Pulse across the application for consistency and clarity 2026-01-19 16:58:09 +01:00
Usman Baig
9dbe74fd9f refactor: update references from Ciphera Analytics to Ciphera Pulse across the application for consistent branding and messaging 2026-01-19 16:49:42 +01:00
Usman Baig
088e22512a feat: add performance insights feature with toggle in settings and conditional rendering in dashboard pages 2026-01-19 14:40:42 +01:00
Usman Baig
2aa25cb3aa fix: clarify cookie usage and session storage details in About, FAQ, and Security pages; add session replay explanation in FAQ 2026-01-19 14:12:10 +01:00
Usman Baig
8a648a2e5f fix: update session replay settings to map legacy consent_required to anonymous_skeleton and remove related UI elements 2026-01-19 14:01:02 +01:00
Usman Baig
41b177e3e3 fix: dynamically load rrweb library before starting session replay 2026-01-19 13:00:46 +01:00
Usman Baig
a740b0d703 feat: add session replay functionality with privacy controls 2026-01-19 12:43:02 +01:00