Screens and clicks

With a viewer’s yes, the screens they opened inside the demo and what they clicked there.

On this page

With a viewer's yes, the room can show you what they did inside your demo: the screens they opened, in order and for how long, and what they clicked there. This page covers who is asked and how, what is logged and what never is, how to keep parts of your demo out of it, and how long it is kept.

Screens and clicks come with the Pro, Team and Enterprise plans. On Free the app shows where they would be, with invented rows, and nothing is logged. Heatmaps, scroll reach and funnels come with every plan that has screens and clicks; export comes with Team and Enterprise. Replays come with Team and Enterprise.

Turning it on

Each project has a setting, What viewers do in the demo, in its Settings tab: Off, or Screens and clicks.

Before it can be turned on, your workspace needs a privacy contact: an email address where viewers can ask you about their data. The room shows it to every viewer it asks. You give it once, in the same panel, and it serves every project in the workspace. Once it is given, screens and clicks are on for every project unless you turn a project off.

Whatever you choose, every viewer is still asked, and nothing is logged for a viewer who says no.

From Claude, demo_recording reads the setting, and set_demo_recording and set_privacy_contact change it, each rehearsing first and changing nothing until you say yes. screen_heatmap, funnels and export_insight read what is below, and set_funnel and delete_funnel change your funnels, rehearsing first in the same way (MCP tools). replays and replay_timeline read the replays, and delete_replay deletes one, rehearsing first (MCP tools).

What the viewer is asked

On a private link, the room asks before the viewer goes in, on the same page as "Are you Priya?":

Can Northwind also see what you click in the demo?

  • Yes — the screens I open and what I click
  • No thanks — I can still see everything in the room

It helps Northwind see what interested you. You can stop at any time from the top of the room.

Neither answer is chosen for them, and they cannot go in without choosing one. Below the two "Are you Priya?" answers, on a line of its own: "By entering, you accept Roomi's viewer terms", with a link to how their data is used. Someone who said who they were before the question existed meets it on its own, under "Before you go in", before anything is logged.

You cannot change these words, choose an answer for the viewer, hide the question, or require a yes to enter. That is deliberate: a yes that was not freely given is not consent.

The question is asked once in each session, as "Are you Priya?" is (Sessions), and a no is not asked again in that session. A yes given to an earlier wording is asked once more before anything more is logged.

The room does not ask, and logs nothing inside the demo:

  • when the viewer's browser sends Global Privacy Control or Do Not Track. The top of the room says "Clicks not shared (your browser asked us not to)";
  • at a public Community address;
  • in Preview as viewer, or in roomi dev.

In the room

While a viewer is sharing, the top of the room says "Northwind sees your clicks", next to their name, with Stop beside it. Stop takes effect at once. Stop, and delete what was recorded also deletes what was logged of their clicks on that link, from every visit, then and there. A viewer who said no can share them later from the same place. You have no setting that hides this control.

What is logged

For each screen of the demo the viewer opens:

  • the screen, by its path, and its title;
  • when they opened it, how long it was in front of them, and how long of that they were using it;
  • how far down they scrolled;
  • which frame the room showed it in (phone, tablet, laptop or screen).

On each screen:

  • clicks, by the element clicked: its role (a button, a link, a tab) and its label, as your demo names it. A burst of three or more clicks in one place within a second is a rage click. A click after which nothing on the page changed, the address did not change and no window opened is a dead click: "nothing changed on the page" is exactly what it measures;
  • fields: that a field was used, how long, whether it was changed, and whether it was left empty;
  • forms: that one was sent, and whether it was valid;
  • that the viewer moved into a frame embedded in your demo, and nothing about that frame.

The labels, titles and paths are your demo's own words, and the app marks them "reported by the demo".

Once the viewer has typed

A demo often puts what a viewer typed back on the page: a to-do becomes a button, a search term goes into the address, a name into the title. So once a viewer has typed anything into your demo, on that page or an earlier one, no words that appeared after it are taken as yours:

  • an element added or changed after typing is logged with no label, and its id and classes are left out of where it is;
  • the page's title is not kept if it changed after typing;
  • a part of the address the page never showed or linked to before typing is kept as :text, so /search/acme becomes /search/:text;
  • on a page loaded after typing, none of its words are kept, only the screens the demo showed or linked to before it.

