diff --git a/apps/public/content/docs/(tracking)/session-replay.mdx b/apps/public/content/docs/(tracking)/session-replay.mdx index da91a801..ef6e3019 100644 --- a/apps/public/content/docs/(tracking)/session-replay.mdx +++ b/apps/public/content/docs/(tracking)/session-replay.mdx @@ -67,8 +67,9 @@ With the npm package, the replay module is a dynamic import code-split by your b | Option | Type | Default | Description | |---|---|---|---| | `enabled` | `boolean` | `false` | Enable session replay recording | -| `maskAllInputs` | `boolean` | `true` | Mask all input field values with `*` | -| `maskTextSelector` | `string` | `[data-openpanel-replay-mask]` | CSS selector for text elements to mask | +| `maskAllInputs` | `boolean` | `true` | Mask all input field values | +| `maskAllText` | `boolean` | `true` | Mask all text content in the recording | +| `unmaskTextSelector` | `string` | — | CSS selector for elements whose text should NOT be masked when `maskAllText` is true | | `blockSelector` | `string` | `[data-openpanel-replay-block]` | CSS selector for elements to replace with a placeholder | | `blockClass` | `string` | — | Class name that blocks elements from being recorded | | `ignoreSelector` | `string` | — | CSS selector for elements excluded from interaction tracking | @@ -79,40 +80,72 @@ With the npm package, the replay module is a dynamic import code-split by your b ## Privacy controls -Session replay captures user interactions. These options protect sensitive content before it ever leaves the browser. +Session replay captures user interactions. All text and inputs are masked by default — sensitive content is replaced with `***` before it ever leaves the browser. -### Masking inputs +### Text masking (default on) -All input fields are masked by default (`maskAllInputs: true`). Recorded values appear as `***` in the replay. Disable this only if you have a specific reason—form field contents are almost always personal data. +All text content is masked by default (`maskAllText: true`). This means visible page text, labels, and content are replaced with `***` in replays, in addition to input fields. -### Masking specific text +This is the safest default for GDPR compliance since replays cannot incidentally capture names, emails, or other personal data visible on the page. -Add `data-openpanel-replay-mask` to any element to replace its text with `***` in replays: +### Selectively unmasking text -```html -
Sensitive text here
-``` - -Or use a custom selector: +If your pages display non-sensitive content you want visible in replays, use `unmaskTextSelector` to opt specific elements out of masking: ```ts sessionReplay: { enabled: true, - maskTextSelector: '.pii, [data-sensitive]', + unmaskTextSelector: '[data-openpanel-unmask]', } ``` +```html +Welcome to the dashboard
+ +John Doe · john@example.com
+``` + +You can also use any CSS selector to target elements by class, tag, or attribute: + +```ts +sessionReplay: { + enabled: true, + unmaskTextSelector: '.replay-safe, nav, footer', +} +``` + +### Disabling full text masking + +If you want to disable full text masking and return to selector-based masking, set `maskAllText: false`. In this mode only elements with `data-openpanel-replay-mask` are masked: + +```ts +sessionReplay: { + enabled: true, + maskAllText: false, +} +``` + +```html +This will be masked
+This will be visible in replays
+``` + ++ OpenPanel AB +
++ Version 1.0 · Last updated: March 3, 2026 +
++ This Data Processing Agreement ("DPA") is entered into between + OpenPanel AB ("OpenPanel", "Processor") and the customer identified in + the signature block below ("Controller"). It applies where OpenPanel + processes personal data on behalf of the Controller as part of the + OpenPanel Cloud service, and forms part of the OpenPanel Terms of + Service. +
+ ++ OpenPanel is built to minimize personal data collection by design. + We do not use cookies for analytics tracking. We do not store IP + addresses. Instead, we generate a daily-rotating anonymous + identifier using a one-way hash of the visitor's IP address, user + agent, and project ID combined with a salt that is replaced every 24 + hours. The raw IP address is discarded immediately and the + identifier becomes irreversible once the salt is rotated. +
++ The data we store per event is: +
++ No persistent identifiers, no cookies, no cross-site tracking. + Because of this approach, the analytics data OpenPanel collects in + standard website tracking mode does not constitute personal data + under GDPR Art. 4(1). We provide this DPA for Controllers who + require it for their own compliance documentation and records of + processing activities. +
++ Session replay (optional feature) +
++ OpenPanel optionally supports session replay, which must be + explicitly enabled by the Controller. When enabled, session replay + records DOM snapshots and user interactions (mouse movements, clicks, + scrolls) using rrweb. All text content and form inputs are masked by + default. The Controller is responsible for ensuring their use of + session replay complies with applicable privacy law, including + providing appropriate notice to end users. +
++ OpenPanel acts as a Processor when processing data on behalf of the + Controller. The Controller is responsible for the analytics data + collected from visitors to their websites and applications. +
++ OpenPanel commits to the following: +
++ The Controller confirms that: +
++ OpenPanel uses the following sub-processors to deliver the service: +
+| + Sub-processor + | ++ Purpose + | ++ Location + | +
|---|---|---|
| + Hetzner Online GmbH + | ++ Cloud infrastructure and data storage + | ++ Germany (EU) + | +
| + Cloudflare R2 + | ++ Backup storage + | +EU | +
+ OpenPanel will inform the Controller of any intended changes to this + list with reasonable notice, giving the Controller the opportunity + to object. +
++ Data minimization and anonymization +
+Access control
++ Encryption and transport security +
++ Infrastructure and availability +
+Incident response
+Open source
++ OpenPanel stores and processes all analytics data on Hetzner + infrastructure located in Germany. No Personal Data is transferred + to countries outside the EEA in the course of delivering the + service. +
++ This DPA is governed by the laws of Sweden and is interpreted in + accordance with the GDPR. +
++ Annex +
++ Execution +
++ Processor +
+OpenPanel AB
++ Sankt Eriksgatan 100, 113 31 Stockholm, Sweden +
++ Controller +
+{label}
+