Website djnizz.at: Hero- und About-Sektion mit Docker-Deployment

Astro 7 mit Tailwind 4 und Node-Adapter. Alle Seiten werden vorgerendert,
der Node-Server ist dabei, damit spaeter einzelne Routen (Booking-Formular)
ohne Umbau am Deployment dynamisch werden koennen.

Inhalt:
- Fullscreen-Hero mit freigestelltem Render, animierten Lasern und
  Genre-Laufband; Typografie als HTML statt eingebranntem Bildtext
- About-Sektion mit Genre-Karten und Eckdaten
- Impressum und Datenschutzerklaerung
- Zentrale Inhaltsdatei src/data/site.ts

Technik:
- Selbst gehostete Schriften, keine Cookies, kein Tracking, keine
  externen Requests
- Docker Multi-Stage (238 MB) hinter Caddy mit automatischem HTTPS,
  Security-Headern und IP-maskierten Logs
- scripts/cutout.mjs stellt den Render ueber eine Sobel-Kantenkarte frei
  und entfernt eingeschlossene Hintergrundflaechen

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 23:17:13 +02:00
co-authored by Claude Opus 5
commit 074c87ed79
38 changed files with 7740 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
{
# Mailadresse fuer Let's Encrypt (Ablaufwarnungen). Ueberschreibbar per .env
email {$ACME_EMAIL:business.djnizz@gmail.com}
}
# --- Weiterleitung www -> Apex ----------------------------------------------
# Setzt einen DNS-A-Record fuer www.djnizz.at voraus. Wenn es den nicht gibt,
# diesen Block auskommentieren, sonst versucht Caddy dauerhaft erfolglos ein
# Zertifikat dafuer zu holen.
www.{$DOMAIN:djnizz.at} {
redir https://{$DOMAIN:djnizz.at}{uri} permanent
}
# --- Hauptseite -------------------------------------------------------------
{$DOMAIN:djnizz.at} {
encode zstd gzip
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
Referrer-Policy "strict-origin-when-cross-origin"
Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=()"
Cross-Origin-Opener-Policy "same-origin"
-Server
}
# Astro haengt einen Content-Hash an alle Assets unter /_astro/ -
# die duerfen daher unbegrenzt gecacht werden.
# ">" ersetzt den Header, statt einen zweiten danebenzustellen -
# der Node-Adapter setzt fuer gehashte Assets bereits ein Cache-Control.
@immutable path /_astro/*
header @immutable >Cache-Control "public, max-age=31536000, immutable"
reverse_proxy web:4321
log {
output file /var/log/caddy/access.log {
roll_size 10MiB
roll_keep 4
roll_keep_for 336h
}
# Client-IPs werden gekuerzt und Cookies/Auth-Header nicht mitgeloggt.
# Muss zur Datenschutzerklaerung passen.
format filter {
wrap json
fields {
request>remote_ip ip_mask {
ipv4 24
ipv6 32
}
request>headers>Cookie delete
request>headers>Authorization delete
}
}
}
}