A static build gets one thing back. When a viewer clicks something drawn after they typed, or on a page loaded after it, or opens a screen whose title changed, the script sends no words: it sends a fingerprint of each one, made with a random key for that screen view. Roomi's platform fingerprints every word in your build's own files (its HTML, JavaScript and text files) with the same key, and keeps the label only if every word in it is one of yours, spelt from your files. A word the viewer typed is kept only if your build already has it, and a fingerprint that matches none of your words is thrown away. A demo that runs in a container has no files we read, so nothing it draws after typing is ever named.

To keep a name for something your demo draws after typing, give it one yourself: data-roomi-label="Add task" on an element, and data-roomi-screen for a screen (below). Those are always kept, as you wrote them, so never put what a viewer typed in them.

What your demo reports is your demo's own code. The script never reads a field, but a demo written to copy what was typed into a label, or to post its own messages to the room, can put it there. Don't: the terms you accept as a publisher forbid a demo that keeps or sends what viewers type.

What is never logged

These are rules no setting turns off:

  • what is typed into any field, its length, or which keys were pressed;
  • password fields, card fields (autocomplete="cc-…") and one-time codes: not even a click or a focus on them;
  • the clipboard, or what is selected;
  • a query string, or a fragment that is not a route (#/settings is kept, #section-2 is not);
  • anything from another origin, including frames inside your demo;
  • the viewer's network address, browser or location.

The script that does it reports only to the room. It never talks to Roomi's platform, and the room checks every message before anything is kept.

Leaving parts of the demo out

Two attributes, in your demo's own markup:

  • data-roomi-mask on an element, or anything around it: its clicks are still counted, but its label is never kept, and the app shows it as hidden.
  • data-roomi-ignore: nothing at all is logged on it or inside it.

To name a screen yourself, rather than by its path or the page's title, put data-roomi-screen="Pricing" on an element of it. To name an element, put data-roomi-label="Download tariff" on it.

Without touching the demo, you can give CSS selectors in the setting's Parts of the demo to leave out: one list to hide the words on, one to log nothing on. Masks can also go in pitch.json, under privacy.mask, so they travel with the build; the app shows them, and adds its own.

Heatmaps and scroll reach

Analytics, Clicks, Heatmap draws where viewers clicked on one screen, over Roomi's own picture of it: the more clicks in a place, the stronger its mark, and a dead click has a mark of its own. Choose the screen, the build, the device (Phone, Tablet or Computer) and the range. Beside the picture:

  • Most clicked on the screen: its elements, ranked, the top five numbered on the picture;
  • How far down they read: of the viewers who opened the screen on that device, how many reached a half, three quarters and the bottom of it.

The marks are counts of clicks in small areas of the page, with how many viewers made them; no single click, and nobody's name, is drawn. A click is drawn only over a picture taken at the same width as the page it was made on, so a phone's layout never lands on a computer's. The clicks that cannot be drawn are still in the ranked list, and the app says how many there are and why: made at another width, below the bottom of the picture, or logged before widths were kept.

Each click, Rage and dead and Table are the same clicks as lists. Table can show Across builds: each element by its role and label, with its clicks in each of your ten newest builds, so you can see whether the same button is still being clicked in vain. An element with no label, or a hidden one (data-roomi-mask), is never matched across builds; it stays in each build's own list.

Pictures of each screen

The pictures are taken in your own browser, in Preview as viewer: each screen you open there is pictured from its top, at the width the preview lays it out at, once the page has settled. The preview says so while it does it. A picture is never taken in a viewer's browser. Each is filed under the member whose preview took it, and Preview as viewer logs nothing else about you.

  • The demo's fields are drawn empty in the picture, whatever you typed into them in your preview.
  • Only the build the preview shows is pictured, so nothing is pictured for a build until someone previews it.
  • Each device is its own picture: choose the phone frame in the preview to picture a screen for phones.
  • To take a screen again, open it again in a preview an hour or more after its last picture: the newest picture of a screen at that width replaces the one before. Within the hour, the picture already taken stands.

It is a drawing of the page, not a screenshot of your screen, so a canvas, a video or a frame from another site can come out blank. A demo whose Content-Security-Policy refuses the room's script from 'self' is not pictured at all. With no picture of a screen, the heatmap shows its ranked list alone, and says how to take one.

Pictures are shown only to your workspace, each fetched by its own id, and never at an address anyone else can open.

Funnels

A funnel counts how many viewers went through steps you choose, in order, within one visit. Analytics, Funnels shows each step: how many reached it, their share of those who started, how many went no further, and the median time to the next step; for those who stopped, where they went next and who they are.

A step is one of:

  • a screen of the demo, by its path or its name;
  • an element on a screen, by its role and label, so a funnel still counts after a rebuild changes its classes (an element with no label cannot be a step);
  • a step of the tour;
  • a next step a viewer chose at the end.

Each viewer counts once, at the furthest step any of their visits reached. A funnel with a screen or an element in it counts only the visits where the viewer said yes to sharing their clicks; one made only of tour steps and next steps counts every visit, since those are the room's own events.

When the live build has a tour of two or more steps, The tour is a funnel already made for you. Edit steps on it saves a copy as a funnel of your own. Pro has 3 funnels in each project, and Team and Enterprise have no limit; the tour's funnel does not count.

Saving or deleting a funnel shows what it would count first, and changes nothing until you confirm.

Export

On Team and Enterprise, Export (CSV) on Screens, Clicks, Table, Fields and Funnels downloads that table as a spreadsheet file, for one build. An export is counts under your demo's own labels: it has no column naming a viewer. A label that starts with =, +, - or @ is written with an apostrophe in front, so a spreadsheet shows it as text and never runs it.

Replays

On Team and Enterprise, a visit's replay lays out the screens the viewer opened and what they clicked there, in order and in time, over Roomi's own pictures of the build. It is drawn from the screens and clicks above. Nothing more is captured for it: there is no video of the viewer's screen, and what they typed is never in it. Where they used a field, the replay marks the field "used · not recorded". Time they spent on the room's pages, on their phone, or with the demo out of sight is shown as not recorded, and idle time is skipped.

Open one from the viewer's visit, Replay visit, or from Analytics, Replays. A picture cannot show a hover or a menu that was open, and a screen with no picture at the viewer's width is shown as a plain panel with its events.

A replay opens for 30 days from the visit on Team and 90 days on Enterprise, then no longer. A replay past its time does not come back, even after a change of plan.

Delete this replay deletes it for everyone in your workspace, and anyone who can change the room's settings can do it. It deletes the replay, not the visit: the viewer's screens and clicks stay in their journey for the rest of their 12 months. A viewer who chooses Stop, and delete what was recorded in the room leaves no replay at all.

If it logs nothing

The room adds its script to each page of your demo from the demo's own origin, as it does for the tour. A Content-Security-Policy of your own that does not allow scripts from 'self' blocks it, and nothing inside the demo is logged.

Nested frames of the demo's own origin are not logged yet, and nor is a demo opened on a phone outside the room.

How long it is kept

  • Each viewer's screens and clicks are kept for 12 months from the visit, then counted into daily totals per screen and per element, which name nobody, and deleted. Your plan's history window only hides them sooner.
  • When a viewer asks from the room, theirs on that link are deleted at once.
  • When you delete a project, its screens and clicks, totals included, are deleted within 30 days.
  • The record of what each viewer was asked and what they answered is kept for two years.
  • Pictures of the screens are kept with the project and deleted within 30 days of your deleting it.
  • A replay opens for 30 days from the visit on Team and 90 days on Enterprise, unless you delete it sooner (Replays).

Where a visit has none, its journey says "Clicks not recorded on this visit", never why. See Analytics and the pipeline for where screens and clicks appear, and Security and privacy for what the platform holds.