- /vorschau/ entfernt (alte Vorab-Produktseite, durch index.html mit Hero-Slider und Live-Demos ersetzt) - STRUCTURE: aktive vs. legacy CSS/JS getrennt, videos/, downloads/, insights/, accountforger-video.html ergaenzt - Lagen: cyberangriffe und deepfakes binden Lagebild-Assets aus iran-konflikt ein - SERVICES: sync-lagebild und insights ergaenzt - DEPLOYMENT: Cache-/Auth-Besonderheiten dokumentiert
15 KiB
CLAUDE.md - AegisSight Website
RELATED_DOCS: COOKIE_CONSENT_IMPLEMENTATION.md: "Cookie-Banner Implementierung, GDPR, Testing" DATENSCHUTZ_ANALYTICS.md: "Textbausteine für Datenschutzerklärung" PROFESSIONAL_TOOLBOX_CONTENT.md: "Backup-HTML für entfernte Produktkarte" VIDEO_UPLOAD_INSTRUCTIONS.md: "Anleitung für manuelle Video-Uploads (Git-Limit)" LAUNCH-CHECKLIST.md: "Checkliste für den Launch der überarbeiteten Hauptseite"
PROJECT: Website STATUS: PRODUCTION URL: https://aegis-sight.de CONTAINER: aegis-website-nginx (+ aegis-php-fpm für /insights/)
COMPANY: name: AegisSight UG (haftungsbeschränkt) domain: aegis-sight.de email: info@aegis-sight.de
TECHNOLOGY: type: Static Website (kein Build-Step) build_process: NONE deployment: Docker (nginx:alpine für statische Files, PHP-FPM für /insights/)
frontend: - HTML5 - CSS3 (modular) - JavaScript ES6+ (kein Framework) - SVG - Leaflet 1.9.4 + MarkerCluster (CDN, für Lagebild-Karten)
features: - multi_language: [DE, EN] - responsive: mobile-first - hero_video_slider: 5 Slides auf der Startseite (Auto-Play mit Endcard, manuelle Navigation) - 3d_carousel: Lagen-Showcase auf der Hauptseite, gekoppelt an Leaflet-Karte - live_data: /lagen/{thema}/data/current.json (alle 5 min synchronisiert) - cookie_consent: GDPR-konform - security_headers: enabled
STRUCTURE: root_files: - index.html: Hauptseite (DE) - Hero-Slider, Features, Problem, Workflow, Demos, Kontakt, Trust - impressum.html: Impressum (DE) - datenschutz.html: Datenschutz (DE) - accountforger-video.html: Geschützte Produkt-Demo (auth_request gegen Security-Dashboard) - cookie-consent.js, cookie-consent.css: GDPR Cookie-System (liest <html lang> selbständig) - analytics-events.js: Umami-Custom-Events - favicon.svg, de.svg, en.svg, robots.txt, robots-launch.txt, sitemap-launch.xml - LAUNCH-CHECKLIST.md, DATENSCHUTZ_ANALYTICS.md, COOKIE_CONSENT_IMPLEMENTATION.md, PROFESSIONAL_TOOLBOX_CONTENT.md, VIDEO_UPLOAD_INSTRUCTIONS.md: interne Doku
directories: en/: - index.html: Hauptseite (EN) - legal-notice.html: Impressum (EN, Hinweis "German version prevails") - privacy.html: Datenschutz (EN, Hinweis "German version prevails") situations/: - iran-conflict/index.html: Lagebild Iran (EN-Mirror, teilt /lagen/iran-konflikt/data) - cyber-attacks/index.html: Lagebild Cyberangriffe (EN-Mirror, teilt /lagen/cyberangriffe/data) - deepfakes/index.html: Recherche Deepfakes (EN-Mirror, teilt /lagen/deepfakes/data)
assets/:
fonts/: Inter, Bebas Neue
images/: icons (UI-SVG), flags (Länderflaggen), logos (Logo+Schrift_Rechts.svg, AegisSightLogo_NavyGold.svg, og-image.png)
videos/AFv6.mp4: AccountForger-Demo, ~93 MB, Git LFS
handshake.svg
videos/: Hero-Slider-Videos der Startseite
- hero-slide-1-monitoring.mp4: Echtzeit-Monitoring
- hero-slide-2-monitoring.mp4: Faktenprüfung
- hero-slide-3-monitoring.mp4: KI-gestützte Recherche
- hero-slide-4-monitoring.mp4: Globale Quellenabdeckung
- hero-slide-5-monitoring.mp4: Flexibel einsetzbar
css/:
aktiv_eingebunden:
- main.css: Kern-Styles
- style.css: Light-Mode Styles (index, legal pages, /en/)
- mobile.css: Mobile Responsive
- fonts.css: Typografie
- lang-switcher.css: Sprachumschalter-Komponente (DE/EN)
legacy_nicht_eingebunden:
- about-modern.css, animations.css, animations-enhanced.css, products-modern.css, section-transitions.css
js/:
aktiv_eingebunden:
- app.js: Hero-Slider, Smooth-Scroll, Mobile-Menü, 3D-Karussell, Leaflet-Karte, Live-Daten, Kontaktformular
- config.js: globale Konfiguration
- mobile-nav.js: Mobile-Menü-Helfer
legacy_nicht_eingebunden:
- main.js, components.js, animations.js, animations-enhanced.js, hero-videos.js, legal-pages.js, section-transitions.js
docs/: Legacy-PDFs aus IntelSight-Zeit, von der aktuellen Seite nicht mehr verlinkt
- datenschutzerklaerung_intelsight_de_de.pdf, impressum_intelsight_de_de.pdf, Sitemap_IntelSight_UG.docx
downloads/:
af-updates/: AccountForger-Update-Pakete (per Token zugänglich)
insights/: PHP-Skripte für /insights/ (Container aegis-php-fpm), Datenablage in insights/data/
lagen/:
iran-konflikt/:
- index.html, lagebild.css, lagebild.js, data/{current.json, current_en.json, snapshot-N.json}
- HOST der Lagebild-Assets: cyberangriffe und deepfakes binden /lagen/iran-konflikt/lagebild.{css,js} ein
cyberangriffe/:
- index.html (referenziert /lagen/iran-konflikt/lagebild.{js,css}), data/...
deepfakes/:
- index.html (referenziert /lagen/iran-konflikt/lagebild.{js,css}), data/...
PAGES: homepage: sections: - "Hero: 5-Video-Slider mit Auto-Play, Endcard und manueller Navigation (Pfeile + Dots)" - "Features: Was der Monitor leistet (Echtzeit-Monitoring, Quellenanalyse, Geo, Mehrsprachigkeit, Lagebilder)" - "Problem: Warum manuelle OSINT-Auswertung nicht skaliert" - "Solution/Workflow: 3 Schritte (Erfassen, Analysieren, Berichten)" - "Demos: Live-Stats-Bar + 3D-Karussell (Iran/Cyber/Deepfakes-Cards) + gekoppelte Leaflet-Karte" - "Kontakt-CTA: öffnet Modal mit Kontaktformular" - "Trust: Unser Versprechen (Zusammenarbeit, Made in Germany, Partnerschaft, Nachhaltigkeit)" legal: - /impressum.html bzw. /en/legal-notice.html - /datenschutz.html bzw. /en/privacy.html product: - /accountforger-video.html: AccountForger Video-Demo, Cookie-/Token-geschützt über Security-Dashboard lagen: url_struktur: de: /lagen/{thema}/ en: /en/situations/{slug}/ slug_mapping: iran-konflikt: iran-conflict cyberangriffe: cyber-attacks deepfakes: deepfakes daten_freigabe: | EN-Mirror-Seiten setzen window.LAGEBILD_DATA_BASE auf den DE-Pfad, damit beide Sprachvarianten die gleichen JSON-Daten laden. lagebild.js liest curLang() aus <html lang> und schaltet UI-Strings automatisch um (lang.de / lang.en Dictionary). redirect: /lagebild/ -> 301 -> /lagen/iran-konflikt/ aktiv: - iran-konflikt / iran-conflict: Live-Lagebild Irankonflikt - cyberangriffe / cyber-attacks: Live-Lagebild Cyberangriffe - deepfakes / deepfakes: Recherche-Briefing Deepfakes (rechtliche Lage in DE)
DEVELOPMENT: i18n: ansatz: statische Duplikate (DE unter /, EN unter /en/) sprachumschalter: css/lang-switcher.css pendant_urls: in jeder Seite hardcoded (funktioniert ohne JS) cookie_banner: cookie-consent.js liest <html lang> selbständig lagen: lagebild.js liest <html lang> via curLang(); Daten-Pfad über window.LAGEBILD_DATA_BASE pro EN-Mirror-Seite kontaktformular: | Frontend (js/app.js) sendet lang im POST-Body, zeigt Sende- und Fehler-Texte in der jeweiligen Sprache. Backend (/opt/v2-Docker/aegis-website/contact-form.py, NICHT im Repo) liest lang und antwortet entsprechend; E-Mail an info@aegis-sight.de bleibt deutsch, mit Hinweis "[EN]" im Betreff bei EN-Anfragen. large_files: - assets/videos/AFv6.mp4 (~93 MB, Git LFS) - videos/hero-slide-{1..5}-monitoring.mp4 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 via IONOS an info@aegis-sight.de) rate_limit: 3 Anfragen pro IP / 10 Min i18n: lang im POST-Body steuert Fehler-/Erfolgsmeldungen, [EN]-Tag im Betreff
sync-lagebild: script: /opt/v2-Docker/aegis-website/sync-lagebild.py cron: alle 5 Minuten via /home/claude-dev/run-sync-lagebild.sh quelle: https://monitor.aegis-sight.de/api/public (X-API-Key) ziel: /opt/v2-Docker/aegis-website/html/lagen/{slug}/data/ übersetzung: claude-haiku-4-5 (Title, Description, Summary, Latest-Developments, Faktenchecks Batches à 30) cache: data/{slug}/translation_cache.json (md5(text) als key) lagen_konfiguriert: iran-konflikt (incident_id 6, legacy_endpoint), deepfakes (55), cyberangriffe (58)
insights: container: aegis-php-fpm (172.18.0.6) zweck: PHP-Backend für /insights/ (Analytics-Datenablage) volumes: ./insights:/var/www/insights:ro, ./insights/data:/var/www/insights/data:rw
DEPLOYMENT: container: aegis-website-nginx (172.18.0.5) server: nginx:alpine, read-only Filesystem, no-new-privileges, cap_drop ALL ssl: Host-nginx mit Let's Encrypt (Reverse-Proxy auf den Container) security_headers: /etc/nginx/snippets/security-headers.conf rate_limiting: konfiguriert für Kontaktformular und /usage/api/widget/ besonderheiten: - "Lagen-JSON: 60 s Browser-Cache mit must-revalidate (ETag-Validierung)" - "/accountforger-video.html + assets/videos/AFv6.mp4: auth_request gegen Security-Dashboard (8050), bei Ablehnung 302 zu /?showAuth=1" - "/analytics-und-so/datenblick.js: verschleierter Pfad gegen Adblocker (proxied auf Umami)"
CHANGE_LOG: 2026-01-08: - "Rebrand: IntelSight -> AegisSight" - "Neues Logo: Logo+Schrift_Rechts.svg" - "Email: info@aegis-sight.de" - "Footer: Dynamisches Jahr, AGB entfernt" 2026-05-06: - "i18n: Sprachumschalter DE/EN, neue Seiten unter /en/" - "Aufräumen: js/translations.js, impressum-en.html, datenschutz-en.html entfernt" - "data-translate Attribute aus Lagen-Seiten entfernt" - "EN-Lagen-Seiten unter /en/situations/{slug}/, teilen DE-Datenfiles" - "lagebild.js: curLang() liest <html lang>, dataBase()-Helper neu, tote initLangToggle/switchContent entfernt" - "Kontaktformular zweisprachig (Frontend + Backend)" 2026-05-10: - "Doku-Cleanup: /vorschau/ entfernt (alte Vorab-Produktseite, längst durch index.html mit Hero-Slider und Live-Demos ersetzt)" - "STRUCTURE: aktive vs. legacy CSS/JS getrennt, videos/, downloads/, insights/, accountforger-video.html, weitere Top-Level-Files ergänzt" - "Lagen-Layout: cyberangriffe und deepfakes binden Lagebild-CSS/JS aus iran-konflikt ein (zentrale Assets)" - "SERVICES: sync-lagebild und insights ergänzt"
Last-Updated: 2026-05-10
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">" - "Für 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: | # NIE direkt im Live-Verzeichnis arbeiten -> tmp-Klon nutzen git clone /tmp/website-work && cd /tmp/website-work git checkout develop # Änderung machen git add . && git commit -m ... git push origin develop 2_staging_aktualisieren_automatisch: | # Auto-Deploy pullt automatisch -> kein manueller git pull nötig # (Webhook -> /__deploy mit HMAC -> aegis-staging-deploy.service) 3_in_browser_pruefen: https://staging.aegis-sight.de 4_promote_zu_live: | # Auf deploy.aegis-sight.de "Promote -> Live" klicken # Erstellt PR develop->main, mergt ihn auto, triggert Live-Deploy via HMAC
───────────────────────────────────────────────────────────────────
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 nötig.
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 über Gitea-Webhook)" "POST /__deploy/live": "live (HMAC über 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 + Verwaltung + Tenders) Live- 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. Release-Notes-Vorschlag (Sonnet) editierbar oder leer lassen.
WORKFLOW_KOMPLETT: 1_entwickeln: | # NIE direkt im Live-Verzeichnis arbeiten! # Klon in /tmp/-work/ oder lokal nutzen git checkout develop # Änderung 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/