=== Frictions - Checkout Session Replay for WooCommerce ===
Contributors: frictions
Tags: woocommerce, checkout, session replay
Requires at least: 7.0
Tested up to: 7.1
Requires PHP: 8.4
Stable tag: 0.4.2
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Requires Plugins: woocommerce

Watch checkout. Find the friction. Consent-first structural checkout replay stored on your own WordPress hosting.

== Description ==

Frictions helps you review eligible WooCommerce checkout visits inside WordPress. It stores recordings in private tables in your site's database. No Frictions account, central replay server, paid recording allowance or time-limited trial is required.

Free includes the complete protected structural player; date, device, browser, checkout, outcome, issue, duration and watch-status filters; watched state and bookmarks; observed issue counts and matching recordings; local order shortcuts where a valid association exists; diagnostics; and deletion, consent, retention and storage controls.

Recording starts disabled. Capture requires a configured supported checkout, affirmative shopper analytics consent and the administrator's deliberate start action. Payment frames, field values, customer details entered in forms, product content, arbitrary page text, images and remote assets are excluded. Replay reconstructs approved geometry, safe labels and event timing, not the original store's full visual design. Protected replay is not a guarantee of anonymity or legal compliance.

Your hosting provides storage, processing and backups. Free has no commercial monthly recording count. Both Free and Pro use the same resource protections: configurable retention and a storage budget, bounded uploads and per-recording limits. Capture pauses when the selected storage budget is full. Upgrading does not remove safety limits. Bookmarks still expire with their recording.

The optional, separately installed Frictions Pro add-on adds local guided issue review, saved views, team notes, developer briefs and opt-in notifications through your WordPress mail setup. Pro requires a valid first licence activation; activated local tools continue offline and after ordinary updates/support expiry. Free remains useful on its own. No Pro implementation is unlocked inside this package, and this plugin does not install Pro automatically.

A first-recording check gives a manager a short-lived checkout link for a separate shopper browser. It does not enable capture, override consent or prove that every checkout works. The browser reports affirmative consent; the server separately confirms that the exact linked recording has stored events. The checkout helper keeps pre-consent steps in browser memory and sends no verification request before affirmative consent. Checks expire after ten minutes, are bound to their administrator and site, and store a hashed link credential and verification progress locally.

== Pro previews and upgrade choices ==

Free can show clearly labelled Pro previews with screenshots of the actual tools using fictional demonstration data. Viewing an example does not install or activate Pro, save a workflow, enable email, or contact Frictions. Get Pro opens the pricing website and Try Pro live opens a separate demonstration site when you choose those links.

You can hide each contextual suggestion and hide or restore Pro preview navigation. These preferences are stored in this browser and scoped to your WordPress account and this site. Explicit feature-specific Get Pro clicks can also remember that task locally for up to seven days: the tool name, selected filters, recording reference and replay position where relevant. Replay contents, notes and email addresses are not included or sent to the pricing site. After successful licence activation, Continue offers the matching tool and checks whether the recording is still available. You can dismiss the saved task; browser storage restrictions may prevent persistence.

== Privacy and data storage ==

Consented recordings go directly from the shopper's browser to this site's WordPress endpoints. Private database tables contain random recording identifiers, protected geometry and labels, coarse device/browser categories, normalized events and timing. Eligible WooCommerce order associations and trusted payment/order outcomes remain local. No customer/order keys, payment credentials or entered field values are recorded. No replay data is uploaded to Frictions.

The plugin compresses recording chunks; it does not encrypt the WordPress database or hosting backups. People with sufficient database or hosting access may access stored data. Secure your hosting and backups, limit WordPress access, configure your privacy notice and consent integration, and choose suitable retention. Independent backup copies follow your host's policies. Restoring an older backup requires a review of deletion, expiry, access and consent settings.

The default retention is seven days and the default storage budget is 256 MiB. Longer retention applies to new recordings; shortening it can expire older recordings sooner. Both editions allow retention from one to 365 days and storage budgets from 16 to 10,240 MiB. The budget is a recording-data accounting limit, not a measurement of every database page, index, log or backup byte. Check your host's actual capacity. Individual recordings have additional safety bounds, including a 4 MiB uncompressed payload limit, one-hour active lifetime and 30-minute inactivity limit.

Pause and delete controls are available in Free. Consent withdrawal stops capture and requests deletion of that visit's stored local replay. The request must reach the store to complete server deletion; an offline browser cannot guarantee it. Expired recordings cannot be played even if scheduled cleanup runs late. WordPress scheduled tasks remove expired live data; low-traffic sites should use reliable scheduled cron. Deleting local data cannot erase independent hosting backups or copies you exported yourself.

