Skip to content
PRIVACY

How this site
handles data.

JS Labs operates this site to show the work and the public offers. This page explains what data it collects, why and what happens to it.

JS Labs · Last updated 13 October 2026

Analytics

The site uses Vercel Analytics and Vercel Speed Insights to understand aggregate traffic and page performance, including which pages are visited and how fast they load. These tools are designed to work without cookies and without tracking you across other sites, and I only ever see anonymised, aggregated numbers.

The site uses PostHog for product and web analytics. This can include page views and page exits, clicks and other interactions, form submissions, heatmaps, browser performance metrics, client errors, and session replays. URLs, referrers, browser and device details, and a first-party identifier may be included so visits and journeys can be understood.

Replay input values are masked. Console logs, network headers, and request or response bodies are not recorded, and sensitive areas are blocked from replay. Email drafts and prepared enquiry details are not included in analytics. URL fragments and unrecognised query parameters are removed; limited campaign parameters are retained. PostHog loads only after you allow analytics, and never when your browser sends Do Not Track or Global Privacy Control. PostHog is the processor for this analytics data. I use a dedicated JS Labs project in my own PostHog US Cloud account, not an ad network.

Google Analytics 4 measures page views and selected interactions, including interest in offers and contact actions. Google Tag Manager loads the Google tags after you allow analytics. Google is the processor for this data; it can receive browser and device details, approved campaign parameters and a cookie identifier to understand visits. We send only public page paths and selected event fields. Names, email addresses, email drafts, enquiry answers, private URL parameters and URL fragments are excluded from the event data we send.

Google ad measurement

When configured, Google ad measurement helps connect advertising to visits and completed enquiries. It requires both permission for analytics and your separate permission for Google ad measurement. Before you allow analytics, no Google measurement tags load. Declining or withdrawing analytics also turns Google ad measurement off. Do Not Track and Global Privacy Control override both choices.

Google can use cookies to measure ad results. Personalised ads, remarketing and enhanced conversions are not enabled by this setup. A lead conversion is recorded only after the enquiry form confirms that the backend accepted a submission. Opening an email draft, copying a message or clicking a contact link does not count as a completed enquiry. Form answers and contact details are not sent to Google by these tags.

Change your choice below to stop future ad measurement. See Google's privacy policy for how Google handles data.

Google measurement is currently disabled.

OpenAI ad measurement

When configured, this site can load the OpenAI measurement pixel to understand which ChatGPT ads lead to page views and contact actions. It loads only after you allow ad measurement, and stays off when your browser sends Do Not Track or Global Privacy Control. You can withdraw permission below to stop future measurement events.

The pixel can store first-party attribution cookies, including the OpenAI click reference from an ad link. It sends page views and events for opening the contact email draft or successfully copying it to OpenAI. These actions do not confirm that an email was sent or that a meeting was booked. Our event payloads contain no message text, email addresses, or URL query parameters.

If automatic advanced matching is enabled for the pixel in Ads Manager, OpenAI's SDK may detect supported customer information on the page and hash it in your browser before sending it. OpenAI receives measurement data to attribute outcomes to ads. These events opt out of future user-level personalization. See OpenAI's privacy policy for how OpenAI handles data.

OpenAI ad measurement is currently disabled.

CRM visitor tracking

The site loads a small script from the JS Labs CRM, which I run myself. It sets two first-party cookies: a random visitor identifier and a record of your first visit (landing page, referrer and any UTM or gclid campaign parameters). Both last up to 395 days. It sends page views, outbound link and button clicks and the current referrer and campaign details to the CRM so I can see which pages and channels lead to a conversation.

It runs only on jslabs.xyz, it does not fire when your browser sends Do Not Track or Global Privacy Control, and there is no advertising network or third-party processor behind it. The data stays in the CRM, which JS Labs operates on Vercel. Delete the cookies or email me and the record goes with them.

Intercom and Fin

Once you allow analytics and chat, the site loads Intercom Messenger so you can talk to Fin, the Intercom assistant, or leave a message. Intercom sets a cookie so a conversation can continue in the same browser. Treat that chat like a public conversation: don't paste anything sensitive into it. Intercom is the processor for those messages.

Error monitoring

The site can report technical errors to Sentry so I can fix breakages. These reports describe what went wrong in the code. They are not used to profile visitors.

Contact, email, and downloads

/contact embeds an enquiry form hosted by Zite. Submitting it sends your contact details, selected service, and answers to the JS Labs CRM so I can reply and keep track of the conversation. Zite is the processor for that submission. Prepared enquiry details remain editable, and nothing is submitted until you choose to send it. The optional email draft stays in your browser until you send it using your mail app.

If you arrived through a URL containing /contact?path=, the page notes which offer your message is about. Email jason@jslabs.xyz still works if you would rather write than fill in a form. I do not use these contact channels to build a newsletter list.

Free skills and workflows are listed on JS Labs Space (jslabs.space), a separate JS Labs site. Downloads happen there, not here. Paid downloads on /shop are sold through Shopify. Choosing Buy sends the product you chose and your IP address to Shopify to create a cart, then takes you to Shopify's checkout. Payment details and order email are handled by Shopify under its own privacy policy; this site does not see or store them.

AgentID sign-in

Sign in with AgentID is optional. Continue with AgentID opens AgentID (auth.agentid.com) so you can approve a sign-in. After approval, this site keeps a session cookie for up to twelve hours and shows the email (or name) AgentID returns for that session. Signing out from the menu or from /sign-in clears that cookie here.

What this site doesn't do

This site does not sell your data or quietly build a newsletter list. Optional OpenAI ad measurement shares the events described above only after you allow it. The CRM tracker is operated by JS Labs and keeps its data in the JS Labs CRM.

Questions

If you want anything you've sent me deleted, or you have any question about the above, email jason@jslabs.xyz and I'll sort it out.