From 0c97fc199596f933f8c1ccd3afe6c74c37bc7b8e Mon Sep 17 00:00:00 2001 From: "Sebastian BURGIN-FIX (ext)" Date: Sun, 25 Oct 2026 12:29:25 +0100 Subject: [PATCH] Remove Flare and Fathom leftovers - Delete the Fathom script partial and its include in the app layout - Drop the preconnect/dns-prefetch hints to cdn.usefathom.com - Remove the fathom block from config/default.php and LARAVEL_DEFAULT_FATHOM_SITE_ID from .env.example - Remove cdn(-eu).usefathom.com from the CSP preset (script, img, connect) - Privacy policy (de_CH + en_CH): analytics now codebar Analytics (analytics.codebar.ch, cookieless, run by codebar), error and performance monitoring now Laravel Nightwatch; the processor keys "fathom"/"flare" are renamed to "analytics"/"monitoring" - README: analytics is codebar Analytics codebar Analytics stays wired (_codebar_analytics partial, CSP entries). Co-Authored-By: Claude Opus 5.5 --- .env.example | 1 - README.md | 2 +- app/Security/Presets/MyCspPreset.php | 6 ------ config/default.php | 6 ------ lang/de_CH.json | 10 +++++----- lang/en_CH.json | 10 +++++----- resources/views/layouts/_partials/_fathom.blade.php | 10 ---------- resources/views/layouts/app.blade.php | 3 --- 8 files changed, 11 insertions(+), 37 deletions(-) delete mode 100644 resources/views/layouts/_partials/_fathom.blade.php diff --git a/.env.example b/.env.example index 2a08852d..883c8bdd 100644 --- a/.env.example +++ b/.env.example @@ -69,7 +69,6 @@ CLOUDINARY_CLOUD_NAME=my-cloud-name CLOUDINARY_API_KEY=my-api-key CLOUDINARY_API_SECRET=my-api-secret -LARAVEL_DEFAULT_FATHOM_SITE_ID=WECFOADW CODEBAR_ANALYTICS_URL=https://analytics.codebar.ch LITELLM_URL=https://llm.codebar.net LITELLM_MASTER_KEY= diff --git a/README.md b/README.md index 5f5daedb..4a5e8b5c 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,7 @@ HSTS, COOP, CORP, `X-Content-Type-Options`, `Referrer-Policy` and `X-Frame-Optio - **SEO** — `spatie/laravel-sitemap`, `spatie/laravel-responsecache` - **Security & health** — `spatie/laravel-csp`, `spatie/laravel-honeypot` (network request form), `spatie/laravel-permission`, `spatie/laravel-health`, `spatie/security-advisories-health-check`, `mazedlx/laravel-feature-policy` - **Ops** — `laravel/nightwatch` (observability), `symfony/postmark-mailer` -- **Analytics** — [Fathom](https://usefathom.com) (privacy-friendly, no cookie banner) +- **Analytics** — codebar Analytics (self-hosted on analytics.codebar.ch, cookieless, no cookie banner) ## License diff --git a/app/Security/Presets/MyCspPreset.php b/app/Security/Presets/MyCspPreset.php index 146cbeec..dae317c6 100644 --- a/app/Security/Presets/MyCspPreset.php +++ b/app/Security/Presets/MyCspPreset.php @@ -18,8 +18,6 @@ public function configure(Policy $policy): void $scriptSources = array_filter([ Keyword::SELF, - 'cdn.usefathom.com', - 'cdn-eu.usefathom.com', 'analytics.codebar.ch', $cdnHost ?: null, ]); @@ -62,8 +60,6 @@ public function configure(Policy $policy): void 'data:', 'res.cloudinary.com', 'www.gravatar.com', - 'cdn.usefathom.com', - 'cdn-eu.usefathom.com', ]); $fontSources = array_filter([ @@ -77,8 +73,6 @@ public function configure(Policy $policy): void $policy->add(Directive::OBJECT, Keyword::NONE); $policy->add(Directive::CONNECT, [ Keyword::SELF, - 'cdn.usefathom.com', - 'cdn-eu.usefathom.com', 'analytics.codebar.ch', ]); } diff --git a/config/default.php b/config/default.php index 0f024e82..72274c45 100644 --- a/config/default.php +++ b/config/default.php @@ -8,12 +8,6 @@ return [ 'services' => [ - 'fathom' => [ - 'site_id' => env('LARAVEL_DEFAULT_FATHOM_SITE_ID'), - 'environments' => [ - EnvironmentEnum::PRODUCTION->value, - ], - ], 'codebar_analytics' => [ 'url' => env('CODEBAR_ANALYTICS_URL'), 'environments' => [ diff --git a/lang/de_CH.json b/lang/de_CH.json index 4943df9d..fe1e838b 100644 --- a/lang/de_CH.json +++ b/lang/de_CH.json @@ -256,8 +256,8 @@ "Privacy contact heading": "Kontakt", "Privacy controller body": "Verantwortlich für die Datenbearbeitung auf dieser Website ist die codebar Solutions AG.", "Privacy controller heading": "Verantwortliche Stelle", - "Privacy data collected analytics": "Nutzungsstatistiken über Fathom Analytics (ohne Cookies, anonymisierte Seitenaufrufe; keine Personenprofile)", - "Privacy data collected errors": "Fehler- und Leistungsdaten an Flare zur Fehlerbehebung (serverseitig; sensible Header werden entfernt)", + "Privacy data collected analytics": "Nutzungsstatistiken über codebar Analytics (von codebar selbst betrieben auf analytics.codebar.ch, ohne Cookies, anonymisierte Seitenaufrufe; keine Personenprofile)", + "Privacy data collected errors": "Fehler- und Leistungsdaten an Laravel Nightwatch zur Fehlerbehebung (serverseitig; sensible Header werden entfernt)", "Privacy data collected heading": "Welche Daten wir erheben", "Privacy data collected intro": "Beim Besuch dieser Website verarbeiten wir folgende Datenkategorien:", "Privacy data collected logs": "Server-Logdaten (IP-Adresse, Datum und Uhrzeit des Zugriffs, Browsertyp, besuchte Seiten)", @@ -265,15 +265,15 @@ "Privacy last updated date": "28.08.2026", "Privacy page intro": "Wie die codebar Solutions AG Personendaten auf dieser Website gemäss Schweizer Datenschutzrecht bearbeitet.", "Privacy policy": "Datenschutzerklärung", + "Privacy processors analytics": "codebar Analytics – cookielose Website-Statistiken, von der codebar Solutions AG selbst betrieben (analytics.codebar.ch)", "Privacy processors body": "Wir setzen folgende Dienstleister ein, die Personendaten in unserem Auftrag verarbeiten können:", "Privacy processors cloudinary": "Cloudinary – Auslieferung von Bildern und Medien (Datenschutz: cloudinary.com/privacy)", - "Privacy processors fathom": "Fathom Analytics – datenschutzfreundliche Website-Statistiken (usefathom.com/privacy)", - "Privacy processors flare": "Flare – Fehlerüberwachung unserer Anwendung (flareapp.io/privacy)", "Privacy processors heading": "Auftragsbearbeiter", "Privacy processors hosting": "Laravel Cloud – Website-Hosting und Infrastruktur (laravel.com)", + "Privacy processors monitoring": "Laravel Nightwatch – Fehler- und Leistungsüberwachung unserer Anwendung (nightwatch.laravel.com)", "Privacy purpose body": "Wir verarbeiten diese Daten, um die Website zu betreiben und abzusichern, aggregierte Nutzungsmuster zu verstehen und technische Probleme zu beheben. Rechtsgrundlage ist unser berechtigtes Interesse an einem sicheren und funktionsfähigen Webangebot sowie gegebenenfalls die Vertragserfüllung.", "Privacy purpose heading": "Zweck und Rechtsgrundlage", - "Privacy retention analytics": "Analysedaten werden gemäss Richtlinie von Fathom aufbewahrt.", + "Privacy retention analytics": "Analysedaten speichern wir selbst auf analytics.codebar.ch; sie enthalten keine Personenprofile.", "Privacy retention errors": "Fehlermeldungen werden so lange aufbewahrt, wie zur Behebung erforderlich.", "Privacy retention heading": "Aufbewahrungsdauer", "Privacy retention logs": "Server-Logs werden bis zu 90 Tage aufbewahrt.", diff --git a/lang/en_CH.json b/lang/en_CH.json index 108a8f64..d588efa8 100644 --- a/lang/en_CH.json +++ b/lang/en_CH.json @@ -252,8 +252,8 @@ "Privacy contact heading": "Contact", "Privacy controller body": "The controller responsible for data processing on this website is codebar Solutions AG.", "Privacy controller heading": "Controller", - "Privacy data collected analytics": "Usage analytics via Fathom Analytics (cookieless, anonymised page views; no personal profiles)", - "Privacy data collected errors": "Error and performance data sent to Flare for troubleshooting (server-side; sensitive headers are redacted)", + "Privacy data collected analytics": "Usage analytics via codebar Analytics (run by codebar itself on analytics.codebar.ch, cookieless, anonymised page views; no personal profiles)", + "Privacy data collected errors": "Error and performance data sent to Laravel Nightwatch for troubleshooting (server-side; sensitive headers are redacted)", "Privacy data collected heading": "Data we collect", "Privacy data collected intro": "When you visit this website, we process the following categories of data:", "Privacy data collected logs": "Server log data (IP address, date and time of access, browser type, pages visited)", @@ -261,15 +261,15 @@ "Privacy last updated date": "28 August 2026", "Privacy page intro": "How codebar Solutions AG collects and processes personal data on this website, under Swiss data protection law.", "Privacy policy": "Privacy policy", + "Privacy processors analytics": "codebar Analytics – cookieless website statistics, run by codebar Solutions AG itself (analytics.codebar.ch)", "Privacy processors body": "We use the following third-party services that may process personal data on our behalf:", "Privacy processors cloudinary": "Cloudinary – delivery of images and media assets (privacy policy: cloudinary.com/privacy)", - "Privacy processors fathom": "Fathom Analytics – privacy-friendly website statistics (usefathom.com/privacy)", - "Privacy processors flare": "Flare – error monitoring for our application (flareapp.io/privacy)", "Privacy processors heading": "Third-party processors", "Privacy processors hosting": "Laravel Cloud – website hosting and infrastructure (laravel.com)", + "Privacy processors monitoring": "Laravel Nightwatch – error and performance monitoring for our application (nightwatch.laravel.com)", "Privacy purpose body": "We process this data to operate and secure the website, to understand aggregate usage patterns, and to diagnose technical issues. The legal basis is our legitimate interest in providing a secure and functional website, and where applicable the performance of a contract.", "Privacy purpose heading": "Purpose and legal basis", - "Privacy retention analytics": "Analytics data is retained according to Fathom's policy.", + "Privacy retention analytics": "Analytics data is stored by us on analytics.codebar.ch and contains no personal profiles.", "Privacy retention errors": "Error reports are retained as long as necessary to resolve the issue.", "Privacy retention heading": "Retention", "Privacy retention logs": "Server logs are retained for up to 90 days.", diff --git a/resources/views/layouts/_partials/_fathom.blade.php b/resources/views/layouts/_partials/_fathom.blade.php deleted file mode 100644 index 9101be8e..00000000 --- a/resources/views/layouts/_partials/_fathom.blade.php +++ /dev/null @@ -1,10 +0,0 @@ -@php - use Illuminate\Support\Arr; - $environments = config('default.services.fathom.environments', []); - $url = 'https://cdn.usefathom.com/script.js'; - $siteId = config('default.services.fathom.site_id'); -@endphp - -@if (in_array(app()->environment(), $environments) && $siteId) - -@endif diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 887bfff3..9762db06 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -13,8 +13,6 @@ class="scroll-smooth" @endif - -