Behavior depth

The whole visit,
on one time axis.

Session timelines are Observer's signature capability: every event of a visit — page views, clicks with element and page position, scrolls, errors, goals, Web Vitals, outbound links, downloads — rendered on a shared time axis. A session is an anonymized device-day, derived server-side: what was done, never who did it.

Sessions list

Triage starts before you click.

Recent sessions (24-hour event horizon) arrive with start, length, views, engaged time, device·geo, source — and pre-flags so the interesting ones surface first.

Recent sessions · last hourlive
SessionViewsEngagedSourceFlags
91be…40 · 09:1275:12searchrage ⎇2
7f3a…c2 · 09:0853:41direct⎇2
c881…9e · 09:0320:48campaigncwv-fail
44d0…17 · 08:5796:03socialdeep-dive
Pre-flags: rage · errors · dead-clicks · cwv-fail · deep-dive — computed before you open anything.

Tab-split lanes

Concurrent tabs,
side by side.

People browse in parallel. When a visitor opens a second tab mid-session, a new lane branches off at that exact moment, marked with a ⎇ split marker. Both tabs render on one shared time axis — you see the real browsing pattern, not a flattened blur of events.

Exactly at the split

The marker marks the instant the second tab opened while the first was still active — the same moment every other tool silently merges.

Per-tab context kept

Page views, clicks, scrolls and errors stay attributed to their tab. The multi-tab badge (⎇N) on the session list tells you what to expect.

Nobody else models this

Concurrent tabs are invisible to every other analytics platform. This is Observer's signature capability, and it ships with zero consent burden.

Anatomy of an event

Every marker means something.

Hover any marker in the dashboard for the exact action. What Observer captures — and what it deliberately does not.

EventWhat you seeWhat you never see
Clickelement + page position (x%·y%, doc-normalized)who clicked — there is no identity to attach
Page viewscrubbed path, referrer origin, UTMemails, card numbers, API keys (scrubbed to [email]/[num]/[key])
Errorerror class onlystack traces, message text
Goalgoal id + conversion contextuser profiles — none exist
Web Vitalname, value, rating, attributiondevice fingerprints — none are collected
Tab splitthe exact moment + both lanescross-tab identity joins — impossible by design

Sessions live within the 24-hour event horizon and are pseudonyms of a device-day. Cross-day journeys do not exist in the default tiers — that is the constraint that keeps the banner-free posture defensible.

The privacy model

Hotjar depth,
zero consent burden.

Behavior tools traditionally gate this depth behind consent, because their identity comes from device-stored IDs. Observer derives identity server-side from what the browser already sends — hashed with a key that rotates at midnight UTC. The timeline is complete; the identity is not there to find.

See the visit
as it happened.

Session timelines ship in every tier — including the default one with no consent banner.