Alle plausiblen E-Mail-Adressen werden jetzt akzeptiert. Bei einer
Freemail-Adresse erscheint weiterhin der Hinweis, dass fuer einen
Testzugang ausschliesslich dienstliche Adressen von Behoerden oder
Unternehmen beruecksichtigt werden, aber die Anfrage wird nicht mehr
abgewiesen. Hinweis wird als tf-note-warn (Hinweis) statt tf-note-error
(Fehler) dargestellt, kein aria-invalid mehr. Texte de/en und
Modal-Subline entsprechend als Hinweis formuliert.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Formularfelder im Modal sauber ausgerichtet: Inputs einer Reihe per
align-items:end buendig, fragiler min-height-Label-Hack entfernt,
optional-Hinweise brechen nicht mehr unschoen um.
- Zulassungstext praezisiert: ausschliesslich dienstliche Adressen von
Behoerden oder Unternehmen (de + en, Modal-Subline + Meldung).
- Datenschutz-Fix: Formular wird beim Oeffnen des Modals zurueckgesetzt
(Felder, Erfolgsmeldung, Fehler), damit kein Nutzer die Eingaben eines
vorherigen sieht.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Alte Aussage "keine Daten an Drittlaender uebermittelt" war mit
Cloud-KI-Nutzung nicht haltbar. Neue Fassung nennt EU-Verarbeitung,
kein Training, AVV nach Art. 28 und die lokale Version als souveraene
Option. JSON-LD und sichtbares HTML konsistent aktualisiert.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Der Zusatz "optional" stand als eigene Zeile unter dem Feldnamen. Dadurch
wurde das Label dreizeilig und das Feld rutschte gegenueber dem Nachbarn
um bis zu 48 Pixel nach unten, die Reihen wirkten schief. Der Zusatz
steht jetzt in derselben Zeile, und die Labels einer Reihe haben eine
gemeinsame Mindesthoehe, damit die Felder unabhaengig von der Textlaenge
auf einer Linie beginnen. Auf dem Telefon steht jedes Feld ohnehin allein,
dort entfaellt die Mindesthoehe.
Behoerde oder Organisation und Funktion oder Dienststelle sind optional,
in beiden Sprachen mit Hinweis am Feld. Pflicht bleiben Name, dienstliche
E-Mail und die Einwilligung.
Dabei aufgefallen, das Formular traegt novalidate, damit die
Browsermeldungen die eigene Pruefung nicht ueberlagern. Die Pflichtfelder
wurden dadurch bisher gar nicht erzwungen, ein leerer Name waere
durchgegangen. Die Pruefung liegt jetzt im Skript, mit Meldung und Fokus
auf dem betroffenen Feld. Der Name steht ausserdem mit in der
Anfrage-Mail, da die Organisation leer bleiben kann.
Die drei Punkte im Problem-Abschnitt standen ab 1024 Pixel Fensterbreite
abwaerts in zwei Spalten, die dritte rutschte allein in die naechste
Zeile. Sie bleiben jetzt bis 768 Pixel dreispaltig, mit engerem Abstand.
Auf dem Telefon stehen sie weiter untereinander, dreispaltig waere dort
unlesbar.
Bei den Anwendungsfall-Karten brach nur eine Ueberschrift einzeilig um,
die beiden anderen zweizeilig. Dadurch hatte die erste Karte unten 58
Pixel Luft und die anderen 27. Die Ueberschrift hat jetzt zwei Zeilen
Mindesthoehe, alle Absaetze beginnen auf gleicher Hoehe. Auf dem Telefon
entfaellt die Mindesthoehe, dort steht jede Karte fuer sich.
Der eigene Abschnitt mit Ueberschrift und Einleitung entfaellt. Die drei
Anwendungsfaelle stehen jetzt als reine Infokarten unter der Karte im
Bereich Live-Lagebilder, ohne "Mehr erfahren" und ohne Verlinkung.
Die sechs Unterseiten unter /loesungen/ und /en/solutions/ sind
geloescht, ebenso der Menuepunkt Loesungen in beiden Sprachen und die
Eintraege in Sitemap und llms.txt.
Nebenbei behoben, die drei Lagen-Seiten verwiesen im Menue auf den
Anker /#products, den es auf der Startseite nie gab. Sie zeigen jetzt
auf /#demos, wo die Anwendungsfaelle stehen.
Die Seiten /testzugang/ und /en/trial-access/ sind geloescht. Alle
Einstiege oeffnen jetzt das Anfrage-Popup, also der Knopf oben rechts,
der Knopf im Kontakt-Abschnitt, die FAQ-Antwort zum Zugang und der
Footer-Link. Die Hinweiszeile auf die Unterseite ist aus dem Popup raus.
Der obere Knopf der sechs Loesungsseiten zeigt auf den Kontakt-Abschnitt
der jeweiligen Startseite. Sitemap, llms.txt und die FAQ-Daten fuer
Suchmaschinen enthalten keine Verweise mehr auf die geloeschten Adressen.
Tote Zweige in trial-form.js entfernt, da Thema, Startwunsch und
Nutzerzahl als Felder entfallen sind.
Der Knopf oben rechts und der Eintrag im mobilen Menue oeffnen das
Anfrage-Popup, statt auf die Seite zu wechseln. Das href auf
/testzugang/ bleibt als Rueckfallebene stehen, also fuer Oeffnen in
neuem Tab, fuer Suchmaschinen und falls JavaScript fehlt.
Im Kontakt-Abschnitt steht nur noch "Testzugang anfragen" und oeffnet
das Popup. Darin liegt jetzt das Testzugang-Formular ohne die Frage nach
dem Thema, also Name, Behoerde, Funktion, Telefon, dienstliche E-Mail und
Nutzerzahl. Die Freemail-Sperre und die Erkennung von Behoerdendomains
greifen dort genauso wie auf der Seite.
Wer zuerst eine Frage hat, findet unter dem Knopf einen direkten
Mail-Hinweis. Das alte submitContact in app.js entfaellt, beide Formulare
laufen ueber js/trial-form.js. Die gemeinsamen Formular-Styles liegen
jetzt in css/style.css statt doppelt in den Seiten.
Neue Seite /testzugang/ und Spiegel /en/trial-access/ mit Anfrageformular
fuer einen einwoechigen Testzugang. Pflicht ist eine dienstliche
E-Mail-Adresse, Freemail- und Wegwerf-Anbieter werden abgewiesen,
Behoerden- und Organisationsdomains werden erkannt und in der
Anfrage-Mail gekennzeichnet.
Spamschutz ohne Drittanbieter, also Honeypot-Feld und Zeitfalle statt
Captcha, damit kein externer Dienst eingebunden werden muss. Der Versand
laeuft ueber den bestehenden Endpunkt /api/contact, die Zusatzfelder
stehen strukturiert im Nachrichtentext.
Einstiege auf der Startseite DE+EN, also Knopf in der Navigation, zwei
Knoepfe im Kontakt-Abschnitt, Verlinkung der FAQ-Antwort zum Zugang und
ein Footer-Link. Der Hero-Knopf der sechs Loesungsseiten zeigt jetzt
ebenfalls auf die Testzugang-Seite. Sitemap und llms.txt ergaenzt.
Keine sichtbaren Seiteninhalte geaendert, nur maschinenlesbare Signale:
- Startseiten DE+EN: Title auf "OSINT-Monitoring Software aus Deutschland"
geschaerft; Organization-Schema um knowsAbout/keywords/areaServed und
SoftwareApplication um keywords erweitert (Entitaetssignale fuer KI-Suche)
- Rechtsseiten (Impressum/Datenschutz DE+EN): robots-Meta konsistent auf
noindex gesetzt (vorher nur googlebot, allgemein index) - passend zur
dokumentierten Absicht "von Suchmaschinen ausschliessen"
- llms.txt: 6 zitierfaehige Q&A inkl. Abgrenzung zu IT-Monitoring (PRTG/Nagios)
und 4 Glossar-Entitaeten (Social-Media-Monitoring, Krisenmonitoring, SOCMINT,
Situational Awareness)
- sitemap.xml: lastmod der Startseiten aktualisiert; noindex-Rechtsseiten
aus der Sitemap entfernt
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wurzel: cookie-consent.css enthielt aus einer Demo-Page geerbtes
"footer { margin-top: 4rem; background: ... }" mit nacktem
Element-Selector. Das schlug auf den echten Site-Footer durch und
erzeugte einen ~64px Margin oben am Footer, durch den der helle
Body-Background (#F5F7FA) sichtbar wurde. Unter dunklen Sections
fiel das nicht auf, unter der neuen FAQ-Section wurde es sichtbar.
- cookie-consent.css: nackter 'footer { ... }'-Block (margin-top, background, padding, text-align) entfernt. footer nav / nav a Reststyles belassen, da sie unseren echten Footer (kein <nav> drin) nicht treffen.
- index.html / en/index.html: defensives '.footer { margin-top: 0; }' im inline-style-Block ergaenzt fuer den Fall, dass die Demo-Regel zurueckkommt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Style-Block aus body in head verschoben (vermeidet Kaskaden-Quirks)
- .section-Klasse aus dem FAQ-section-Element entfernt (kein Konflikt mehr mit globalem .section { padding 88px 0 })
- Defensive Resets: margin:0, display:block auf .faq-section; explizite margin-resets auf h2, intro, details, faq-answer; details:last-of-type margin-bottom:0
- DSGVO-Antwort: 'Standort Langenfeld, NRW' raus, weil das den Eindruck erweckte, dort stuenden die Server (es ist nur der Firmensitz). Aussage bleibt: 'auf Servern in Deutschland'.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Quellen: 'weltweit' statt 'mehrsprachig in X'; Update-Takt aus FAQ rausgenommen (steht weiterhin im llms.txt-TLDR und in den Lagen-Schemas)
- Faktenpruefung: ohne Fachbegriffe IFCN/EUvsDisinfo, dafuer in Klartext (Uebereinstimmungen/Widersprueche, transparente Bewertung, verlinkte Originalquellen)
- DSGVO: Aussage zu personenbezogenen Profilen entfernt (war redundant)
- Zugang: Satz zur Preiskalkulation entfernt
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- index.html (DE+EN): FAQPage mit 7 Q&A, Service-Schema, founder-Person-Stubs mit @id-Referenzen, speakable-Selektoren, sichtbares FAQ-Akkordeon vor Footer, Nav-Eintrag Fragen/FAQ
- lagen/* (DE+EN): Article auf NewsArticle erweitert (deepfakes bleibt Article), plus temporalCoverage, keywords, about, speakable, @id-Refs auf Organization; Dataset-Schema neu mit DataDownload auf current.json
- llms.txt: Umbau auf antwortorientiertes Q&A-Format mit 7 Fragen plus Glossar (OSINT, Lagebild, Faktencheck, IFCN, EUvsDisinfo, Klassifikation)
- sitemap.xml: lastmod auf 2026-05-17
Ziel: bessere Auffindbarkeit und Zitierfaehigkeit in KI-Suche (ChatGPT, Perplexity, Claude, Gemini). 51 Prozent der B2B-Kaeufer recherchieren laut drweb.de-Artikel inzwischen primaer in KI-Chatbots.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Logo-Header: PNG (31.7 KB) -> SVG (6.3 KB) auf 12 Seiten, mit width/height fuer CLS
- loading=lazy auf 25 unter-Fold-Bilder (Feature-/Problem-/Trust-Icons + handshake)
Logo bleibt eager (above-the-fold)
- preconnect zu unpkg.com (CDN fuer Leaflet) im Head von 8 Seiten
Reduziert TLS-Handshake-Verzoegerung beim ersten Leaflet-Asset
Der Monitor uebersetzt im research-Lagebild-Markdown die
Section-Ueberschrift "## Zusammenfassung" zu "## SUMMARY".
extractZusammenfassung und stripZusammenfassung matchten bisher
nur das deutsche Wort, daher zeigte die EN-Variante der
Deepfakes-Recherche eine leere Zusammenfassung.
Beide Funktionen erkennen jetzt 'zusammenfassung' und 'summary'
case-insensitive.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Die Index-Hauptseite hat noch eine Reihe dynamisch gefuellter Texte
(Live-Stats-Bar-Titel, Map-Legende, Default-Kategorie-Labels) und
laedt summary.json fuer die Excerpts. Auf der EN-Variante hat das
bisher zu sichtbarem deutschen Text gefuehrt.
- SITE_LANG wird einmal aus <html lang> abgeleitet
- lageTitles existiert pro Sprache
- defaultLabels (primary/secondary/tertiary/mentioned) pro Sprache
- Legende -> Legend in der Map-Legende
- summary.json -> summary_en.json bei EN, mit Fallback auf summary.json
wenn EN-Variante nicht existiert (Monitor erzeugt beide bereits)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Die /lagen/*/data/-Verzeichnisse sind nicht versioniert (.gitignore),
werden aber im Staging-Container per bind-mount aus dem Live-Pfad
eingeblendet. Bei read_only:true im Container muss das Mountpoint-
Verzeichnis bereits existieren - daher .gitkeep als Platzhalter.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- lagebild.js: tote initLangToggle() und switchContent() entfernt;
initTranslations()-Aufruf aus init() raus (translations.js gibt es
nicht mehr). Kein neues Verhalten, nur Aufraeumen.
- CLAUDE.md aktualisiert: en/situations/-Struktur, Slug-Mapping,
Daten-Freigabe-Konzept, Kontaktformular i18n-Hinweis,
CHANGE_LOG erweitert.
Backend (contact-form.py) wurde live ausgerollt und ist nicht im
Repo (liegt unter /opt/v2-Docker/aegis-website/), Backup unter
contact-form.py.bak.<timestamp>.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Phase 3 - Englische Lagebild-Seiten:
- /en/situations/iran-conflict/, /en/situations/cyber-attacks/,
/en/situations/deepfakes/ erstellt (Mirror der DE-Lagen mit
englischer UI)
- lagebild.js: curLang() liest jetzt direkt <html lang>; neuer
dataBase()-Helper, damit EN-Seiten die JSON-Daten aus dem
DE-Pfad nachladen koennen (window.LAGEBILD_DATA_BASE pro Seite)
- 4 zuvor hardcodierte DE-Strings (emptyDevelopments, emptySummary,
Quelle-Tooltip, Schliessen-Aria) ueber t() und das vorhandene
lang.de/lang.en-Dictionary uebersetzt
- DE-Lagen-Seiten: hreflang-Tags wieder aktiv, Toggle zeigt nun
korrekt auf das EN-Pendant statt /en/
- en/index.html Karussell-Buttons zeigen auf EN-Lagen
- Sitemap mit hreflang-Alternativen fuer alle Lagen ergaenzt
Phase 4 - Kontaktformular zweisprachig (Frontend):
- js/app.js submitContact() liest <html lang>, sendet lang im POST
und zeigt Sende-/Fehler-Texte in der jeweiligen Sprache
- Backend (contact-form.py) wird separat ausgerollt, ist aber
abwaertskompatibel: bei fehlendem lang-Param defaultet es auf de
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- js/translations.js entfernt (war im aktuellen Site-Stand ungenutzt
und passte nicht mehr zur neuen Struktur)
- impressum-en.html und datenschutz-en.html entfernt (durch
/en/legal-notice.html und /en/privacy.html ersetzt)
- data-translate Attribute aus den drei Lagen-Seiten entfernt
- <script src="/js/translations.js"> aus den Lagen-Seiten entfernt
- CLAUDE.md auf neuen Stand gebracht (i18n-Ansatz dokumentiert,
CHANGE_LOG erweitert)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Neuer .lang-switcher Komponente in css/lang-switcher.css, Variante
fuer dunkle Lagebild-Seiten enthalten
- Sprachumschalter im Header und Mobile-Menue aller DE-Seiten
(index, impressum, datenschutz, lagen/*)
- Englische Seiten unter /en/index.html, /en/legal-notice.html und
/en/privacy.html mit kompletter Uebersetzung; rechtliche Texte mit
Hinweis "German version shall prevail"
- hreflang-Tags (de/en/x-default) auf Hauptseite und rechtlichen
Seiten; Lagen-Seiten ohne hreflang bis EN-Versionen existieren
- og:locale + og:locale:alternate gesetzt, Schema.org bleibt
- Sitemap mit xhtml:link Alternates fuer beide Sprachen ergaenzt
- DE-Lagen-Toggle zeigt vorerst auf /en/ (EN-Lagen folgen Phase 3)
- Cookie-Banner liest <html lang> bereits selbststaendig, daher
englisch auf EN-Seiten ohne weitere Aenderung
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Wechsel von altem Multi-File-CSS-Setup (main.css/fonts.css/mobile.css) auf
das neue /css/style.css der Hauptseite. Bebas-Neue-Headlines und
Glassmorphism-Karten ersetzt durch Inter + flaches Design mit Navy/Gold-Akzent.
- Header (Navbar + Mobile-Menu + Mobile-Overlay) und Footer aus index.html
uebernommen; Anker-Links zeigen auf die Hauptseite (/#features etc.).
- Inhalt 1:1 erhalten; Klassen normalisiert auf .legal-section/.legal-content.
- Inline-Styles am Quellverweis durch .source-note-Klasse ersetzt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Das clientseitige Login-Gate (#login-gate, SHA256-Cookie-Pruefung)
stammt aus der Vorschau-Phase. Nach Befoerderung der Vorschau zur
Live-Hauptseite ist es nicht mehr erforderlich; der gesamte Block
inkl. CSS, HTML und JS wurde entfernt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- /vorschau/ existiert nicht mehr; deren Inhalte sind jetzt unter /
- index.html, css/style.css, js/app.js und videos/ stammen aus dem ehemaligen
vorschau/-Verzeichnis und ersetzen die bisherige Hauptseite.
- Alte CSS/JS-Dateien (main.css, main.js etc.) bleiben erhalten - sie werden
weiterhin von /lagen/, /datenschutz, /impressum genutzt.
- Vorheriger Stand archiviert unter AegisSight/Webseite_alt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- demo-excerpt mit fester Hoehe (760px Desktop, 640px Mobile) und weicher
Fade-out-Maske; vereinheitlicht die Kartenhoehe ueber alle Lagen ohne
harte Abschneidung des Inhalts.
- heroGoTo() haelt die .ended-Klasse waehrend des Fade-outs aktiv und
raeumt sie erst nach 400ms auf. Verhindert das Aufblitzen des
pausierten Video-Frames beim Wechsel von der Endcard zur naechsten Slide.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Vier Tonstufen (--tone-1 bis --tone-4) fuer Problem, Workflow, Demos, Contact: Seite atmet beim Scrollen sanft von hell nach kuehler
- Contact in hellem Blau-Grau-Weiss (#ECF2F9) als frischer Akzent vor dem dunklen Trust
- Divider-Uebergaenge per Adjacent-Sibling an die neuen Tonstufen angepasst
- Trust und Contact in Page-Reihenfolge zurueckgetauscht: Contact vor Trust (Trust bleibt visueller Schluss-Anker), Navbar-Reihenfolge bleibt aber Funktionen-Live-Lagebilder-Ueber-uns-Kontakt
- Subpixel-Luecke unter dem Diagonal-Divider Contact->Trust mit margin-top:-1px geschlossen
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>