Skip to main content

Analytics & A/B Testing Pro

Privacy-first analytics and deterministic A/B testing. No cookies, no third-party scripts — data is sent via navigator.sendBeacon for zero impact on page performance.

Analytics Pro

Setup

Initialize with your collection endpoint. Page views are tracked automatically by default — works for both MPA and SPA navigation:

js
import { init, track, flush } from 'weblisk/pro/analytics.js';

init('/api/events', {
  pageViews: true,       // Auto-track page views (default)
  flushInterval: 5000,  // Batch flush every 5s
});

Custom Events

Track any user action with track(name, props):

js
// Track a signup
track('signup', { plan: 'pro', source: 'landing-page' });

// Track a purchase
track('purchase', { sku: 'WL-PRO', amount: 49 });

// Track a feature interaction
track('feature_used', { name: 'dark-mode' });

How It Works

Events are batched in memory and flushed on an interval (default 5s) and on visibilitychange (page hide). Data is sent via navigator.sendBeacon — which is non-blocking and survives page unload.

Each event includes:

FieldDescription
type'pageview' or 'event'
urlCurrent pathname + search
sessionRandom session ID (sessionStorage, no cookies)
tsTimestamp (Date.now())
referrerDocument referrer (page views only)
screenScreen dimensions (page views only)
propsCustom properties (events only)

API Reference

ExportDescription
init(endpoint, opts?)Initialize analytics with collection endpoint
track(name, props?)Track a custom event
trackPageView()Manually track a page view
flush()Force-flush the event queue
identify(traits)Attach user traits to subsequent events

A/B Testing Pro

Deterministic variant assignment using hash-based bucketing. Persists assignments in localStorage for a consistent user experience across sessions.

Define an Experiment

js
import { experiment, convert, assignments } from 'weblisk/pro/ab.js';

const { variant, choose } = experiment('cta-color', ['control', 'blue-cta', 'green-cta']);

console.log(variant()); // → 'blue-cta' (deterministic per user)

Show/Hide Variants in HTML

Use data-variant attributes on elements and call choose() to show only the assigned variant:

html
<button class="cta" data-variant="control">Sign Up</button>
<button class="cta cta--blue" data-variant="blue-cta">Get Started</button>
<button class="cta cta--green" data-variant="green-cta">Try Free</button>
js
// Shows only the element matching the user's assigned variant
choose('.cta');

Track Conversions

Fire a conversion event to measure which variant performs best:

js
// Track when the user completes the target action
convert('cta-color', 'signup');

// Dispatches a 'wl:conversion' CustomEvent your analytics can pick up

Integration with Analytics

Conversions dispatch a wl:conversion CustomEvent. Combine with the analytics module to automatically capture experiment data:

js
import { track } from 'weblisk/pro/analytics.js';

window.addEventListener('wl:conversion', (e) => {
  track('ab_conversion', e.detail);
});

API Reference

ExportDescription
experiment(name, variants, opts?)Define an experiment — returns { variant, choose }
convert(name, goal?, props?)Track a conversion for an experiment
assignments()Get all active experiment → variant assignments