Use Umami instead of Google Analytics
This commit is contained in:
parent
ac68de0a26
commit
37921c6cce
|
|
@ -1,82 +0,0 @@
|
||||||
---
|
|
||||||
/**
|
|
||||||
* Privacy notice banner component.
|
|
||||||
* Displays a GDPR-compliant consent banner at the bottom of the page.
|
|
||||||
* Manages user consent for analytics via localStorage.
|
|
||||||
*
|
|
||||||
* Note: Analytics loading is handled separately in Layout.astro to avoid
|
|
||||||
* ad blockers blocking this script due to analytics-related keywords.
|
|
||||||
*
|
|
||||||
* Element IDs use generic names to avoid ad blocker filter lists that
|
|
||||||
* target common patterns like "cookie-banner" or "consent-notice".
|
|
||||||
*/
|
|
||||||
---
|
|
||||||
|
|
||||||
<div
|
|
||||||
id="priv-notice"
|
|
||||||
class="fixed bottom-0 left-0 right-0 z-50 hidden"
|
|
||||||
role="dialog"
|
|
||||||
aria-labelledby="pn-title"
|
|
||||||
aria-describedby="pn-desc"
|
|
||||||
>
|
|
||||||
<div class="bg-base-200 border-t border-base-300 p-4 shadow-lg">
|
|
||||||
<div class="container mx-auto max-w-4xl">
|
|
||||||
<div class="flex flex-col sm:flex-row items-start sm:items-center gap-4">
|
|
||||||
<div class="flex-1">
|
|
||||||
<h2 id="pn-title" class="font-semibold mb-1">Privacy Notice</h2>
|
|
||||||
<p id="pn-desc" class="text-sm text-base-content/80">
|
|
||||||
We use analytics to understand how visitors use this site.
|
|
||||||
<a href="/privacy/" class="link link-primary">Learn more</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="flex gap-2 flex-shrink-0">
|
|
||||||
<button
|
|
||||||
id="pn-decline"
|
|
||||||
class="btn btn-sm btn-ghost"
|
|
||||||
type="button"
|
|
||||||
>
|
|
||||||
Decline
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
id="pn-accept"
|
|
||||||
class="btn btn-sm btn-primary"
|
|
||||||
type="button"
|
|
||||||
>
|
|
||||||
Accept
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script is:inline>
|
|
||||||
(function() {
|
|
||||||
var CONSENT_KEY = 'priv-notice';
|
|
||||||
var banner = document.getElementById('priv-notice');
|
|
||||||
var acceptBtn = document.getElementById('pn-accept');
|
|
||||||
var declineBtn = document.getElementById('pn-decline');
|
|
||||||
|
|
||||||
function setConsent(granted) {
|
|
||||||
localStorage.setItem(CONSENT_KEY, granted ? 'granted' : 'denied');
|
|
||||||
banner.classList.add('hidden');
|
|
||||||
if (granted) {
|
|
||||||
window.dispatchEvent(new CustomEvent('consent-granted'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkConsent() {
|
|
||||||
var consent = localStorage.getItem(CONSENT_KEY);
|
|
||||||
if (consent === 'granted') {
|
|
||||||
window.dispatchEvent(new CustomEvent('consent-granted'));
|
|
||||||
} else if (consent === null) {
|
|
||||||
banner.classList.remove('hidden');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
acceptBtn.addEventListener('click', function() { setConsent(true); });
|
|
||||||
declineBtn.addEventListener('click', function() { setConsent(false); });
|
|
||||||
|
|
||||||
checkConsent();
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
import "../styles/global.css";
|
import "../styles/global.css";
|
||||||
import Navbar from "../components/Navbar.astro";
|
import Navbar from "../components/Navbar.astro";
|
||||||
import Footer from "../components/Footer.astro";
|
import Footer from "../components/Footer.astro";
|
||||||
import CookieBanner from "../components/CookieBanner.astro";
|
|
||||||
import logo from "../assets/logo.svg";
|
import logo from "../assets/logo.svg";
|
||||||
|
|
||||||
import { SEO } from "astro-seo";
|
import { SEO } from "astro-seo";
|
||||||
|
|
@ -82,22 +81,8 @@ const seoConfig = {
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<Footer />
|
<Footer />
|
||||||
<CookieBanner />
|
|
||||||
|
|
||||||
<!-- Analytics loader (separate script to avoid ad blockers blocking the consent banner) -->
|
<!-- Umami Analytics -->
|
||||||
<script is:inline>
|
<script defer src="https://cloud.umami.is/script.js" data-website-id="d7c69d06-32a6-4e74-94ec-2520da5e3450"></script>
|
||||||
window.addEventListener('consent-granted', function() {
|
|
||||||
if (document.getElementById('ga-script')) return;
|
|
||||||
var s = document.createElement('script');
|
|
||||||
s.id = 'ga-script';
|
|
||||||
s.async = true;
|
|
||||||
s.src = 'https://www.googletagmanager.com/gtag/js?id=G-7308Y1HGM9';
|
|
||||||
document.head.appendChild(s);
|
|
||||||
window.dataLayer = window.dataLayer || [];
|
|
||||||
function gtag() { dataLayer.push(arguments); }
|
|
||||||
gtag('js', new Date());
|
|
||||||
gtag('config', 'G-7308Y1HGM9');
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ import Layout from '../layouts/Layout.astro';
|
||||||
<h2>Information We Collect</h2>
|
<h2>Information We Collect</h2>
|
||||||
<h3>Analytics Data</h3>
|
<h3>Analytics Data</h3>
|
||||||
<p>
|
<p>
|
||||||
With your consent, we use Google Analytics to collect anonymous usage data to help us understand
|
We use Umami, a privacy-focused analytics service, to collect anonymous usage data to help us understand
|
||||||
how visitors interact with our website. This includes:
|
how visitors interact with our website. This includes:
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
@ -26,9 +26,8 @@ import Layout from '../layouts/Layout.astro';
|
||||||
<li>Approximate geographic location (country/city level)</li>
|
<li>Approximate geographic location (country/city level)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
This data is aggregated and does not personally identify you. Google Analytics uses cookies
|
Umami does not use cookies, does not collect personal data, and does not track users across websites.
|
||||||
to collect this information. You can opt out of analytics tracking by declining cookies when
|
All data is aggregated and anonymous. No consent banner is required as no personal data is collected.
|
||||||
prompted.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3>Local Storage</h3>
|
<h3>Local Storage</h3>
|
||||||
|
|
@ -36,7 +35,6 @@ import Layout from '../layouts/Layout.astro';
|
||||||
We use your browser's local storage to remember:
|
We use your browser's local storage to remember:
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Your cookie consent preference</li>
|
|
||||||
<li>Your theme preference (light/dark mode)</li>
|
<li>Your theme preference (light/dark mode)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
|
|
@ -59,9 +57,9 @@ import Layout from '../layouts/Layout.astro';
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<strong>Google Analytics</strong> - For website analytics.
|
<strong>Umami Analytics</strong> - For privacy-friendly website analytics.
|
||||||
<a href="https://policies.google.com/privacy" target="_blank" rel="noopener noreferrer" class="link link-primary">
|
<a href="https://umami.is/privacy" target="_blank" rel="noopener noreferrer" class="link link-primary">
|
||||||
Google's Privacy Policy
|
Umami's Privacy Policy
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
|
@ -72,17 +70,10 @@ import Layout from '../layouts/Layout.astro';
|
||||||
<h2>Your Rights</h2>
|
<h2>Your Rights</h2>
|
||||||
<p>You have the right to:</p>
|
<p>You have the right to:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Decline analytics cookies when visiting our website</li>
|
<li>Clear your browser's local storage at any time</li>
|
||||||
<li>Clear your browser's cookies and local storage at any time</li>
|
<li>Use browser extensions to block analytics scripts</li>
|
||||||
<li>Use browser extensions to block tracking scripts</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>Managing Your Consent</h2>
|
|
||||||
<p>
|
|
||||||
You can change your cookie preferences at any time by clearing your browser's local storage
|
|
||||||
for this website. The consent banner will appear again on your next visit.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>Contact</h2>
|
<h2>Contact</h2>
|
||||||
<p>
|
<p>
|
||||||
If you have questions about this privacy policy, please contact us at
|
If you have questions about this privacy policy, please contact us at
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue