Privacy preferences

EngX uses optional analytics to understand how the platform is used, measure performance, and improve the experience. Analytics may involve third-party service providers. You can change this at any time in Settings → Privacy. Privacy Policy

EngXHome

Tracking & Analytics Notice

Version 1.4 — Effective 2026-10-02

We call this a "Tracking & Analytics Notice" rather than a "Cookie Policy" because not everything described here uses a cookie — EngX's own consent-preference storage uses localStorage, not a cookie. This page describes exactly what runs, when, and how to control it.

1. The short version

No optional analytics runs until you explicitly click "Allow analytics." This applies to every visitor — anonymous or signed in — every time, with no exceptions and no temporary window where optional tracking runs before you decide. EngX does maintain non-identifying aggregate operational counters for the public practice feature regardless of this choice; those counters do not contain a user/session identifier and are described in §10.

2. What EngX uses

  • PostHog — behavioral analytics: page views, clicks, and feature interactions. Session recording is explicitly disabled.
  • Vercel Web Analytics — page-view analytics (URL path, referrer, User-Agent).
  • Vercel Speed Insights — performance analytics (Core Web Vitals: load time, layout stability, responsiveness).
  • Google Ads conversion measurement — measures whether a consented ad visitor later completes a verified subscription purchase. EngX sends the transaction value, currency, and a Stripe Checkout Session identifier for de-duplication; raw card details are never sent by EngX.
  • Reddit advertising measurement — receives consent-gated conversion events configured through Google Tag Manager. Verified purchases use Stripe-confirmed value, currency, subscription tier, and Checkout Session identifiers; EngX does not send raw card details.
  • Google Tag Manager — a tag-delivery layer used to load optional measurement integrations only after analytics consent. GTM receives an EngX consent state before its initial container event, and tags in the container must require that state to be granted.

All six are optional and are gated behind the same single analytics consent decision — there is no way to allow one and block another individually today.

3. Before you decide (no consent yet)

On your first visit, or any time you haven't made a choice, none of the optional tools above are initialized. Google Tag Manager is not loaded, and no optional analytics or Google Ads conversion events are captured. This is true whether you're browsing anonymously or signed in.

4. After you grant consent

Once you click "Allow analytics" (in the banner or in Settings → Privacy), the optional tools initialize:

  • PostHog begins capturing page views and interaction events (no session recording).
  • Vercel Analytics mounts and begins sending page-view events.
  • Speed Insights mounts and begins sending Core Web Vitals events.
  • The Google Ads tag becomes available for conversion measurement. A purchase conversion is sent only after EngX verifies the completed Stripe Checkout Session server-side.
  • Google Tag Manager loads after consent and receivesengx_analytics_consent = granted before its initial container event.

Your consent decision is recorded before any of these initialize, not after.

5. If you decline or withdraw consent

When you decline, or later withdraw consent from Settings → Privacy:

  • No further PostHog events are captured; your PostHog identity is reset and its local storage/cookie entries are cleared.
  • The Vercel Analytics component is removed from the page; no further page-view events are sent.
  • The Speed Insights component is removed from the page; no further performance events are sent.
  • Google Ads consent is set to denied and EngX clears Google advertising cookies it can identify (including _gcl_* cookies); no new EngX purchase conversions are reported while consent remains denied.
  • Google Tag Manager receives engx_analytics_consent = denied. The already-loaded container script may remain in memory until the page is closed, so every optional tag inside GTM must require the EngX consent variable to equal granted before firing.

Declining or withdrawing analytics consent never affects your ability to use EngX — your account, subscription, and learning progress are unaffected.

6. Storage this uses

  • Your analytics preference itself: stored in localStorage under the key engx_analytics_consent, values "granted" or "denied". This is a first-party, browser-local value — it is never transmitted to our servers automatically and is not itself a tracking identifier.
  • PostHog (only once you've granted consent): writes its own localStorage and cookie entries to remember your analytics session. These are cleared on withdrawal (§5).
  • Vercel Analytics / Speed Insights: write no localStorage, sessionStorage, or cookies in your browser at all, under any consent state.
  • Google Ads (only after consent): Google's advertising tag may create advertising/measurement identifiers such as _gcl_* cookies in connection with ad-click attribution and conversion measurement.

7. Anonymous visitors vs. signed-in users

Anonymous: your choice is remembered in localStorage only, local to that browser.

Signed in: your choice is additionally recorded in EngX's server-side consent ledger, tied to your account, so it's consistent across devices where you're signed in. If you were anonymous and had granted consent, then sign in with no existing server-side record for your account, EngX does not silently carry over the anonymous preference — you're asked again, so the recorded consent is always one you made while authenticated.

8. Session recording

Session recording is disabled in the current EngX application configuration. Historical PostHog recordings were created before that safeguard was enforced and may remain in PostHog until they are deleted or expire under the configured retention period. EngX does not rely on those recordings for advertising conversion measurement.

9. How to change your choice

At any time, go to Settings → Privacy Centre → Analytics to see your current status and change it.

10. Core operational data (not optional analytics)

The anonymous public-problem feature maintains daily aggregate counts for library views, problem views, first answer attempts, answer submissions, correct submissions, and completed problems. The counter rows store only the UTC date, metric name, public problem identifier/slug where applicable, and a total count. They do not store an IP address, user ID, anonymous or session ID, referrer, UTM/ad identifier, browser/device metadata, or the answer a visitor submitted. These counts are not unique-visitor counts: refreshing or retrying can increase a total. They are used to operate and evaluate the core public-practice feature and are not forwarded to PostHog, Google Ads, or Reddit.

Hosting-level data

Separately from the optional analytics above, our hosting provider (Vercel) necessarily processes standard web request data (such as IP address) to serve the site at all, the same as any web host. This is not gated by analytics consent because it isn't optional analytics — it's how any request reaches our servers. See our Privacy Policy §10.

11. Additional details

Our analytics preference is stored in first-party browser storage so EngX can remember your choice. Hosting providers may still process request-level IP and device information to deliver and secure the site even when optional analytics is declined. Some analytics and advertising providers may process information outside Canada; see our Privacy Policyfor more information about service providers and international processing.

Privacy PolicyTerms of ServiceTracking & Analytics NoticePrivacy Centre