# 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 <head> folgende Favicon-Tags enthalten:"
    - "<link rel=\"icon\" type=\"image/svg+xml\" href=\"/favicon.svg\">"
    - "<link rel=\"apple-touch-icon\" href=\"/assets/images/logos/AegisSightLogo_NavyGold.svg\">"
    - "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/
