Legal
Cookie Notice
What cookies and browser storage this website uses, and what it does not use them for.
Last updated: 4 October 2026
This notice explains what this website stores on your device and what it reads back, and how to stop it. It covers cookies and everything the law treats in the same way, including browser local storage and session storage. It is written to describe what the site actually does. The Privacy Policy explains what happens to the information afterwards.
The rules are in regulation 6 of the Privacy and Electronic Communications Regulations 2003, as amended by the Data (Use and Access) Act 2025. Consent is needed unless an exception applies. The strictly necessary items below rely on the exception for things without which a service you asked for would not work, and the returning-visitor marker relies on the exception for adapting the site to a preference you have indicated. The analytics identifiers are different: they are not strictly necessary, so they are used only with your consent. They stay off until you accept analytics, using the banner shown on your first visit or the control under “How to change your choice” below, and no browser-linked progress event is recorded while your choice is undecided.
This site sets no advertising cookies, no cross-site tracking cookies and no third-party marketing cookies of any kind, and it never has.
Cookies
Up to three first-party cookies may be set, only in the circumstances below. None is used for advertising, cross-site tracking or marketing. nb_client is set only if you sign in to the client area. It holds a random session token and nothing else, is restricted to the sign-in area of the site, cannot be read by scripts or sent to another site, and expires after seven days or when you sign out, whichever comes first. It exists so that you stay signed in securely. A matching cookie, nb_admin, is set only for my own administrative sign-in.
nb_self is a separate marker for one of my own browsers. It contains only the value “1”; it grants no access, contains no identity or session token, cannot be read by scripts and is not sent to another site. It is set when I open the private office, or when I deliberately mark another browser as mine, so that my own visits are excluded from audience measurement. It lasts for up to one year and is not cleared merely by signing out. Unless a client signs in or I mark a browser as my own, this site sets no cookies at all.
Storage in your browser
Eleven things may be stored in your browser. Four are session-only and disappear no later than when you close the tab; seven persist until you clear this site’s storage, and one of those seven, an unfinished brief, also deletes itself after thirty days.
- A browser-journey measurement identifier (local storage, key
nb_fid). A random identifier with no information about you in it. It is created only after you accept analytics and the site first records a page view or another measured step. It lets page views and steps such as service or brief navigation and form starts be joined into one browser journey over time. Because it persists between visits, it is not a person count or a session count and may be reused on later visits from the same browser. It is not used for advertising, cannot follow you to another website and is not sent to Stripe. Progress events recorded against it are deleted automatically after 425 days. It stays off until you accept analytics, and you can withdraw or give that consent at any time using the control under “How to change your choice” below. - A measurement session identifier (session storage, key
nb_fsid). With analytics consent, a separate random identifier groups measured activity in this browser tab into a session. It contains no information about you and is separate from the longer-livednb_fidjourney identifier. It is replaced after 30 minutes without measured activity and is cleared when you withdraw consent or close the tab. - Acquisition attribution (local storage, key
nb_acquisition). With analytics consent, this site remembers the first and latest recorded source, campaign tags and landing page for this browser. Referrer paths and unrelated query parameters are not retained. This attribution is removed from browser storage when you withdraw consent and is no longer reused after 425 days. If you submit an enquiry or complete a purchase, source information can be retained with that commercial record. A separate, short-lived checkout reference can pass to Stripe; neither the browser-journey identifier nor the measurement session identifier is sent to Stripe. - Acquisition tab marker (session storage, key
nb_acquisition_active). With analytics consent, records that acquisition has been recorded for this browser in this tab. It is cleared when you withdraw consent or close the tab. - A returning-visitor marker (local storage, key
nb-visitor). Records that you have used the AI assistant before, when you last did so, and your first name if you have given it in an enquiry, so that the assistant can greet you rather than start from nothing. It persists until you clear this site's storage. Your first name and the fact that you are returning are sent to the AI provider with each message so the assistant can use them; the Privacy Policy explains that. This is relied on under the exception for adapting the site to your indicated preference. - The current chat (session storage, key
nb-chat-v1). Holds the active conversation, a random session identifier and the time of the last message from you or the assistant so that the chat can survive moving between pages and expire correctly. It is cleared after five minutes without a message, or when you close the tab. Strictly necessary for the chat you asked for. - Your answer to the newsletter invitation (local storage, key
nb_np). Written when the occasional-insights invitation is shown to you, and again if you close it or subscribe, so that it is not shown to you repeatedly. It records nothing but that fact and the date; it holds no email address. Being shown the invitation, or closing it, is honoured for 24 hours, after which the site may invite you once more; subscribing stops the invitation permanently. Removing it means the invitation may be shown again. Strictly necessary to give effect to a preference you have expressed. - A private-office marker (local storage, key
nb_office_seen). Written only after I open the private office, and contains only the value “1”. It prevents the occasional-insights invitation appearing on that same browser; it gives no access, is not sent anywhere, and remains until that browser’s storage is cleared. - Your measurement choice (local storage, key
nb_consent). Written when you accept or decline analytics, whether from the banner or the control below, so that the choice is remembered on later visits and the banner is not shown again. It records nothing but that choice (“granted” or “denied”); removing it restores the default, which is off, and the banner will ask again. Strictly necessary to give effect to a preference you have expressed. - Your positioning statement generator answers (session storage, key
nb_positioning_review_context). Written by the free positioning statement generator so that your chosen statement can be carried into the enquiry form if you decide to ask for a review. Cleared when you close the tab. Strictly necessary for a feature you asked for. - Your unfinished brief (local storage, key
nb-brief-draft-v1:<service>). Written as you type into the Submit a Brief form, so that closing the tab to go and find a figure does not lose everything you have written. It holds only what you typed into that form, it stays on this device, and it is not sent to me at any point before you press send. It is deleted the moment you submit the brief, and you can delete it yourself at any time with the “Discard saved answers” control on the form. Anything still unsent is removed automatically after thirty days. This is your own draft, kept for your convenience, so it is treated as strictly necessary for a service you asked for and does not depend on the analytics choice.
With analytics consent, an approximate live activity count also measures visible public tabs. A separate random token exists only in the page's memory, is not saved in a cookie or browser storage and is not joined to your journey, enquiry or purchase. While the page is visible, it reports the public page and a broad source category every 30 seconds. The count uses a 90-second activity window; temporary records expire after 120 seconds. No IP address, fingerprint, query string or referrer text is stored in those records. Hiding or closing the page, or withdrawing consent, stops the reports and requests removal. Detected bots, private-office browsers, Do Not Track and Global Privacy Control signals, and the existing EEA geographic exclusion are honoured.
If analytics consent is still granted when you submit an enquiry or start a purchase checkout, the site may copy the random browser-journey and measurement session identifiers into the resulting enquiry or completed purchase record. If an enquiry later leads directly to a client, booking or invoice record, the same identifiers may follow that record. This allows a commercial outcome to be compared with the consented browser journey that produced it without using your email address or another personal detail as the analytics join key. Once stored with a named commercial record, the random identifiers are pseudonymous because they can be associated with that record. They and their linkage date are cleared automatically 425 days after the first valid link, or sooner following a verified erasure request; the underlying commercial record then continues under its own retention period. No identifiers are populated where analytics consent is absent.
For a purchase checkout, attribution and the consented identifiers may first be held on this site against an opaque checkout reference for up to 30 days. Stripe receives only that reference. If payment completes, the attribution and identifiers can be transferred to the purchase record; otherwise the temporary handoff expires.
The banner shown on your first visit records your choice in the nb_consent key described above, so once you have accepted or declined it is not shown again on this browser unless you clear this site’s storage.
Measurement by Cloudflare
Cloudflare Web Analytics is used on this site. This site loads a small script from static.cloudflareinsights.com on its public pages, which reports page views to cloudflareinsights.com. These are the only third-party addresses this site is permitted to contact; the content security policy blocks everything else. The service sets no cookies and stores nothing on your device. Cloudflare processes technical information including your IP address in order to count visits and produce aggregate figures, which pages are read, roughly which countries visitors come from, which devices are used, and does not use it to build a profile of you or to follow you between websites. I see only the aggregate figures. Cloudflare also processes your IP address as the site's host and network protection, before any of my own code runs.
Other third-party requests
Typefaces are served from this site's own domain, so displaying the page requires no request to any font service. Submitting the enquiry form or the newsletter form posts to this site's own domain; my email provider, Resend, then delivers the message, and sets nothing in your browser. If you use the AI assistant, your messages, the visible text of the page you are on and the returning-visitor details described above are sent to Anthropic, and to Cloudflare, to generate the reply; nothing is set in your browser by either. There are no social media buttons, embedded videos, maps, comment systems, chat widgets other than my own, or advertising tags anywhere on this site.
How to change your choice, and how to remove what is stored
The simplest and most complete control is your browser's own. In Chrome, Edge, Firefox and Safari you can block or clear site data for a single site, and doing that for this site removes the browser-journey identifier, the measurement session identifier and the acquisition storage, the returning-visitor marker, the chat and the sign-in cookie, and prevents them being created again for as long as you keep the block in place. Blocking them will not stop you reading the site; you will not stay signed in to the client area, and the assistant will not remember you.
You can change your choice here at any time, in this browser, without changing any browser settings:
Measurement is off in this browser unless you have accepted it.
Turning measurement off stops future progress events and immediately removes nb_fid, nb_fsid, nb_acquisition and nb_acquisition_active from this browser. It also prevents those identifiers being copied into a later enquiry or checkout from this browser. It does not by itself erase an enquiry, purchase or other commercial record already submitted, or analytics linkage already stored with that record. Existing linkage is cleared automatically after 425 days, or sooner following a verified erasure request. The choice is remembered on this browser until you change it or clear this site’s storage; because it is remembered in your browser rather than on a server, you would set it again on another browser or device.
You can also object or ask for erasure by email. Write to [email protected]. Where the random identifiers have been linked to your submitted record, I can use that existing linkage to delete the matching progress events and clear the identifiers from commercial records. An enquiry, purchase or financial record may still be retained where another lawful retention requirement applies, but without the analytics linkage.
If you are in the European Economic Area, measurement is off unless you accept it, exactly as it is for everyone. As an additional safeguard, the server records no progress event for visitors whose connection places them in an EEA country even if measurement has been accepted, so nothing is counted for EEA visitors either way.
Cloudflare Web Analytics is loaded by this site rather than by the network, so it is not present on every page. It is not loaded on the private office or the client area, and it is not loaded in a browser that has been used to sign in to the private office; my own visits are excluded from my figures so that they measure visitors rather than me. Blocking static.cloudflareinsights.com in your browser or a content blocker prevents it entirely. Separately, Cloudflare counts requests at its network edge as this site’s host, before any of my code runs; that counting is a property of the hosting and cannot be switched off from the page.
Changes to this notice
If new storage is introduced, this notice will be updated before it is set, and the date at the top will show when. Any technology that is not covered by one of the exceptions above will be introduced only behind a proper consent choice, not a dismiss-only banner.
Questions
Use the enquiry form on the contact page for general questions, or [email protected] for anything about your personal data. See also the Privacy Policy.