Cookies & site storage
What this site keeps in your browser, why, and how long it lasts. It is a short list.
Effective
- 01
The short version
This site sets one cookie. It is called NEXT_LOCALE, it holds a two-letter language code (en or es), and its whole job is to remember which language you are reading so a link without a language in it takes you to the right version. It is set by the site itself, it lasts until you close your browser, and it is not used to identify you or follow you anywhere.
There are no advertising trackers, no analytics tags and no third-party pixels. The site also uses your browser's sessionStorage for two functional purposes, described below; sessionStorage is cleared when you close the tab and nothing in it is readable by another site.
- 02
Enquiry attribution
Key: aperture.firstTouch (sessionStorage).
When you first arrive, the site records the page you landed on and the time, so that if you browse to another page before sending an enquiry we still know where you came in. When you actually submit the form, that record is sent with your message alongside: the five standard campaign parameters (utm_source, utm_medium, utm_campaign, utm_term, utm_content) if they were present in the link you followed; the referring page your browser reports; the page you submitted from; and the time of that submission.
Why: so the studio can tell which work is bringing people in and stop paying for what is not. Every value is stripped to a safe character set and truncated before it is stored or sent. This is kept in sessionStorage rather than in a cookie, no advertising identifier is used, and no raw IP address is stored with the enquiry. If your browser blocks storage — private browsing, for example — the form still works and simply records less.
- 03
Client gallery access
Key: the gallery client token (sessionStorage).
If you open a private gallery from the link the studio sent you, that link carries a signed access token. The site stores the token for the tab so it survives moving between pages in your gallery, and removes it from the visible address bar so it is not left in your history or read over your shoulder. It is sent to the studio API to prove you are entitled to see the gallery.
Why: it is what makes your gallery private. Closing the tab discards it; opening your original link again restores it.
- 04
What we do not do
No advertising or retargeting cookies. No cross-site tracking. No analytics that profile you as an individual. No selling or sharing of the information above, as those terms are defined by California law. No fingerprinting to work around your browser settings.
- 05
Controlling it
The one cookie above is a language preference, not a tracker, so there is no advertising or analytics choice to make and no banner asking you to make one.
You can clear everything described on this page at any time: close the browser to discard the language cookie and the tab to discard sessionStorage, or clear site data for this site in your browser settings. You can also block cookies and storage for this site entirely — the enquiry form still works, the site simply forgets your language between visits, and a private gallery will stop staying open across pages, because the access token is what identifies you as its recipient.
- 06
Questions and changes
Questions about anything on this page go to privacy@houseoffilm.studio. If the site ever sets another cookie or adds an analytics provider, this page is updated in the same change, with a new effective date — not quietly. The table below is generated from the site's own cookie inventory rather than written from memory, so it cannot drift away from what the site actually sends.
What this build actually stores
An engineering record, generated from the site’s own inventory rather than written from memory: every cookie this build sends, taken from the responses the site returns. Measured 2026-08-14.
- NEXT_LOCALE
- Purpose
- Remembers which language version of the site you are reading (en or es), so a link that does not carry a language prefix sends you to the one you were already using.
- Type
- functional · first-party · not used to follow you across sites or visits
- How long
- Session — no Expires and no Max-Age are sent, so the browser discards it when it closes. It is re-sent on each response while you browse.
- Set by
- next-intl's middleware (src/middleware.ts -> createMiddleware), using its default cookie settings.
- Attributes
- Path=/; SameSite=lax; Secure=no; HttpOnly=no
Browser storage, not cookies
- aperture.firstTouch (sessionStorage)
Records the page you first arrived on and when, so an enquiry sent from a later page still shows where you came in. Until the tab is closed.
- gallery client token (sessionStorage)
Holds the signed access token from a private gallery link so it survives moving between pages, and keeps it out of the visible address bar. Until the tab is closed.
What this record does not cover
Cookies set on PUBLIC pages of this site, and client-side storage written by this site's own code. Measured against the deployed container on 127.0.0.1:6020 (read-only GETs, no form submitted).
- — Authenticated studio/admin surfaces are not covered. Auth.js issues its own session cookies once someone signs in at /admin; no member of the public reaches that flow, and an anonymous GET of /en/admin returned 307 with no Set-Cookie header when measured.
- — A reverse proxy or CDN in front of the app could add cookies this inventory cannot see from inside the container.
- — This is a SOURCE-and-probe inventory of one build. It is not a continuous monitor: nothing re-measures it on deploy.