# CLAUDE.md - AegisSight Website RELATED_DOCS: COOKIE_CONSENT_IMPLEMENTATION.md: "Cookie-Banner Implementierung, GDPR, Testing" DATENSCHUTZ_ANALYTICS.md: "Textbausteine fuer Datenschutzerklaerung" PROFESSIONAL_TOOLBOX_CONTENT.md: "Backup-HTML fuer entfernte Produktkarte" VIDEO_UPLOAD_INSTRUCTIONS.md: "Anleitung fuer manuelle Video-Uploads (Git-Limit)" PROJECT: Website STATUS: PRODUCTION URL: https://aegis-sight.de CONTAINER: aegis-website-nginx COMPANY: name: AegisSight UG (haftungsbeschraenkt) domain: aegis-sight.de email: info@aegis-sight.de TECHNOLOGY: type: Static Website build_process: NONE deployment: Docker/nginx frontend: - HTML5 - CSS3 (modular) - JavaScript ES6+ - SVG features: - multi_language: [DE, EN] - responsive: mobile-first - video_backgrounds: true - cookie_consent: GDPR-compliant - security_headers: enabled STRUCTURE: root_files: - index.html: Hauptseite - impressum.html: Impressum DE - impressum-en.html: Impressum EN - datenschutz.html: Datenschutz DE - datenschutz-en.html: Datenschutz EN - accountforger-video.html: Produkt-Demo - robots.txt: SEO-Konfiguration - cookie-consent.js: GDPR Cookie-System - cookie-consent.css: Cookie-Banner Styles directories: assets: fonts: [Inter, Bebas Neue] images: icons: UI-Icons (SVG) flags: Laenderflaggen logos: "Logo+Schrift_Rechts.svg" videos: "~300MB - Hero-Videos, AFv6.mp4" css: - main.css: Kern-Styles - animations-enhanced.css: Animationen - mobile.css: Mobile Responsive - fonts.css: Typografie js: - main.js: Einstiegspunkt - translations.js: Mehrsprachigkeit - components.js: UI-Komponenten - animations.js: Animationssystem docs: Rechtliche PDFs lagen: iran-konflikt: - index.html: Lagebild-Seite (Leaflet, Tabs, Timeline) - lagebild.js: Datenladung, Rendering, Interaktionen - lagebild.css: Dark-Theme Styling - data/: current.json + Snapshots (sync alle 5min) vorschau: - index.html: Produktseite AegisSight Monitor (Passwort-Gate) css: - style.css: Light-Mode Design (Navy/Gold Akzente) js: - app.js: Hero-Videos, 3D-Karussell, Leaflet-Karte, Live-Daten, Kontaktformular PAGES: homepage: sections: [Hero mit Video, Ueber uns, Loesungen, Kontakt] legal: - Impressum (DE/EN) - Datenschutz (DE/EN) product: - AccountForger Video-Demo lagen: url_struktur: /lagen/{thema}/ redirect: /lagebild/ -> 301 -> /lagen/iran-konflikt/ aktiv: - iran-konflikt: Live-Lagebild Irankonflikt (ehemals /lagebild/) geplant: - (2 weitere Lagen in Vorbereitung) vorschau: url: /vorschau/ zweck: Produktseite AegisSight Monitor (ersetzt spaeter die Hauptseite) auth: JavaScript SHA-256 Passwort-Gate (kein Benutzername) design: Light-Mode, Navy/Gold Akzente, SVG-Wellen/Diagonale Divider sections: [Hero mit Video (clip-path Chevron), Problem (dark), Workflow 3-Schritte, Live-Stats, 3D-Karussell mit Lagebild-Text, Leaflet-Karte (gekoppelt an Karussell), Faktenprüfung-Statement, Features (5 Cards zentriert), CTA, Unser Versprechen] daten: Fetcht /lagen/iran-konflikt/data/summary.json (~116 KB) karussell: 3D-Perspektive, 3 Cards (Iran live + 2 Platzhalter), Karte wechselt mit karte: Leaflet mit Pulse-Markern, Dark Popups/Legende, gekoppelt an aktive Lage kontaktformular: Popup-Modal (Name, Organisation, E-Mail, Nachricht) -> /api/contact -> SMTP icons: monitor.svg + languages.svg (Lucide) hinzugefuegt DEVELOPMENT: translations: js/translations.js large_files: "assets/videos/ (~300MB)" design: mobile-first responsive SERVICES: contact-form: script: /opt/v2-Docker/aegis-website/contact-form.py service: aegis-contact.service port: 127.0.0.1:8074 nginx: /api/contact -> 127.0.0.1:8074 zweck: Kontaktformular-Handler (SMTP an info@aegis-sight.de) rate_limit: 3 Anfragen pro IP / 10 Min DEPLOYMENT: container: aegis-website-nginx server: nginx (static files) ssl: enabled security_headers: enabled rate_limiting: configured CHANGE_LOG: 2026-01-08: - "Rebrand: IntelSight -> AegisSight" - "Neues Logo: Logo+Schrift_Rechts.svg" - "Email: info@aegis-sight.de" - "Footer: Dynamisches Jahr, AGB entfernt" Last-Updated: 2026-04-06 RULES: neue_html_seiten: - "Jede neue HTML-Datei MUSS im
folgende Favicon-Tags enthalten:" - "" - "" - "Fuer Unterverzeichnisse relative Pfade anpassen, z.B. ../favicon.svg" # ─────────────────────────────────────────────────────────────────── # STAGING-UMGEBUNG # ─────────────────────────────────────────────────────────────────── STAGING: url: https://staging.aegis-sight.de server: 46.225.225.49 (gleicher Host wie Live) container: aegis-website-staging-nginx (eigener Docker-Container) pfad: /opt/v2-Docker/aegis-website-staging/html branch: develop netzwerk_ip: 172.18.0.7 (im v2_internal_net) zugriff: Magic-Link-Login an info@aegis-sight.de (Cookie 30 Tage) besonderheit_lagen_daten: erklaerung: | Die Live-Lagen-Daten (/lagen/*/data/*.json) werden vom sync-lagebild.py erzeugt und nicht ins Repo committed. Im Staging-Container ist das Live-/lagen/-Verzeichnis read-only gemountet, damit die Karten-Vorschau auch im Staging mit echten Daten funktioniert. mount_im_compose: /opt/v2-Docker/aegis-website/html/lagen:/usr/share/nginx/html/lagen:ro auth_service: pfad: /opt/v2-Docker/aegis-staging-auth service: aegis-staging-auth.service port: 127.0.0.1:8095 cookie_domain: staging.aegis-sight.de cookie_name: aegis_staging_auth WORKFLOW_STAGING_TO_LIVE: 1_aenderung_in_develop: | cd /opt/v2-Docker/aegis-website-staging/html git checkout develop # Aenderung machen git add . && git commit -m ... git push origin develop 2_staging_aktualisieren_manuell: | ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website-staging/html && git pull' # Kein Container-Reload noetig (statische Files) 3_in_browser_pruefen: https://staging.aegis-sight.de 4_promote_zu_live: | # Auf Gitea: Pull Request develop -> main, dann mergen # Danach auf Live-Server pullen: ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && git pull' # ─────────────────────────────────────────────────────────────────── # AUTO-DEPLOY + PROMOTE-UI # ─────────────────────────────────────────────────────────────────── AUTO_DEPLOY: prinzip: | Gitea-Webhook bei Push auf develop -> Listener-Service auf dem Server pullt automatisch + restartet ggf. den Service. Kein manueller git pull mehr noetig. listener_service: pfad: /opt/v2-Docker/aegis-staging-deploy service: aegis-staging-deploy.service port: 127.0.0.1:8096 deployments: staging: "develop -> /opt/v2-Docker/aegis-website-staging/html" live: "main -> /opt/v2-Docker/aegis-website/html" endpoints: "POST /__deploy": "staging (HMAC ueber Gitea-Webhook)" "POST /__deploy/live": "live (HMAC ueber Promote-UI)" secrets: in /opt/v2-Docker/aegis-staging-deploy/.env (nicht im Repo) gitea_webhook: repo: AegisSight/Website url: https://staging.aegis-sight.de/__deploy branch_filter: develop PROMOTE_UI: url: https://deploy.aegis-sight.de pfad: /opt/v2-Docker/aegis-promote service: aegis-promote.service port: 127.0.0.1:8097 zugriff: Magic-Link-Login an info@aegis-sight.de (eigener Cookie deploy.aegis-sight.de) funktion: | Zeigt pro Service (Webseite + Monitor) Live-Stand vs. Staging-Stand. Promote-Button erstellt Gitea-PR develop->main, mergt ihn auto, und triggert den Live-Deploy via HMAC-signed Webhook am Listener-Service. WORKFLOW_KOMPLETT: 1_entwickeln: | git checkout develop # Aenderung git add . && git commit && git push origin develop # -> Auto-Deploy pullt in /opt/v2-Docker/aegis-website-staging/html 2_pruefen_staging: https://staging.aegis-sight.de/ 3_promoten: https://deploy.aegis-sight.de/ (Promote-Knopf) 4_pruefen_live: https://aegis-sight.de/