Live View
Live View is the realtime tab inside every domain dashboard. It shows who is on your site right now — country, city, page, session length, traffic source, device — and refreshes every 3 seconds while the tab is visible.
Pro and higher plans can also enable Ghost Multiplayer, a cursor overlay that streams the visitor's mouse movements onto a screenshot of the page they are looking at, with a side panel of session detail. The overlay is ephemeral by design: no DOM content is captured, no long-lived storage, no IP address in the payload.
No extra script required. Live View and Ghost Multiplayer both reuse the standard Zenovay tracker (z.js). If your site is already tracked, the base tab populates immediately and the cursor stream activates the moment a Pro+ admin opens the overlay.
Quick start
- Sign in at app.zenovay.com.
- Pick the domain you want to monitor.
- Open the Live View tab in the left sidebar (under Behavior).
- Once visitors arrive, a list of active sessions appears, refreshing every 3 seconds.
- (Pro+) Click Watch cursor on any card to open the Ghost Multiplayer overlay for that visitor.
Visitor card anatomy
Each active visitor shows a single card containing:
| Field | Meaning |
|---|---|
| Country flag + city | Resolved from the visitor's IP at ingest time. City may be empty for some VPNs/proxies. |
| Current page | Path of the page they are looking at (no query string, no fragment). |
| Session duration | Seconds since the first pageview in this session. |
| Traffic source | Referrer or attribution channel (Direct / Organic / Paid / Social / Referral). |
| Device type | Desktop / Mobile / Tablet, derived from the user-agent string. |
| Watch cursor button (Pro+) | Opens the Ghost Multiplayer overlay for this session. |
A session is "active" if its last event landed within the past 5 minutes. After 5 minutes of silence, the card drops off the list automatically.
Filters
The filter bar at the top of the tab narrows the list client-side — it does not change what is polled, only what is displayed. Available filters:
- Country — single-select dropdown of countries currently represented.
- Page — exact path match.
- Source — Direct / Organic / Paid / Social / Referral.
- Device — Desktop / Mobile / Tablet.
Clearing a filter restores the full list. There are no saved-segment integrations on the live tab in V1 — filters are intentionally lightweight to keep the 3-second refresh cheap.
Auto-refresh and visibility-aware pause
- Refresh interval: 3 seconds while the tab is focused.
- Background pause: when the browser tab is hidden (you switch away or minimize the window), polling stops to avoid wasted requests and CPU.
- Resume on visibility: polling resumes within 3 seconds of bringing the tab back to the foreground.
The pause is driven by the standard visibilitychange event — no custom heartbeat, no manual buttons required.
If a brief network interruption drops a poll, the visitor list auto-reconnects on the next interval instead of showing an error.
Ghost Multiplayer (Pro+)
Ghost Multiplayer is an optional cursor overlay. It is off by default and activates per-visitor when a Pro+ admin opens it.
How to activate
- On any visitor card, click Watch cursor.
- A full-screen overlay opens with:
- Background: a screenshot of the page the visitor is currently on.
- Cursor: an animated pointer reflecting their real-time mouse position.
- Side panel: anonymous visitor ID, session duration, pages visited this session, device, browser, and country.
- Press Esc or click outside the overlay to close.
The cursor updates with a 1-2 second lag in V1 (HTTP polling). V2 will move to WebSocket for near-instant updates — see V2 backlog below.
How it works under the hood
While the overlay is active, the visitor's tracker:
- Listens to
mousemoveevents on the page (passive listener, nopreventDefault). - Throttles them to a maximum of 10 samples per second.
- Batches the samples in 1-second windows and POSTs them to
POST /api/analytics/live-cursor/ingest. - The payload contains only coordinates as percentages of the viewport, a session ID, and a timestamp. No IP, no DOM content, no form-field values.
On the server:
- The Worker stores the batch in Cloudflare KV with a 10-second TTL.
- The overlay polls
GET /api/analytics/live-cursor/:websiteId/:sessionIdevery 1 second. - Old samples expire automatically. Nothing is written to the database.
Live page-preview limit
The page-preview background image behind the cursor is an on-demand server-side screenshot, and it is capped per website per day. The counter resets at 00:00 UTC:
| Plan | Page-preview captures per website per day |
|---|---|
| Free | Not applicable — the live-cursor overlay and live page preview are Pro+ only |
| Pro | 100 |
| Scale | 300 |
| Enterprise | 500 |
Re-viewing a page that was already captured the same day does not consume budget — that capture is served from cache.
When the daily limit is reached, the overlay shows a clear "Daily live-preview limit reached — resumes 00:00 UTC" message. The live cursor and the visitor list keep working normally; only the page-screenshot background pauses until the next reset.
Side panel detail
The side panel surfaces session-level context that already exists in your dashboard — it does not introduce a new data source:
- Anonymous visitor ID (the same opaque identifier used elsewhere in the product)
- Session duration
- Pages visited in this session
- Device, browser, country
V1 does not show company name or revenue history (see V2 backlog).
Privacy and compliance
Ghost Multiplayer was designed to add zero new long-term tracking surface area. The guarantees below hold for V1 as shipped:
- GPC respected at both ends. When the visitor's browser sets
navigator.globalPrivacyControl === true, the tracker does not stream cursor data, and the server-side ingest endpoint drops any stray payload with a 204 response. - Ephemeral KV only. Cursor batches live in Cloudflare KV with a 10-second TTL. They are never written to the analytics database.
- No long-lived cookies, no localStorage. Activating the overlay does not introduce any storage on the visitor's device beyond the existing tracker session ID.
- Coordinates only. The payload contains x/y as percentages of the viewport, a session ID, and a timestamp. No IP address, no DOM content, no form values, no clipboard contents, no keystrokes.
- One-way visibility. The visitor does not see the admin's cursor and is not notified — this mirrors how every other analytics dashboard works, but if you publish a public-facing privacy notice you should disclose that admins may observe live cursor activity.
- Anonymous page preview. The preview background is an anonymous server-side screenshot of the public page only. It is rendered as a Global Privacy Control / do-not-track visitor: it sets no cookies, suppresses cookie-consent banners, and does not fire marketing or analytics pixels. Form fields are redacted in the screenshot artifact, and no visitor DOM or PII is captured.
Plan-level retention windows for the underlying session/pageview rows remain governed by your subscription tier; the cursor stream itself adds nothing to that retention because nothing is persisted.
Performance and limits
| Limit | Value | Notes |
|---|---|---|
| Cursor sample rate | 10 samples / second | Throttled in the tracker; further samples are dropped. |
| Ingest batch window | 1 second | One POST per second per active overlay. |
| KV TTL | 10 seconds | Old samples evict automatically. |
| Concurrent visible visitors | 50 | The visitor list shows the 50 most recent active sessions. |
| Polling lag (overlay) | 1-2 seconds | HTTP polling in V1; WebSocket planned for V2. |
| Polling lag (base tab) | up to 3 seconds | Driven by the 3-second visitor-list refresh. |
| Live page-preview captures | 100 / 300 / 500 per website per day (Pro / Scale / Enterprise) | Resets 00:00 UTC. Re-viewing a cached page is free. Cursor + visitor list keep working when reached. |
The base Live View tab itself adds one small request every 3 seconds to GET /api/analytics/realtime/:websiteId — comparable in cost to any other realtime dashboard tile.
V2 backlog
The following items are intentionally not in V1. They are tracked but not yet shipped:
- Live iframe of the customer's site as the overlay background, instead of a screenshot.
- WebSocket transport for sub-second cursor updates (currently HTTP polling).
- IP-to-company enrichment with a company logo above the cursor for B2B visitors.
- Stripe / billing history in the side panel for paying customers.
- Cursor trails / breadcrumbs showing recent paths over the page.
- Multi-admin presence — seeing each other's cursors when multiple admins watch the same visitor.
- Recording mode — capturing a session for later playback (this will merge with the existing Session Replay product, not duplicate it).
If you need any of these earlier, the priority is set by customer demand — reach out via [email protected].
Frequently asked questions
Does the visitor know I'm watching their cursor?
No notification is shown to the visitor. The overlay is a one-way view, like any other analytics dashboard. If your jurisdiction requires disclosure for behavioural observation, mention live monitoring in your privacy notice.
Why is the cursor lagging by a second or two?
V1 uses HTTP polling on a 1-second cadence — the cursor catches up to the visitor's real position with a ~1-2 s delay. Moving to WebSocket transport is on the V2 backlog.
My visitor list is empty even though I see traffic in the main dashboard.
A few common causes:
- No active visitors right now. The list only shows sessions whose last event landed in the past 5 minutes. Quiet periods are normal.
- Tab is hidden. Polling pauses when the tab is in the background; bring it to the foreground and wait up to 3 seconds.
- Tracker not installed on the page being viewed. Confirm with the Install Health diagnostic.
- Ad blocker. Some ad blockers strip the tracker request. This affects all analytics products, not just Live View.
Can I see the visitor's actual page in the overlay, not a screenshot?
Not in V1 — see V2 backlog. Embedding the customer's live page in an iframe requires the customer to allow framing on their own domain, which most do not by default. V1's screenshot approach works for every site out of the box.
Does Ghost Multiplayer count against my session-replay quota?
No. Ghost Multiplayer is real-time only and stores nothing; it does not consume your session-replay allotment.
Can I share an Ghost Multiplayer overlay link with a teammate?
Not in V1. The overlay session is bound to your authenticated admin session. A future "share live view" feature is on the backlog.
Related
- Real-time Tracking — the underlying realtime dashboard
- Session Replay — recorded sessions for after-the-fact analysis
- Heatmaps — aggregated click/scroll data
- Privacy Compliance — what data the tracker sends and why