Consent management
How consent works on this site.
A behind-the-scenes look at the consent system itself: what gets captured, how it's stored, how you can audit it, and how to change your mind.
What gets your consent
Only one thing on this site requires your consent: anonymous analytics via Cloudflare Web Analytics. Everything else is either essential (required for the site to work) or absent (no advertising cookies, no third-party trackers, no remarketing).
How consent is captured
When you first visit michaelmorakis.com, a banner appears in the lower-left of the screen with three options:
- Accept — opts you in to anonymous analytics.
- Reject — opts you out. No analytics script ever loads.
- Settings — opens a per-category toggle UI where you can grant or deny each non-essential category individually.
No option is pre-selected. No visual trick makes Accept easier than Reject. No re-prompt loop if you reject.
How consent is stored
Your choice is stored locally in your browser's localStorage
under the key mm_consent. The value is a JSON object:
v— the consent schema version (currently 1)ts— timestamp of your decision (Unix ms)essential— alwaystrue(required for the site)analytics—trueorfalsebased on your choice
This object is read locally on every page load to decide whether to load analytics. It is never sent to me, never sent to a third party, and never associated with any identifier.
How analytics actually loads (or doesn't)
On every page load, a small script in BaseLayout.astro reads
localStorage.mm_consent. If analytics === true,
it dynamically inserts the Cloudflare beacon script tag. If
analytics === false or no consent has been recorded, the
script tag is never created — no network request to Cloudflare's analytics
server is ever made.
The same script also listens for a mm:consent custom DOM
event so that if you opt in after page load (via the Settings
panel), analytics begins immediately without a page refresh.
How to change your mind
Three paths — all equivalent:
- Visit /cookie-settings for a permanent UI to manage your preferences.
- Re-open the consent banner via the same page's "Reset" button.
- Clear your browser's site data for michaelmorakis.com — banner reappears on next visit.
Audit trail
There is intentionally no server-side audit trail of consent decisions.
Storing one would require collecting an identifier that the consent itself
is supposed to protect. The localStorage value contains the
timestamp, which is sufficient evidence of your own decision should you
ever want to verify.
If consent rules change
If I add a new analytics provider, a new third-party service, or change anything material about what's collected, the consent schema version increments and your consent resets. The banner appears again so you choose under the new terms. I do not silently extend old consent to cover new things.
See also: Cookie policy · Cookie settings · Privacy policy · GDPR rights.
Last updated 2026-05-01.