This website
The controls in this group are implemented in the source of this site and can be checked from outside by inspecting a response.
How to read this page
Two kinds of statement appear below. The first describes a control that exists in the code of this website. The second is a question we have not answered, shown as a token in double square brackets.
A token means the fact has not been established or confirmed. It does not mean a value exists and is being withheld from you.
Where the honest answer is that something does not exist yet, this page says that instead of using a token. A pre-release product with no certifications is a normal position. Pretending otherwise is not.
Application and transport security
This site is served from a Cloudflare Worker. Every document response passes through a single module that applies the security headers listed below, and that module is the only place those headers are set in production.
Static files are served by the platform's asset layer before the Worker runs, so they never reach that module. They are covered separately by a headers file in the repository, which repeats nosniff, the referrer policy, the resource policy, and HSTS.
HSTS is sent only when the request arrived over TLS. On plain HTTP it is withheld deliberately, so a developer running the site locally cannot pin an HSTS entry against localhost for every other project on the machine.
Naming the runtime here is a statement about this website's own code. It is not a published sub-processor list. That list is at [[SUBPROCESSOR_LIST]], and the infrastructure behind the Autom product is a separate question, at [[PRODUCT_INFRASTRUCTURE]].
Content security policy, and the limitation in it
The full policy is in the table above. No directive names any host other than this site's own origin, framing is denied outright, plugin content is blocked, and insecure requests are upgraded.
The script source allows inline scripts. This is a real weakness and we are not going to hide it in a footnote. The App Router hydrates the page by emitting inline bootstrap scripts, and without that allowance the site renders as a dead shell. The policy therefore does not prevent an injected inline script from running, and it should not be described as if it did.
The intended fix is a per-request nonce combined with strict-dynamic. That needs middleware which does not exist in this repository yet. It is recorded in the source as a to-do, not as a completed control.
The style source allows inline styles for the same class of reason: the UI framework and the CSS toolchain both emit inline style attributes.
Everything else stays at same-origin because it can. The site loads no third-party script, font, stylesheet, iframe, or embed, and makes no request to another host. The only sources named beyond this site's own origin are the data URI scheme on images and fonts, and blob URIs on images, both of which are inline content rather than another party.
Analytics and tracking
This website runs no analytics, no advertising, and no tracking. There is no tag manager, no pixel, and no session recording.
The site's content file has a field reserved for an analytics identifier. It is set to null, and no component reads it. We checked that before writing this sentence rather than assuming it.
The site sets no cookie of its own and does not use local or session storage to identify a visitor. Any cookie set by hosting or edge protection infrastructure is a separate matter and belongs at [[COOKIE_TABLE]].
This is enforced rather than merely promised: the content security policy restricts connections to same-origin, so a browser will refuse an outbound request to a tracking host even if one were added by mistake.
The Contact Sales form
The form is the only thing on this site that sends what you type to the server. Submissions are validated on the server, with a minimum and a maximum length on every free-text field, a fixed list of accepted values for company size, and a cap on the size of the request body that is applied while the body is still arriving rather than after it has been read.
The same validation rules run in the browser before the request is made, from the same module, so the messages you see and the messages the server would give you cannot drift apart. The server stays authoritative: whatever it returns is what the page shows you.
Accepted submissions are forwarded to a webhook destination held as a platform secret. If no destination is configured the endpoint returns an error and says plainly that nothing was sent, rather than accepting the message and discarding it. It never invents a fallback email address: the failure message offers another channel only when one has actually been configured.
There is one deliberate exception to that, and we would rather state it than let you find it. The form carries a hidden decoy field that no person sees and that automated form-fillers routinely populate. A submission that fills it is discarded and answered as though it had succeeded, so that a bot cannot learn which field is the trap by comparing responses. That is a spam control, and the cost of it is real: if some unusual client fills that field on your behalf, your enquiry will be dropped and you will be told it was sent. Nothing else on this site answers success for a message it did not deliver.
The decoy value is never forwarded anywhere and is not part of the payload a destination receives.
This website has no database. The schema file in the repository is deliberately empty, so no enquiry is stored here.
The endpoint counts requests per client, but that counter lives in the memory of one edge isolate. It is a speed bump against a double-click or a naive script, not a rate limit, and a distributed caller defeats it. The source says exactly that, and so do we.
Where enquiries are delivered, and how long they are kept, is at [[CONTACT_FORM_DESTINATION]] and [[ENQUIRY_RETENTION_PERIOD]].