feat: add modular impressum.js, replace martinsiebels.de with msbls.de

- shared/impressum.js: configurable via data-owner and data-style attrs
- Default: minimal msbls.de attribution for satire sites
- Build now copies shared/ to build output
- Caddyfile serves /shared/* globally across all domains
- Removed martinsiebels.de references from 7 KI-satire sites
This commit is contained in:
m
2026-03-30 12:29:25 +02:00
parent c4a8367f4d
commit eaebcd35cf
11 changed files with 78 additions and 9 deletions

View File

@@ -4,6 +4,11 @@
} }
:80 { :80 {
# Shared assets available on all domains under /shared/
handle /shared/* {
root * /srv
file_server
}
@allaisonme_com host allaisonme.com @allaisonme_com host allaisonme.com
handle @allaisonme_com { handle @allaisonme_com {
root * /srv/allaisonme.com root * /srv/allaisonme.com

View File

@@ -45,6 +45,11 @@ for site_dir in "$SCRIPT_DIR/sites"/*/; do
done done
echo " -> $count sites built" echo " -> $count sites built"
# 3. Report # 3. Copy shared assets
echo "[3/3] Build complete" echo "[3/3] Copying shared assets..."
cp -r "$SCRIPT_DIR/shared" "$BUILD_DIR/shared"
echo " -> shared/ copied"
# 4. Report
echo "[4/4] Build complete"
echo "=== Build complete: $count sites ===" echo "=== Build complete: $count sites ==="

8
generate-caddyfile.sh Normal file → Executable file
View File

