Drei Fehler an der Live-Seite:
1. Die Figur begann bei top-0 und ragte damit in die Navigationsleiste -
Kopf und Schulter lagen hinter "Start" und "Ueber mich". Sie startet
jetzt bei top-16 bzw. top-20, also genau unter dem Header.
2. Auf schmalen Screens war der Kopf komplett abgeschnitten. Das Bild
skalierte ueber die Breite (h-auto w-full); bei 72 % Breite wird das
hochformatige Motiv hoeher als sein Container, und items-end schneidet
dann oben ab. Es skaliert jetzt durchgehend ueber die Hoehe
(h-full w-auto object-bottom), damit passt es immer hinein.
3. Das Genre-Laufband sprang sichtbar zurueck. Zwei Kopien wurden um -50 %
verschoben, aber eine Kopie ist auf breiten Bildschirmen schmaler als der
Viewport - dadurch klaffte vor dem Neustart eine Luecke. Jetzt zwei Spuren
mit min-w-full, beide um ihre volle eigene Breite (-100 %); Spur 2 steht
beim Neustart exakt auf der Startposition von Spur 1. Das umgebende
Element bekam ausserdem das fehlende overflow-hidden.
Nachgemessen bei 1265x720 und 375x812: Kopf unterhalb der Headerkante,
beide Spuren gleich breit und mindestens viewportbreit, kein horizontaler
Scroll.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Ein CSP-Header im Reverse-Proxy hat die Seite still zerlegt: Astro liefert
seine Skripte als inline type=module aus, "script-src 'self'" blockiert die.
Im Browser blieb data-reveal leer und das Mobilmenue reagierte nicht, ohne
dass eine Fehlermeldung sichtbar war.
Astro kennt die Hashes seiner eigenen Bundles, deshalb setzt jetzt der Build
die Policy per <meta> (security.csp in astro.config.mjs).
Damit die Policy auch fuer Styles streng bleiben kann, sind die letzten drei
style-Attribute raus: sobald eine CSP Hashes fuer Styles enthaelt, ignorieren
Browser 'unsafe-inline', inline gesetzte Farben waeren also ohnehin verloren.
- Laserstrahlen im Hero: .beam-1 bis .beam-5 im <style>-Block
- Genre-Akzentfarben: .accent-<name> statt berechnetem style-Attribut
Geprueft im Browser hinter Caddy: Skripte laufen, Laser-Winkel und
Akzentfarben stimmen, keine Verstoesse in der Konsole.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Ein Caddy pro Compose-Projekt funktioniert nur, solange es ein Projekt gibt:
Port 443 laesst sich nicht teilen, und die TLS-Konfiguration verteilt sich
sonst ueber fremde Repos. Der Proxy liegt jetzt zentral in docker-edge.
- caddy-Service und Caddyfile entfernt
- web haengt im gemeinsamen externen Netz "edge" und veroeffentlicht
keinen Port mehr
- json-file-Logrotation gesetzt, Docker rotiert sonst gar nicht
- README auf die neue Aufteilung umgeschrieben
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Auf dem Zielserver haelt bereits ein anderer Dienst Port 443, der Start des
Caddy-Containers scheiterte deshalb mit "port is already allocated". Zwei
Prozesse koennen sich einen Port nicht teilen.
- caddy laeuft nur noch mit "--profile edge"
- web veroeffentlicht 127.0.0.1:4321, damit ein vorhandener Reverse-Proxy
darauf zugreifen kann, ohne dass der Port oeffentlich erreichbar wird
- README beschreibt beide Varianten inklusive vhost-Beispielen und dem
Hinweis, dass Security-Header und IP-Maskierung dann im vorhandenen
Proxy nachgezogen werden muessen
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Das Repo ist privat, ein HTTPS-Clone auf dem Server wuerde interaktiv nach
Zugangsdaten fragen. Stattdessen ein repo-eigener Deploy-Key mit Nur-Lese-
Rechten und ein eigener Host-Alias, damit der Key nicht bei anderen
GitHub-Repos angeboten wird.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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>