Privacy and analytics
What AquariumHQ measures, what it stores in your browser, who else sees it, and how to change your mind.
The short version
AquariumHQ has no accounts, no logins and no server that remembers you. Every page is built in advance and served as a file. The only thing it would like to measure is which pages get read and which questions it failed to answer, and it does not measure even that unless you say yes.
Nothing you type is recorded. Search runs entirely inside your browser against an index that is part of the page, so a query never reaches a server in the first place — not AquariumHQ’s, and not Google’s.
Your choice
You have not decided yet, so analytics is switched off.
Nothing is stored until you choose. The current policy is version 1.
Switching analytics off stops AquariumHQ sending anything further and tells the Google tag to stop collecting. Any cookie Google has already set on your device is removed by clearing this site’s data in your browser — AquariumHQ cannot verify it has deleted every one, so it does not claim to.
If your browser blocks storage, this control still works for the page you are on but cannot remember the answer, so you will be asked again. That is the correct behaviour rather than a fault: a browser that will not store a preference has not agreed to anything.
This is privacy policy version 1, in effect from 2026-08-12. Your answer is recorded against the version. If AquariumHQ ever materially changes what it collects, the version goes up and the question is asked again, rather than the old answer being reused for something new.
What is switched on right now
This section is generated from the running configuration rather than written by hand, so it cannot describe a state the build is not in.
Google Analytics 4 is active on this build. With your permission it receives the events listed below, and no others.
A second destination — HEKNO Analytics, an internal service operated by the same people who operate AquariumHQ — is supported by the code but is not configured on this build, so nothing is sent to it.
The two categories
Two, because there are two. A longer list would be an invented choice.
| Category | Optional? | What it covers |
|---|---|---|
| Necessary | No | The single value that records this choice, so the banner does not ask again on every page. |
| Analytics | Yes — off unless you allow it | Anonymous measurement of which pages are read and which questions AquariumHQ could not answer, sent to Google Analytics 4. |
Google Analytics is classified as analytics, not as necessary. It is genuinely optional: the catalogue, the compatibility engine, the calculators and the evidence panels all work identically whether you allow it or not.
Cookies and browser storage
AquariumHQ itself sets no cookies. It writes two values to browser storage, which is a different mechanism — storage is not sent with requests and cannot be read by a server. Google Analytics does set cookies, once it is live and once you have allowed it.
| Name | Type | Set by | Category | What it holds | How long | When |
|---|---|---|---|---|---|---|
aquariumhq.consent | local storage | AquariumHQ | necessary | Remembers your analytics choice so the banner does not ask again on every page, and records which version of this policy you answered. The word granted or denied, the policy version number, and the date you chose. Nothing that identifies you. | Until you clear this site's data in your browser. | Written only when you choose Allow or No thanks. |
aquariumhq.session-id | session storage | AquariumHQ | analytics | Groups the events of a single visit together so that ten page views by one reader are not counted as ten readers. A random identifier generated in your browser. It is not derived from anything. | Destroyed when the tab closes, and deleted immediately if you switch analytics off. | Created only after you allow analytics, and only when a HEKNO analytics endpoint is configured. |
_ga, _ga_<property> | cookie | Google Analytics 4 | analytics | Google's own measurement cookies. They let Google distinguish one browser from another so that visits can be counted. A randomly generated client identifier and a timestamp, set by Google's script on this site's domain. | Up to two years, set by Google rather than by AquariumHQ. | Only if you allow analytics AND the Google tag is switched on for the build you are reading. It is switched off during the pre-launch beta, so no such cookie exists yet. |
Clearing this site’s data in your browser removes all of it, including your recorded choice, which resets the banner.
What is measured — all 11 of them
This is the complete list. It is read from the event catalogue in the source, so it cannot be out of date, and nothing outside it can be sent: an event that is not defined here has no definition to send.
| Event | Why it exists | What it carries |
|---|---|---|
page_viewed | Which parts of the catalogue are read, and are the indexable ones the read ones? | pageFamily, indexable, entityId |
entity_viewed | Which organisms, plants and problems attract the most interest? | entityId, kind |
internal_search | Does search resolve what people ask it, and does the ambiguity notice fire usefully? | resultBand, resultCount, queryLength, ambiguityShown |
search_returned_nothing | What is AquariumHQ being asked for that it cannot answer at all? | queryLength, wordCount, ambiguityShown |
search_result_selected | Is the right answer near the top, or are people scrolling past it? | kind, rank, resultBand |
compatibility_assessed | Which compatibility answers are actually consulted, and how often is the honest answer 'insufficient evidence'? | surface, verdict, confidence, concernCount, conditionCount, limitationCount |
tool_used | Which calculators are actually used, and which reject the input people give them? | toolSlug, outcome |
evidence_opened | Does anybody open the evidence? The transparency argument depends on the answer. | disclosure, pageFamily |
source_opened | Which authorities do readers go and check for themselves? | sourceSlug, tier, pageFamily |
share_performed | Which pages are worth passing on? Nothing about who they were passed to. | method, pageFamily |
consent_granted | Is the banner or the settings page where people actually decide? | surface, policyVersion |
No free text, structurally
Every one of those parameters is a fixed choice from a list, a whole number within bounds, a yes/no, or a page address AquariumHQ itself publishes. The code that defines events offers no way to declare a text field, so a search query, a note or a message cannot be attached to an event even by mistake. A test checks this by trying to push a sentence into every field of every event.
Searches, and why we do not keep them
This is the one place where more data would genuinely be useful, so it is worth saying plainly what we chose.
Knowing exactly what people search for and fail to find would be the single most useful thing AquariumHQ could learn. We do not collect it. An aquarium search box receives things like a shop’s name, a town, a photograph description or a message meant for a person, and there is no reliable way to filter those out of free text after the fact.
Instead, a search that finds nothing records how long the query was, roughly, how many words it had, and whether the ambiguity notice appeared. That distinguishes a one-word species we have not covered from a six-word symptom question we cannot answer, which is the distinction that changes what we research next.
What was considered and rejected
| Not collected | Why not |
|---|---|
search_query_text | A raw aquarium search can contain a location, a shop, a person or a photograph description. There is no field shaped to hold one and there will not be. Length band and word count answer the same editorial question. |
scroll_depth | Would not change an editorial decision. Reading position is not comprehension, and the pages are deliberately long reference documents. |
time_on_page | Rewards the wrong outcome. A reader who finds the ammonia answer in nine seconds is the success case, not the failure case. |
disclosure_closed | Every open already fires. Pairing it with a close doubles the volume and answers nothing extra. |
calculator_input_values | Tank dimensions and test-kit readings are the reader's own data. AquariumHQ has no product question that needs them. |
outbound_url | The source slug already identifies the destination and cannot carry a query string. |
consent_denied | Cannot be transmitted by a system that respects the refusal it describes. |
user_id | AquariumHQ has no accounts and will not recognise a returning reader. |
error_boundary_stack | A stack trace is free text and can contain page state. Errors belong in the browser console and in the build, not in an analytics payload. |
Who else is involved
One third party, and only if you allow analytics: Google, through Google Analytics 4. When it is live and permitted, your browser fetches Google’s script and sends it the events above. Google receives your IP address as part of making that request — that is how the internet works, not a choice AquariumHQ makes — and AquariumHQ asks it not to store one, disables Google Signals and disables advertising personalisation. Google processes the data on its own terms, in its own systems, and AquariumHQ cannot inspect or delete what it holds.
There is nothing else. No tag manager, no advertising, no heatmaps, no session replay, no embedded video, no social buttons, no third-party fonts and no third-party images. The site’s content security policy blocks outbound connections to anything other than itself, and it admits Google’s origins only on a build where analytics is actually live.
Changing your mind
- Use the control at the top of this page, or the link in the footer of every page.
- Switching analytics off takes effect immediately: AquariumHQ stops sending events and tells the Google tag to stop collecting.
- AquariumHQ cannot prove it has deleted every cookie Google set, so it does not claim to. Clearing this site's data in your browser removes them.
- Data already sent to Google before you changed your mind stays with Google, under Google's retention settings.
How little is collected, and why
AquariumHQ collects the smallest amount that answers a question it would act on. Every event in the table above has a question written next to it in the source, and an event that cannot answer one is refused at review. There is no user identifier, no fingerprinting, no cross-site tracking, no advertising identifier and nothing that persists between visits except your own recorded choice.
None of it touches the content. Popularity may eventually shape which species get researched next; it can never change what the evidence says, what a compatibility verdict is, or how a source is graded. How AquariumHQ decides what it publishes is a separate question from what it measures, and the two are kept apart deliberately.
Who operates this and how to reach them
AquariumHQ is a HEKNO product, operated by HEKNO Ltd, a company registered in Scotland. HEKNO Ltd is the data controller for the analytics described on this page.
For anything about your data, including asking what is held and asking for it to stop: privacy@aquariumhq.app. For anything else: hello@aquariumhq.app. You do not need to email anyone to withdraw consent — the control is on this page and takes effect immediately.
AquariumHQ is built with readers in the United Kingdom and the European Union in mind, which is why analytics is off until you switch it on rather than on until you object. This page describes what the software does. It is not a legal opinion, and AquariumHQ does not claim that its implementation by itself satisfies any particular regulation. Related terms are on the legal and disclaimers page.