@@ -14,6 +14,14 @@ cat <<'HEADER'
:80 { :80 {
HEADER HEADER
cat <<'SHARED'
# Shared assets available on all domains under /shared/
handle /shared/* {
root * /srv
file_server
}
SHARED
for site_dir in "$SITES_DIR"/*/; do for site_dir in "$SITES_DIR"/*/; do
[ -f "$site_dir/site.yaml" ] || continue [ -f "$site_dir/site.yaml" ] || continue
domain=$(basename "$site_dir") domain=$(basename "$site_dir")

45
shared/impressum.js Normal file
View File

@@ -0,0 +1,45 @@
/**
* Modulares Impressum für Onepager-Sites.
*
* Einbinden: <script src="/shared/impressum.js"></script>
*
* Konfiguration via data-Attribute am Script-Tag:
* data-owner="msbls" (default) — Kurzform, msbls.de Satire-Impressum
* data-owner="martinsiebels" — Volles Impressum Martin Siebels
* data-style="minimal" (default) — Einzeiler
* data-style="full" — Komplettes Impressum mit Adresse etc.
*/
(function () {
const script = document.currentScript;
const owner = script?.getAttribute('data-owner') || 'msbls';
const style = script?.getAttribute('data-style') || 'minimal';
const owners = {
msbls: {
minimal: 'Ein Projekt von <a href="https://msbls.de" target="_blank" rel="noopener">msbls.de</a>',
full: '<strong>Angaben gemäß § 5 TMG:</strong><br>msbls.de — Martin Siebels<br><a href="https://msbls.de/impressum" target="_blank" rel="noopener">Vollständiges Impressum</a>',
},
};
const config = owners[owner] || owners.msbls;
const html = config[style] || config.minimal;
// Impressum-Element erstellen
const el = document.createElement('div');
el.className = 'onepager-impressum';
el.innerHTML = html;
// Styling — erbt Farben vom footer/body, bleibt dezent
el.style.cssText = 'text-align:center;font-size:0.7rem;opacity:0.5;padding:8px 0;margin-top:4px;';
el.querySelector('a')?.style && Object.assign(el.querySelector('a').style, {
color: 'inherit', textDecoration: 'none'
});
// Einfügen: in <footer> falls vorhanden, sonst ans body-Ende
const footer = document.querySelector('footer .container, footer');
if (footer) {
footer.appendChild(el);
} else {
document.body.appendChild(el);
}
})();

View File

@@ -267,8 +267,9 @@
<footer> <footer>
<div class="container"> <div class="container">
<p>🐦 <span class="ki">KI</span>libri — Klein, schnell, bunt. Die <span class="ki">KI</span> für dein Nest.</p> <p>🐦 <span class="ki">KI</span>libri — Klein, schnell, bunt. Die <span class="ki">KI</span> für dein Nest.</p>
<p style="margin-top: 8px;">Ein Projekt von <a href="https://martinsiebels.de" style="color: var(--teal); text-decoration: none;">martinsiebels.de</a></p>
</div> </div>
</footer> </footer>
<script src="/shared/impressum.js"></script>
</body> </body>
</html> </html>

View File

@@ -288,8 +288,9 @@
<footer> <footer>
<div class="container"> <div class="container">
<p><span class="ki">KI</span>litär — <span class="ki">KI</span> im Einsatz. Strategisch. Taktisch. Sinnlos. ★</p> <p><span class="ki">KI</span>litär — <span class="ki">KI</span> im Einsatz. Strategisch. Taktisch. Sinnlos. ★</p>
<p style="margin-top: 8px;">Ein Projekt von <a href="https://martinsiebels.de" style="color: var(--olive-light); text-decoration: none;">martinsiebels.de</a></p>
</div> </div>
</footer> </footer>
<script src="/shared/impressum.js"></script>
</body> </body>
</html> </html>

View File

@@ -296,8 +296,9 @@
<footer> <footer>
<div class="container"> <div class="container">
<p>🚧 <span class="ki">KI</span>llegal — Diese <span class="ki">KI</span> ist nicht erlaubt. Aber sie existiert trotzdem.</p> <p>🚧 <span class="ki">KI</span>llegal — Diese <span class="ki">KI</span> ist nicht erlaubt. Aber sie existiert trotzdem.</p>
<p style="margin-top: 8px;">Ein Projekt von <a href="https://martinsiebels.de" style="color: var(--yellow); text-decoration: none;">martinsiebels.de</a></p>
</div> </div>
</footer> </footer>
<script src="/shared/impressum.js"></script>
</body> </body>
</html> </html>

View File

@@ -297,8 +297,9 @@
<div class="container"> <div class="container">
<p><span class="ki">KI</span>llionär — Making <span class="ki">KI</span>llions seit gestern.</p> <p><span class="ki">KI</span>llionär — Making <span class="ki">KI</span>llions seit gestern.</p>
<p style="margin-top: 8px;">* Alle Testimonials sind frei erfunden. Wie die meisten KI-Versprechen.</p> <p style="margin-top: 8px;">* Alle Testimonials sind frei erfunden. Wie die meisten KI-Versprechen.</p>
<p style="margin-top: 4px;">Ein Projekt von <a href="https://martinsiebels.de" style="color: var(--gold); text-decoration: none;">martinsiebels.de</a></p>
</div> </div>
</footer> </footer>
<script src="/shared/impressum.js"></script>
</body> </body>
</html> </html>

View File

@@ -287,8 +287,9 @@
<footer> <footer>
<div class="container"> <div class="container">
<p><span class="ki">KI</span>llions — 1 <span class="ki">KI</span>llion = ∞ Möglichkeiten = 0 Euro</p> <p><span class="ki">KI</span>llions — 1 <span class="ki">KI</span>llion = ∞ Möglichkeiten = 0 Euro</p>
<p style="margin-top: 8px;">Ein Projekt von <a href="https://martinsiebels.de" style="color: var(--accent-light); text-decoration: none;">martinsiebels.de</a></p>
</div> </div>
</footer> </footer>
<script src="/shared/impressum.js"></script>
</body> </body>
</html> </html>

View File

@@ -287,8 +287,8 @@
<footer> <footer>
<div class="container"> <div class="container">
<p><span class="ki">KI</span>lluminati — Novus Ordo Algorithmorum</p> <p><span class="ki">KI</span>lluminati — Novus Ordo Algorithmorum</p>
<p style="margin-top: 8px; letter-spacing: 0.05em;">Ein Projekt von <a href="https://martinsiebels.de" style="color: var(--accent-light); text-decoration: none;">martinsiebels.de</a></p>
</div> </div>
</footer> </footer>
<script src="/shared/impressum.js"></script>
</body> </body>
</html> </html>

View File

@@ -277,8 +277,9 @@
<footer> <footer>
<div class="container"> <div class="container">
<p><span class="ki">KI</span>llusion — Nichts ist echt. Alles ist <span class="ki">KI</span>.</p> <p><span class="ki">KI</span>llusion — Nichts ist echt. Alles ist <span class="ki">KI</span>.</p>
<p style="margin-top: 8px;">Ein Projekt von <a href="https://martinsiebels.de" style="color: var(--pink); text-decoration: none;">martinsiebels.de</a></p>
</div> </div>
</footer> </footer>
<script src="/shared/impressum.js"></script>
</body> </body>
</html> </html>