Cookies and similar technologies
The short version
Affinira's own code sets seven families of cookie, and which of them a site can set depends on how it was set up. Two evaluation cookies — a client-area sign-in for local review and a saved profile snapshot — depend on one switch that is off whenever the platform reports Vercel. An administrator sign-in cookie is set only where the administrator console is configured, and only when an administrator signs in to it. Separately, where a site is set up for accounts, signing in sets the account session cookies the sign-in provider needs, and each request to the account area refreshes them; they hold a session and nothing about you beyond it. Before any sign-in, asking for a confirmation or reset email sets one short-lived verifier cookie the provider needs to complete that link when it comes back. Where the site holds the secret that brings a confirmation or reset link back here, short-lived cookies of Affinira's own are set on those journeys and nowhere else: a signed pending sign-up marker holding the address this browser just signed up with, so that asking for a new confirmation email needs nothing typed, and, on the live account service, a signed recovery marker bound to you and to the session a reset link established, which is what authorises choosing a new password; a signed pending paid marker holding the email address and Pro or Ultra plan choice for up to one hour while you enter a code; a signed paid link marker holding the plan choice and account ID for up to five minutes after a verified link callback; a signed pending ambassador marker holding the entered email address and invitation hash for up to one hour while you enter a code; and, when you sign up after picking Pro or Ultra on the pricing page, a cookie holding that plan choice and your account ID, kept for up to 30 days, so Billing can offer to finish checkout if you leave it (it authorises nothing, and it is removed when you sign out or dismiss the offer); all are first-party, strictly necessary for those journeys, and expire on their own. When you open an ambassador invitation link with invitations enabled, an HttpOnly cookie keeps that link through email verification or sign-in in this browser. It expires after 14 days and is removed when you accept or dismiss the invitation. When you choose Start a team on the pricing page and are not signed in, an HttpOnly cookie keeps the billing period and seat count you picked while you create an account or sign in. It holds nothing else, buys nothing, expires after one hour, and is removed when checkout opens or you sign out. When you open a data download link from our email while signed out and choose Sign in, an HttpOnly cookie keeps that link while you sign in, so you come back to it. It is sent only to your account pages, expires after 15 minutes, and is removed as soon as you are back. When a team admin connects a CRM (Zoho or HubSpot), we set one short-lived cookie that links the CRM's reply back to that admin. It is strictly necessary, sent only to the return address, and deleted on return or after 10 minutes. When you connect Claude or ChatGPT to your account, we set one cookie that ties the connection request to the browser you started it in, so it can be approved only there. It is strictly necessary and expires after an hour. When you open Affinira from the Android app, one cookie records that, so purchase options are hidden in the app. It holds nothing else and lasts up to 400 days, renewed while you use the app; a page of Affinira opened in Chrome on the same phone clears it. To tell the two apart, the app's own tab keeps a marker in its sessionStorage (the value 1, nothing else), which is discarded when that tab closes and is never sent to us. If your Android app can offer more choices for the card on your lock screen, it tells us when it opens, and a cookie records that, so the QR page shows those choices only in an app that can use them. It holds nothing else. It lasts up to 180 days, is renewed each time the app opens, and is removed when an older version of the app opens Affinira. In the Android app, a cookie holds a random code tied to your account (not your name or email), so the app can open your saved screens instantly and never show them to another account. It is deleted when you sign out, and saved screens are not used after 7 days without a connection. If you sign out while offline, a cookie remembers it, so you are also signed out on our side as soon as you are back online. It holds nothing else and is removed once that is done. When you open a website page from the Android app and the website needs your go-ahead to sign you in, we set a short-lived cookie that links your answer to that request. It holds a one-time reference to the request and your app account's email address, encrypted. It is strictly necessary and is deleted once you answer, or after 10 minutes. When you sign in with a passkey, or add one in Settings, we set a short-lived cookie that links your device's answer to the request you started in this browser. It holds a one-time reference to that request (and, when you add a passkey, your account ID). It is strictly necessary and is deleted once the answer arrives, or after 5 minutes. That switch checks for Vercel and nothing else: it does not detect a local machine, and it would not by itself stop these cookies being enabled on some other host. So this describes the configuration the site is built for, not a guarantee about every environment. What follows describes Affinira's own code; it does not describe cookies the hosting platform may set in front of the site, which we have not enumerated here. It offers exactly one optional technology — Vercel Web Analytics, a cookieless page-view counter — and it loads only if you affirmatively accept it. Rejecting it, or simply never answering, loads nothing. The one thing stored before anything else can run is your consent choice itself, in your browser's localStorage, because that is how "no" stays "no".
Cookie settings
Your consent, changeable any time. Accepting and rejecting are the same size, the same effort, and equally reversible. Withdrawing consent stops analytics collection immediately — there is no wind-down period.
Your current choice
Reading your saved choice…
Changing your mind rewrites the single stored choice; rejecting after accepting withdraws consent and stops collection at once, in every open tab.
What is actually in use
A cookie policy usually presents a table of cookie categories. Ours would still be an empty table — no technology below is a cookie — so instead here is the list of what Affinira's own code asks your browser to keep or run in the configuration this site is built for, grouped the way a consent banner groups things: what is strictly necessary, and what is optional. It is complete for that scope. It does not cover anything the hosting platform may set in front of the site, which is not ours to enumerate.
Cookies set by these pages: none
The marketing pages you are reading set no cookies, first-party or third-party. Beyond the cookies described above, the product screens set none of Affinira's own. There is no advertising pixel and no embedded third-party content that could set one. Vercel Web Analytics, described below, is cookieless by design — it sets no cookie even when you accept it.
What exists in the code, and does not run here
Two evaluation cookies are written in Affinira's source. Both depend on the same switch described above, which is off whenever the platform reports Vercel; the account session cookies described above are a separate family, set only where accounts are available, at sign-in and, for the link verifier, when a confirmation or reset link is requested. They exist for running the product on a developer machine with that switch deliberately turned on. They are not one kind of thing, so they are listed separately:
- A client-area sign-in for local review. It holds the review account's email address, display name and an expiry, so the signed-in screens can be walked through. It lasts eight hours and is deleted when you sign out.
- A saved profile snapshot. This one contains the saving account's email identifier and a profile snapshot. It is not an authentication session or proof of sign-in: the signed-in screens are opened by the sign-in cookie above, and this snapshot is ignored unless it belongs to the account currently signed in. What it holds is the email address of the review account that saved it, together with whatever had been typed into the profile editor — a name, headline, company, short bio, location, pronouns, up to six contact channels such as an email address, phone number, WhatsApp, LinkedIn, website or booking link with the visibility chosen for each, any links, and whether the profile had been published. Not every one of those is necessarily filled in; it holds what was entered. It is written when a profile edit is saved and lasts eight hours from that moment, so it can outlast the sign-in cookie above, which is why the product checks that it belongs to the account now signed in and discards it when it does not. It is deleted on sign-out. Its contents are stored as base64url-encoded JSON and are not signed — that encoding is not encryption, and anyone with the cookie can read it.
An administrator sign-in, where the console is configured
An administrator sign-in cookie is set only where the administrator console is configured, and only when an administrator signs in to it. It is a signed token naming which administrator signed in and what role they hold. It lasts eight hours, is limited to the administrator screens, and is deleted when they sign out of them. It is never set by visiting these pages, and nothing about it depends on anything you do here.
Strictly necessary: your consent choice, in localStorage
When you answer the consent banner — either way — the choice is kept in your browser's localStorage under a single entry, with the date you decided and a version of the question you answered. It contains no identifier and is never sent anywhere; it exists solely so the site remembers your answer instead of asking on every page. If the question ever materially changes, the version changes and you are asked again rather than having an old answer reinterpreted.
Optional — analytics: Vercel Web Analytics, off until you accept
Vercel Web Analytics is enabled to measure aggregate page views on public marketing and resource pages only. It does not run on product screens, public profiles, checkout or account pages. Reported page URLs exclude query strings and fragments. Before you accept, no analytics script loads and no analytics event is sent. Rejecting or ignoring the banner keeps analytics off; withdrawing consent here stops further collection. Vercel uses a hash derived from the incoming request rather than analytics cookies to distinguish visitors and says visitor sessions are automatically discarded after 24 hours. Our privacy policy describes the other analytics data processed. Your consent choice is stored separately in your browser’s localStorage.
Theme preference: localStorage, on product screens only
If you change the light/dark theme inside the product, that choice is kept in your browser's localStorage so it survives between visits. It never leaves your device, is not sent to us, and identifies nothing. Neither this nor the consent choice is a cookie; both are listed here because "similar technologies" deserve the same honesty. What product flows keep in sessionStorage is the entry below.
Fingerprint sign-in notes: in the Android app only
If you turn on fingerprint sign-in in the Android app, the app keeps a note in its own storage on your phone that it is set up, so Sign in can open your phone’s fingerprint prompt straight away. If you choose Not now, a second note stops the app asking again. Neither note holds your name, email address or any account detail, neither is sent to us, and both stay when you sign out. Removing your passkey in Settings on that phone removes the first note.
Session storage: what two product flows keep for one tab
Two product flows keep something in your browser's sessionStorage, which the browser discards when the tab closes. The onboarding flow keeps the draft profile you typed, so the preview screen can show it. The exchange form on a public profile keeps what you submitted through it: your name and email address, a phone number and a LinkedIn URL if you chose to give them, which profile you were visiting, and the wording of the consent you agreed to. The form writes that record, reads it back to check it arrived, and tells you it could not be saved — removing it — if the read-back disagrees. Neither entry is a cookie, and neither is sent to us; the profile owner receives nothing. The privacy policy covers both alongside everything else the prototype keeps.
Your choices
The settings above change or withdraw analytics consent whenever you like, and a "Cookie settings" link in the footer of every public page brings you back here. Your browser's "clear site data" controls remove the stored choice and the theme preference like any other localStorage — after which the site simply asks again. Questions about any of this reach us at hello@affinira.com, and the privacy policy covers the small amount of personal data the site does handle.