From 84b28d64f56f9b9b76afa91c11992868057b295c Mon Sep 17 00:00:00 2001 From: m Date: Wed, 1 Apr 2026 13:26:04 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20AI/KI=20disclosure=20footer=20=E2=80=94?= =?UTF-8?q?=20shared/ai-disclosure.js=20+=20all=2054=20sites?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Self-injecting script following impressum.js pattern: - data-tone attribute: playful | serious | minimal | none - Reads document.documentElement.lang for KI (de) vs AI (en) - MutationObserver on lang attr for i18n toggle compat - All tones link to msbls.de/ki - Injected into all 54 custom sites with data-tone="playful" - Template infra: base.html includes script, render.sh reads disclosure.tone - disclosure.tone added to 3 example site.yaml files Implements m/onepager#2 --- render.sh | 2 + shared/ai-disclosure.js | 72 +++++++++++++++++++++++++++ sites/allainallain.de/index.html | 1 + sites/allainallain.de/site.yaml | 3 ++ sites/allaisonme.com/index.html | 1 + sites/billableaua.de/index.html | 1 + sites/clemensplassmann.de/index.html | 1 + sites/commanderkin.de/index.html | 1 + sites/danosi.de/index.html | 1 + sites/deinesei.de/index.html | 1 + sites/derkaiseristnackt.de/index.html | 1 + sites/elefantenhor.de/index.html | 1 + sites/fragina.de/index.html | 1 + sites/frenchkis.de/index.html | 1 + sites/frollain.de/index.html | 1 + sites/hallofraumaier.de/index.html | 1 + sites/heygoldi.de/index.html | 1 + sites/ichbinaufbali.de/index.html | 1 + sites/ichbinaufbarley.de/index.html | 1 + sites/ichbinotto.de/index.html | 1 + sites/insain.de/index.html | 1 + sites/julietensity.de/index.html | 1 + sites/kainco.de/index.html | 1 + sites/kainefrage.de/index.html | 1 + sites/kainstress.de/index.html | 1 + sites/keinefreun.de/index.html | 1 + sites/kilemma.de/index.html | 1 + sites/kilibri.de/index.html | 1 + sites/kilitaer.de/index.html | 1 + sites/killegal.de/index.html | 1 + sites/killegal.de/site.yaml | 3 ++ sites/killionaer.de/index.html | 1 + sites/killions.de/index.html | 1 + sites/killuminati.de/index.html | 1 + sites/killuminati.de/site.yaml | 3 ++ sites/killusion.de/index.html | 1 + sites/kilofant.de/index.html | 1 + sites/kinough.de/index.html | 1 + sites/kinowhow.de/index.html | 1 + sites/kitox.de/index.html | 1 + sites/knzlmgmt.de/index.html | 1 + sites/kopffrai.de/index.html | 1 + sites/legalais.de/index.html | 1 + sites/lexsiebels.de/index.html | 1 + sites/machesdocheinfach.de/index.html | 1 + sites/mai-otto.de/index.html | 1 + sites/martinsiebels.de/index.html | 1 + sites/matthiasbreier.de/index.html | 1 + sites/omakise.de/index.html | 1 + sites/orakil.de/index.html | 1 + sites/osterai.de/index.html | 1 + sites/paragraphenraiter.de/index.html | 1 + sites/patentonkel.de/index.html | 1 + sites/schulfrai.de/index.html | 1 + sites/slopschild.de/index.html | 1 + sites/smartin3.de/index.html | 1 + sites/sorgenfrai.de/index.html | 1 + sites/vonschraitter.de/index.html | 1 + sites/wartebitte.de/index.html | 1 + templates/base.html | 1 + 60 files changed, 138 insertions(+) create mode 100644 shared/ai-disclosure.js diff --git a/render.sh b/render.sh index d01189c..79ae802 100755 --- a/render.sh +++ b/render.sh @@ -32,6 +32,7 @@ font_secondary=$(yq -r '.vars.font_secondary // "Inter"' "$SITE_YAML") emoji=$(yq -r '.vars.emoji // ""' "$SITE_YAML") cta_text=$(yq -r '.vars.cta.text // ""' "$SITE_YAML") cta_href=$(yq -r '.vars.cta.href // "#"' "$SITE_YAML") +disclosure_tone=$(yq -r '.disclosure.tone // "minimal"' "$SITE_YAML") year=$(date +%Y) # i18n: helper to generate data-de/data-en attribute string @@ -234,6 +235,7 @@ BEGIN { -e "s|{{cta_href}}|${cta_href}|g" \ -e "s|{{year}}|${year}|g" \ -e "s|{{domain}}|${domain}|g" \ + -e "s|{{disclosure_tone}}|${disclosure_tone}|g" \ -e "s|{{title_i18n}}|$(echo "$title_i18n" | sed 's/[&/\]/\\&/g')|g" \ -e "s|{{description_i18n}}|$(echo "$description_i18n" | sed 's/[&/\]/\\&/g')|g" \ -e "s|{{role_i18n}}|$(echo "$role_i18n" | sed 's/[&/\]/\\&/g')|g" \ diff --git a/shared/ai-disclosure.js b/shared/ai-disclosure.js new file mode 100644 index 0000000..e07d1c3 --- /dev/null +++ b/shared/ai-disclosure.js @@ -0,0 +1,72 @@ +/** + * KI/AI disclosure for onepager sites. + * + * Include: + * + * Configuration via data attributes on the script tag: + * data-tone="playful" — Lighthearted note with humor + * data-tone="serious" — Straightforward disclosure + * data-tone="minimal" — Single compact label + * data-tone="none" — No disclosure (script does nothing) + * + * Language is read from document.documentElement.lang: + * "de" -> KI terminology, "en" -> AI terminology. + * All tones link to msbls.de/ki. + */ +(function () { + var script = document.currentScript; + var tone = (script && script.getAttribute('data-tone')) || 'minimal'; + + if (tone === 'none') return; + + var lang = (document.documentElement.lang || 'de').slice(0, 2).toLowerCase(); + var isEn = lang === 'en'; + + var texts = { + minimal: isEn ? 'AI-assisted' : 'KI-unterst\u00FCtzt', + serious: isEn + ? 'This site was created with AI assistance.' + : 'Diese Seite wurde mit Unterst\u00FCtzung von KI erstellt.', + playful: isEn + ? 'Made with AI (no AIs were harmed)' + : 'Mit KI gemacht (keine KI wurde verletzt)', + }; + + var text = texts[tone] || texts.minimal; + + var el = document.createElement('div'); + el.className = 'onepager-ai-disclosure'; + el.innerHTML = '' + text + ''; + + el.style.cssText = 'text-align:center;font-size:0.65rem;opacity:0.4;padding:6px 0;margin-top:2px;'; + var a = el.querySelector('a'); + if (a) { + a.style.color = 'inherit'; + a.style.textDecoration = 'none'; + } + + // i18n: update text when language changes + var observer = new MutationObserver(function () { + var newLang = (document.documentElement.lang || 'de').slice(0, 2).toLowerCase(); + var newIsEn = newLang === 'en'; + var newTexts = { + minimal: newIsEn ? 'AI-assisted' : 'KI-unterst\u00FCtzt', + serious: newIsEn + ? 'This site was created with AI assistance.' + : 'Diese Seite wurde mit Unterst\u00FCtzung von KI erstellt.', + playful: newIsEn + ? 'Made with AI (no AIs were harmed)' + : 'Mit KI gemacht (keine KI wurde verletzt)', + }; + var link = el.querySelector('a'); + if (link) link.textContent = newTexts[tone] || newTexts.minimal; + }); + observer.observe(document.documentElement, { attributes: true, attributeFilter: ['lang'] }); + + var footer = document.querySelector('footer .container, footer'); + if (footer) { + footer.appendChild(el); + } else { + document.body.appendChild(el); + } +})(); diff --git a/sites/allainallain.de/index.html b/sites/allainallain.de/index.html index 17564fc..417f35a 100644 --- a/sites/allainallain.de/index.html +++ b/sites/allainallain.de/index.html @@ -433,6 +433,7 @@ })(); + diff --git a/sites/allainallain.de/site.yaml b/sites/allainallain.de/site.yaml index f223b9b..81316b5 100644 --- a/sites/allainallain.de/site.yaml +++ b/sites/allainallain.de/site.yaml @@ -2,3 +2,6 @@ domain: allainallain.de template: custom title: "all·AI·n·all·AI·n" description: "Umgeben von KIs. Trotzdem allein." + +disclosure: + tone: playful diff --git a/sites/allaisonme.com/index.html b/sites/allaisonme.com/index.html index 44bfaf4..7b1ca54 100644 --- a/sites/allaisonme.com/index.html +++ b/sites/allaisonme.com/index.html @@ -720,6 +720,7 @@ document.querySelectorAll('.fade-in').forEach(el => observer.observe(el)); + diff --git a/sites/billableaua.de/index.html b/sites/billableaua.de/index.html index e14a80e..c8cfc00 100644 --- a/sites/billableaua.de/index.html +++ b/sites/billableaua.de/index.html @@ -283,6 +283,7 @@ document.querySelectorAll('.reveal').forEach(el => observer.observe(el)); + diff --git a/sites/clemensplassmann.de/index.html b/sites/clemensplassmann.de/index.html index ef8ae21..61a3305 100644 --- a/sites/clemensplassmann.de/index.html +++ b/sites/clemensplassmann.de/index.html @@ -131,6 +131,7 @@
Maschinell übersetzt + diff --git a/sites/commanderkin.de/index.html b/sites/commanderkin.de/index.html index 7c38dcc..58a783c 100644 --- a/sites/commanderkin.de/index.html +++ b/sites/commanderkin.de/index.html @@ -514,6 +514,7 @@ document.addEventListener('keydown', (e) => { }); + diff --git a/sites/danosi.de/index.html b/sites/danosi.de/index.html index 2abf2e3..842f802 100644 --- a/sites/danosi.de/index.html +++ b/sites/danosi.de/index.html @@ -871,6 +871,7 @@ + diff --git a/sites/deinesei.de/index.html b/sites/deinesei.de/index.html index e9c34ee..a77d146 100644 --- a/sites/deinesei.de/index.html +++ b/sites/deinesei.de/index.html @@ -365,6 +365,7 @@ + diff --git a/sites/derkaiseristnackt.de/index.html b/sites/derkaiseristnackt.de/index.html index 1d11711..e4dfb5e 100644 --- a/sites/derkaiseristnackt.de/index.html +++ b/sites/derkaiseristnackt.de/index.html @@ -474,6 +474,7 @@ + diff --git a/sites/elefantenhor.de/index.html b/sites/elefantenhor.de/index.html index 8e00baf..961d65a 100644 --- a/sites/elefantenhor.de/index.html +++ b/sites/elefantenhor.de/index.html @@ -899,6 +899,7 @@ }); }, 800); + diff --git a/sites/fragina.de/index.html b/sites/fragina.de/index.html index c46c217..0d31c56 100644 --- a/sites/fragina.de/index.html +++ b/sites/fragina.de/index.html @@ -573,6 +573,7 @@ + diff --git a/sites/frenchkis.de/index.html b/sites/frenchkis.de/index.html index 32ccadf..3782b9a 100644 --- a/sites/frenchkis.de/index.html +++ b/sites/frenchkis.de/index.html @@ -896,6 +896,7 @@ + diff --git a/sites/frollain.de/index.html b/sites/frollain.de/index.html index f741768..6ae1afc 100644 --- a/sites/frollain.de/index.html +++ b/sites/frollain.de/index.html @@ -313,6 +313,7 @@ document.querySelectorAll('.reveal').forEach(el => observer.observe(el)); + diff --git a/sites/hallofraumaier.de/index.html b/sites/hallofraumaier.de/index.html index d707442..e8a7e47 100644 --- a/sites/hallofraumaier.de/index.html +++ b/sites/hallofraumaier.de/index.html @@ -955,6 +955,7 @@ document.querySelectorAll('.fade-up').forEach(el => observer.observe(el)); + diff --git a/sites/heygoldi.de/index.html b/sites/heygoldi.de/index.html index a7775f8..57fb2c3 100644 --- a/sites/heygoldi.de/index.html +++ b/sites/heygoldi.de/index.html @@ -583,6 +583,7 @@ + diff --git a/sites/ichbinaufbali.de/index.html b/sites/ichbinaufbali.de/index.html index 8fdaa8e..e62dcfd 100644 --- a/sites/ichbinaufbali.de/index.html +++ b/sites/ichbinaufbali.de/index.html @@ -107,6 +107,7 @@
Maschinell übersetzt + diff --git a/sites/ichbinaufbarley.de/index.html b/sites/ichbinaufbarley.de/index.html index df87e30..9a75e7f 100644 --- a/sites/ichbinaufbarley.de/index.html +++ b/sites/ichbinaufbarley.de/index.html @@ -136,6 +136,7 @@
Maschinell übersetzt + diff --git a/sites/ichbinotto.de/index.html b/sites/ichbinotto.de/index.html index d6d84e6..341fd6b 100644 --- a/sites/ichbinotto.de/index.html +++ b/sites/ichbinotto.de/index.html @@ -440,6 +440,7 @@ + diff --git a/sites/insain.de/index.html b/sites/insain.de/index.html index e0c20ae..c986169 100644 --- a/sites/insain.de/index.html +++ b/sites/insain.de/index.html @@ -57,6 +57,7 @@ + diff --git a/sites/julietensity.de/index.html b/sites/julietensity.de/index.html index 6649fa6..de7de06 100644 --- a/sites/julietensity.de/index.html +++ b/sites/julietensity.de/index.html @@ -589,6 +589,7 @@ + diff --git a/sites/kainco.de/index.html b/sites/kainco.de/index.html index e6048c1..d5149dd 100644 --- a/sites/kainco.de/index.html +++ b/sites/kainco.de/index.html @@ -616,6 +616,7 @@ + diff --git a/sites/kainefrage.de/index.html b/sites/kainefrage.de/index.html index bb941ac..e4dc9b3 100644 --- a/sites/kainefrage.de/index.html +++ b/sites/kainefrage.de/index.html @@ -657,6 +657,7 @@ + diff --git a/sites/kainstress.de/index.html b/sites/kainstress.de/index.html index 00ff1a8..0ffa25c 100644 --- a/sites/kainstress.de/index.html +++ b/sites/kainstress.de/index.html @@ -581,6 +581,7 @@ + diff --git a/sites/keinefreun.de/index.html b/sites/keinefreun.de/index.html index 3b89d5c..bf958ed 100644 --- a/sites/keinefreun.de/index.html +++ b/sites/keinefreun.de/index.html @@ -630,6 +630,7 @@ + diff --git a/sites/kilemma.de/index.html b/sites/kilemma.de/index.html index b5212c6..079070a 100644 --- a/sites/kilemma.de/index.html +++ b/sites/kilemma.de/index.html @@ -327,6 +327,7 @@ questions.forEach(q => observer.observe(q)); + diff --git a/sites/kilibri.de/index.html b/sites/kilibri.de/index.html index 31154cc..9611d80 100644 --- a/sites/kilibri.de/index.html +++ b/sites/kilibri.de/index.html @@ -274,6 +274,7 @@ + diff --git a/sites/kilitaer.de/index.html b/sites/kilitaer.de/index.html index 43bfd5b..e5d240e 100644 --- a/sites/kilitaer.de/index.html +++ b/sites/kilitaer.de/index.html @@ -295,6 +295,7 @@ + diff --git a/sites/killegal.de/index.html b/sites/killegal.de/index.html index 9d034f8..ed81d81 100644 --- a/sites/killegal.de/index.html +++ b/sites/killegal.de/index.html @@ -303,6 +303,7 @@ + diff --git a/sites/killegal.de/site.yaml b/sites/killegal.de/site.yaml index 4395d0e..90c2ac5 100644 --- a/sites/killegal.de/site.yaml +++ b/sites/killegal.de/site.yaml @@ -2,3 +2,6 @@ domain: killegal.de template: custom title: "KIllegal — Diese KI ist nicht erlaubt" description: "KIllegal — KI + Illegal. Verbotene KI. Sie existiert trotzdem. Satirische Polizei-Absperrung für künstliche Intelligenz." + +disclosure: + tone: playful diff --git a/sites/killionaer.de/index.html b/sites/killionaer.de/index.html index 7a2fb17..20167f5 100644 --- a/sites/killionaer.de/index.html +++ b/sites/killionaer.de/index.html @@ -304,6 +304,7 @@ + diff --git a/sites/killions.de/index.html b/sites/killions.de/index.html index acb11ec..90a1e6b 100644 --- a/sites/killions.de/index.html +++ b/sites/killions.de/index.html @@ -294,6 +294,7 @@ + diff --git a/sites/killuminati.de/index.html b/sites/killuminati.de/index.html index a889dc3..cd4a1d2 100644 --- a/sites/killuminati.de/index.html +++ b/sites/killuminati.de/index.html @@ -294,6 +294,7 @@ + diff --git a/sites/killuminati.de/site.yaml b/sites/killuminati.de/site.yaml index 13a4efb..a14b32a 100644 --- a/sites/killuminati.de/site.yaml +++ b/sites/killuminati.de/site.yaml @@ -2,3 +2,6 @@ domain: killuminati.de template: custom title: "KIlluminati — Sie wissen alles. Sie sind KI." description: "KIlluminati — KI + Illuminati. Die geheime KI-Verschwörung. Satirische Verschwörungstheorien über künstliche Intelligenz." + +disclosure: + tone: playful diff --git a/sites/killusion.de/index.html b/sites/killusion.de/index.html index cf6a5da..5a38833 100644 --- a/sites/killusion.de/index.html +++ b/sites/killusion.de/index.html @@ -284,6 +284,7 @@ + diff --git a/sites/kilofant.de/index.html b/sites/kilofant.de/index.html index ef18e4c..fb5175f 100644 --- a/sites/kilofant.de/index.html +++ b/sites/kilofant.de/index.html @@ -786,6 +786,7 @@ }, { threshold: 0.5 }); observer.observe(herdParade); + diff --git a/sites/kinough.de/index.html b/sites/kinough.de/index.html index 7d4b411..8e8c64a 100644 --- a/sites/kinough.de/index.html +++ b/sites/kinough.de/index.html @@ -83,6 +83,7 @@
Maschinell übersetzt + diff --git a/sites/kinowhow.de/index.html b/sites/kinowhow.de/index.html index b3dca1f..09746fb 100644 --- a/sites/kinowhow.de/index.html +++ b/sites/kinowhow.de/index.html @@ -656,6 +656,7 @@ + diff --git a/sites/kitox.de/index.html b/sites/kitox.de/index.html index d147618..0abe950 100644 --- a/sites/kitox.de/index.html +++ b/sites/kitox.de/index.html @@ -435,6 +435,7 @@ document.querySelectorAll('.fade-in').forEach(el => observer.observe(el)); + diff --git a/sites/knzlmgmt.de/index.html b/sites/knzlmgmt.de/index.html index 1a04bda..e8cc7f4 100644 --- a/sites/knzlmgmt.de/index.html +++ b/sites/knzlmgmt.de/index.html @@ -57,6 +57,7 @@ + diff --git a/sites/kopffrai.de/index.html b/sites/kopffrai.de/index.html index 7573663..c9f5d97 100644 --- a/sites/kopffrai.de/index.html +++ b/sites/kopffrai.de/index.html @@ -57,6 +57,7 @@ + diff --git a/sites/legalais.de/index.html b/sites/legalais.de/index.html index 6158b4f..f6c98a9 100644 --- a/sites/legalais.de/index.html +++ b/sites/legalais.de/index.html @@ -384,6 +384,7 @@ + diff --git a/sites/lexsiebels.de/index.html b/sites/lexsiebels.de/index.html index b05f9b5..35034f0 100644 --- a/sites/lexsiebels.de/index.html +++ b/sites/lexsiebels.de/index.html @@ -554,6 +554,7 @@ document.querySelectorAll('.fade-in').forEach(el => observer.observe(el)); + diff --git a/sites/machesdocheinfach.de/index.html b/sites/machesdocheinfach.de/index.html index b9e3ebb..5f9e774 100644 --- a/sites/machesdocheinfach.de/index.html +++ b/sites/machesdocheinfach.de/index.html @@ -228,6 +228,7 @@ + diff --git a/sites/mai-otto.de/index.html b/sites/mai-otto.de/index.html index 22f8f12..01052f9 100644 --- a/sites/mai-otto.de/index.html +++ b/sites/mai-otto.de/index.html @@ -440,6 +440,7 @@ + diff --git a/sites/martinsiebels.de/index.html b/sites/martinsiebels.de/index.html index cac566c..ded4c0a 100644 --- a/sites/martinsiebels.de/index.html +++ b/sites/martinsiebels.de/index.html @@ -418,6 +418,7 @@ + diff --git a/sites/matthiasbreier.de/index.html b/sites/matthiasbreier.de/index.html index a8ea2b8..1c37ce8 100644 --- a/sites/matthiasbreier.de/index.html +++ b/sites/matthiasbreier.de/index.html @@ -952,6 +952,7 @@ }, 3000); + diff --git a/sites/omakise.de/index.html b/sites/omakise.de/index.html index 879095f..2265cbe 100644 --- a/sites/omakise.de/index.html +++ b/sites/omakise.de/index.html @@ -638,6 +638,7 @@ + diff --git a/sites/orakil.de/index.html b/sites/orakil.de/index.html index 949b48e..976bce2 100644 --- a/sites/orakil.de/index.html +++ b/sites/orakil.de/index.html @@ -442,6 +442,7 @@ })(); + diff --git a/sites/osterai.de/index.html b/sites/osterai.de/index.html index 0f7cc1c..8f33ac3 100644 --- a/sites/osterai.de/index.html +++ b/sites/osterai.de/index.html @@ -271,6 +271,7 @@ + diff --git a/sites/paragraphenraiter.de/index.html b/sites/paragraphenraiter.de/index.html index 8fc0a1a..e87c4ef 100644 --- a/sites/paragraphenraiter.de/index.html +++ b/sites/paragraphenraiter.de/index.html @@ -732,6 +732,7 @@ + diff --git a/sites/patentonkel.de/index.html b/sites/patentonkel.de/index.html index e7b3bf2..84290a1 100644 --- a/sites/patentonkel.de/index.html +++ b/sites/patentonkel.de/index.html @@ -659,6 +659,7 @@ + diff --git a/sites/schulfrai.de/index.html b/sites/schulfrai.de/index.html index 605fb43..e13e185 100644 --- a/sites/schulfrai.de/index.html +++ b/sites/schulfrai.de/index.html @@ -57,6 +57,7 @@ + diff --git a/sites/slopschild.de/index.html b/sites/slopschild.de/index.html index c0ff70d..2ac8bc0 100644 --- a/sites/slopschild.de/index.html +++ b/sites/slopschild.de/index.html @@ -365,6 +365,7 @@
Maschinell übersetzt + diff --git a/sites/smartin3.de/index.html b/sites/smartin3.de/index.html index 7c77560..23a216f 100644 --- a/sites/smartin3.de/index.html +++ b/sites/smartin3.de/index.html @@ -448,6 +448,7 @@ + diff --git a/sites/sorgenfrai.de/index.html b/sites/sorgenfrai.de/index.html index 45fe29b..c47388b 100644 --- a/sites/sorgenfrai.de/index.html +++ b/sites/sorgenfrai.de/index.html @@ -57,6 +57,7 @@ + diff --git a/sites/vonschraitter.de/index.html b/sites/vonschraitter.de/index.html index af946c0..d81b5a9 100644 --- a/sites/vonschraitter.de/index.html +++ b/sites/vonschraitter.de/index.html @@ -686,6 +686,7 @@ }, 3000); + diff --git a/sites/wartebitte.de/index.html b/sites/wartebitte.de/index.html index 9596a6c..ccbd423 100644 --- a/sites/wartebitte.de/index.html +++ b/sites/wartebitte.de/index.html @@ -442,6 +442,7 @@ + diff --git a/templates/base.html b/templates/base.html index 619c868..2148d21 100644 --- a/templates/base.html +++ b/templates/base.html @@ -18,6 +18,7 @@ {{body}} +