This edition does not require or contact a Frictions replay service. Assets are bundled locally. Optional compatibility sharing and tips/release emails are off by default and independent of recording. No information is sent when viewing or skipping those choices. Your consent-management plugin may separately contact its own provider according to its configuration and policy.

Cookiebot requires a completed affirmative statistics choice. CookieYes requires the supported hosted web-app integration, completed user action and analytics permission; standalone WordPress mode is not supported. A documented custom consent event bridge defaults to denied. Global Privacy Control and Do Not Track stop capture. Administrators and non-production environments are excluded by default. Network activation is unsupported. The supported checkout must use a same-site permalink path; plain checkout URLs using ?page_id= are not supported by the recorder.

== Optional external service ==

Setup and Settings → Communication offer two separate unchecked choices. Compatibility sharing sends your domain, WordPress/WooCommerce/PHP/Frictions Free versions and site language to https://frictions.com/newsletter-api/v1/frictions-welcome/ when you save, then at most weekly while selected. Email signup sends only your chosen email address for Frictions tips and release news; email-only signup omits the domain and installation details. Confirm new subscriptions through the email. Articles and offers are separate preferences; existing subscriptions and preferences are preserved.

Requests include a random connection ID, protected credential and consent version. The service receives consent/request times and the network address. No recordings, checkout data, orders, customer data or plugin list is sent. Opening a screen, skipping, or saving with neither choice selected sends no request. Check status is an explicit request; results show the last checked state, not guaranteed inbox delivery.

Stop either choice in Settings → Communication. Local sharing stops before withdrawal is attempted; retry an unconfirmed remote withdrawal. Stopping email cancels a new signup created by this connection or unsubscribes all its Frictions newsletter topics after confirmation, including articles or offers selected later. Existing subscriptions are not adopted or cancelled by this connection; use the newsletter's preferences/unsubscribe link. Pending status does not verify an existing subscription or inbox delivery. Purchase and account messages are unaffected. Deactivation stops scheduled compatibility reports. Uninstall removes local credentials and controls but does not contact the service, so stop remote choices before uninstalling. Unsubscribe remains available in newsletters. Compatibility details expire 90 days after the last report. A linked newsletter connection remains while its newly created pending or active subscription exists (up to 48 hours pending or 730 days confirmed); unlinked control records expire after 90 days. Protected revocation fingerprints prevent delayed requests restoring stopped choices. Newsletter consent, suppression and backup retention follow the service privacy policy.

Service terms: https://frictions.com/checkout/terms
Privacy policy: https://frictions.com/privacy/

= Optional review invitations =

This release keeps review invitations disabled until the public WordPress.org listing and review address have been verified. It does not look up that address in the background, display an unverified review link, or collect reminder counters while disabled.

When enabled in a future qualified release, a small invitation may appear only inside the Frictions workspace after at least 30 days from your first meaningful playback, five distinct usage days and three different real replays watched. Sample, test and development-site replays do not count. The reminder uses bounded local per-administrator state: the first-use time, up to five UTC dates, up to three salted replay references and your reminder preference. It does not retain replay contents or send usage data externally. Remind me in 30 days postpones it; Don't ask again persists until you explicitly allow reminders again in Settings. Following the review link stops reminders but is not treated as proof of a posted review. Uninstall removes these local counters and preferences. Reviews are optional, with no incentive or sentiment-based selection.

Free and Pro manual: https://frictions.com/downloads/frictions-manual-0.4.1.pdf

== Installation ==

1. Install and activate WooCommerce 11.0 or later, then install and activate Frictions.
2. Individual activation opens Frictions in full screen. Review local storage, retention, access and capture settings; no account connection is needed.
3. Configure and test the supported consent integration on your store's checkout, including refusal and withdrawal.
4. Deliberately enable eligible recording when the supported setup is ready; a clearly labelled sample remains available. Use Verify a real recording for guided preparation of a separate shopper browser and your configured affirmative consent. Development sites require the explicit development setting.
5. Check cleanup scheduling and actual hosting capacity before using capture on a busy store.

The sample does not place an order or demonstrate a real-store recording. If capture pauses or fails, checkout remains available. Test your actual theme, gateways, cache/security plugins and consent configuration before live use.

Existing installations: back up the database and settings, then replace files without uninstalling. Keep Free and Pro release numbers matched; install or update Free first, then Pro without uninstalling. Upgrading from the former hosted 0.2.0 architecture does not automatically import, cancel or erase remote recordings or subscriptions; handle any historical service data separately.

== Frequently Asked Questions ==

= Is Free a trial? =
No. Free has no trial deadline, account gate or commercial recording count. Your hosting capacity, retention and safety limits determine practical recording volume.

