A lightweight tracking script runs on every page of rachelbloom.com (injected into theme.liquid). It captures visitor behaviour silently in the background and sends batches of events to Supabase every 5 seconds. No cookies. No personal data. Checkout pages are never recorded.
Your own IP address (184.58.10.20) is blocked server-side so your own browsing never pollutes the data.
Your top-level dashboard. Shows sessions, events, mobile/desktop split and average scroll depth across all pages. Use the date filter to compare periods. Top Pages ranks by pageviews. Top Exit Points shows where people leave — high exits on a product page is a red flag. Rage Clicks means someone clicked the same spot 3+ times in under 600ms — usually a broken element.
Shows where visitors click on each page. Search for a page using the search box — it lists all pages ranked by traffic. Select Clicks to see a heat overlay of where people tap/click. Scroll type shows scroll depth distribution as a bar chart. Rage highlights frustration points. Most Clicked Elements ranks what got clicked most.
Note: heatmap dots appear once there is click data. Scroll data populates the Scroll Depth Distribution panel regardless.
Every visitor session recorded on rachelbloom.com. Each row is one visit — click any row to expand the full event timeline: every click, scroll milestone, form interaction and exit in chronological order. Filter by device type or date. Sessions expire after 30 minutes of inactivity.
Tracks how visitors move through your conversion paths. Two funnels are pre-built: Main Conversion (Homepage → Collection → Product → Cart → Checkout) and Email Capture (Visit → Exit intent shown → Survey response). Each step shows how many sessions made it through and the drop-off percentage. High drop between Product and Cart = your PDP needs work.
Create on-site micro surveys that appear to real visitors as a small overlay in the bottom-right corner. Four trigger types:
- Exit intent — fires when mouse moves to close the tab
- Time delay — fires after N seconds on page
- Scroll depth — fires when visitor reaches N% scroll
- Page match — fires on specific pages only
Three response types: open text, multiple choice, NPS (0-10). Email responses are automatically pushed to Klaviyo. NPS responses show a score breakdown with detractor/passive/promoter split.
Data freshness: Events appear in Sessions and Overview within seconds. Heatmap aggregates are rebuilt nightly at 1am UTC by the lens-aggregate cron. Raw events always populate click elements and scroll distribution immediately.
Data retention: Raw events and sessions are automatically deleted after 90 days by the same nightly cron. Heatmap aggregates are kept indefinitely.
Session recordings: Mouse movements, clicks and scrolls are stored as JSON chunks in the lens-recordings Supabase storage bucket. Replay UI coming in a future sprint.
| Function | What it does | When it runs |
|---|---|---|
lens-collect | Receives batched events from the tracking script, writes to lens_sessions + lens_events, matches funnel steps | Every 5 seconds per active visitor |
lens-record | Receives mouse/click/scroll replay chunks, stores to lens-recordings bucket | Every 4 seconds per active visitor |
lens-aggregate | Rolls up raw click events into heatmap buckets, cleans up 90-day-old data | Nightly 1am UTC |
lens-survey-response | Saves survey responses, pushes email responses to Klaviyo, logs funnel step | On survey submission |