= Does this record whole-site browsing? =
No. The recorder loads only on the configured supported checkout, excluding order-pay, confirmation, account and other pages. Third-party checkout builders and off-site payment pages are outside this scope.

= Does it capture card details? =
Payment regions and frames are blocked. Entered values and arbitrary page text are excluded before payload creation. Test custom checkout fields and consent behavior on staging before live use.

= Is every order correlated? =
No. Correlation needs an eligible consented recording and an unambiguous local WooCommerce session. Ambiguous tabs, drafts and expired, deleted or revoked sessions are not guessed. Coverage beyond eligible recorded checkout visits is unknown.

= Can my staff access replays? =
Administrators receive separate frictions_view and frictions_manage capabilities. Delegate only necessary access with your normal role-management process. Current capabilities and request protections are checked on every action.

= What happens when I deactivate or uninstall? =
Deactivation stops recording and jobs while preserving local data for reactivation. Uninstalling Free permanently removes its local settings, recordings and registered Pro data from the current site. Uninstalling Pro alone removes Pro workflow data and leaves Free recordings available. Back up anything required before uninstalling. No external deletion or billing request is made. Independent hosting backups are not erased.

= Can I share a public replay link? =
Public bearer links and invited public clips are not included. Authorized staff review recordings through WordPress. The separate Pro add-on can create a user-reviewed developer brief; exported files are controlled by their recipients.

== Changelog ==

= 0.4.2 =
* Discover Pro with clearly labelled local previews and real interface examples.
* Relevant upgrade suggestions can be hidden individually; preview navigation can be hidden and restored.
* Explicit upgrade choices remember a local task for seven days and offer to continue after licence activation.


= 0.4.1 =
* Preserve capture and setup preferences through upgrades.
* Add a local meaningful-usage review invitation, held disabled until a public WordPress.org listing is verified.
* Show the matching Pro activation state and link to the Free and Pro manual.

= 0.4.0 =
* Open the focused setup after individual activation and preserve completed setup during updates.
* Add independent optional compatibility sharing and confirmed tips/release email signup, with explicit status and withdrawal controls.
* Show useful Pro workflow examples with live demo and plan links after setup.
* Link installed Pro licence management from Settings while keeping Free recording independent.


= 0.3.7 =
* Validate all bulk-delete recording IDs before deduplication or database work.

= 0.3.6 =
* Keep deleted order associations cleared when checkout callbacks overlap.
* Match date filters to the store timezone and translate status and filter labels.
* Include complete browser build configuration for reproducible packaged source.

= 0.3.5 =
* Simplify consent setup and guide the real-recording check one step at a time.
* Explain recording-check prerequisites before creating its private link.
* Fit replay to the available screen and keep playback controls easier to reach.

= 0.3.4 =
* Add an explicit consent-aware check for the first real recording.
* Add compact capture status, quick recording filters and accurate filtered empty states.
* Use consistent bookmark labels and a clearly labelled visual Pro walkthrough.
* Make matched Free-first installation and update instructions consistent.

= 0.3.3 =
* Add a fullscreen workspace, grouped navigation, focused settings and replay tabs, and local appearance preferences.
* Preserve existing data and protect unsaved edits when changing views.

= 0.3.2 =
* Preserve completed setup and recording preferences when updating a connected local 0.3.0 or 0.3.1 installation.
* Explain Pro with optional local examples beside Free tools and a Free/Pro comparison. Free features are unchanged; suggestions can be hidden and restored in this browser.

= 0.3.1 =
* Correct the Tested up to readme header to 7.1. Plugin functionality is unchanged.

= 0.3.0 =
* Moved recordings and processing to private tables on the customer's WordPress hosting.
* Removed mandatory service connection, hosted plan billing and commercial recording allowances.
* Added local retention, storage budgets, ingestion controls and cleanup in Free.
* Preserved protected structural playback, consent, permissions and ordinary investigation tools.
* Added extension points for separately installed local Pro workflows; excluded public replay sharing.

= 0.2.0 =
* Historical hosted candidate: added ordinary Free investigation filters and scoped issue observations.
* Added guided hosted Pro review and a separate developer-brief companion.

= 0.1.0 =
* Initial hosted staging implementation with protected structural playback and local order correlation.

== Developer and source information ==

Code and bundled assets are GPL-compatible. Readable PHP source is in the plugin root and includes/, with the PHP event-schema validator in includes/class-frictions-schema.php. Readable admin and other browser scripts are in assets/. Recorder/player TypeScript, recorder event types and validation, the pinned build lockfile and build instructions are in source/. With Node 24.21.0, run npm ci --ignore-scripts and npm run build from source/ to reproduce the three recorder/player assets. No external TypeScript configuration is required. There is no remote executable-code loader or replay-driven loading of third-party scripts or assets.
