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 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.
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.
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>
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>
- /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>
Clientseitigen sessionStorage-Check durch Nginx auth_request ersetzt.
Video-Seite und MP4-Datei werden nur noch mit gültigem Cookie ausgeliefert.
Token-Validierung läuft über das Security Dashboard (FastAPI + bcrypt).
Zugangscode wird über Security Dashboard Einstellungen verwaltet.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Client-seitiger Kopierschutz (DevTools-Blocker, Rechtsklick-Sperre) war
seit 08.01.2026 per early return deaktiviert. Bietet keinen echten Schutz,
nur UX-Einschränkungen. Script-Tag aus index.html entfernt, Datei gelöscht.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two stray n characters before OSINT Monitor comments (lines 122, 291)
caused a JavaScript syntax error that broke the entire translations module,
resulting in the error banner on page load and non-functional DE/EN toggle.
- Neues Weltkugel-Icon (world-globe.svg) statt generischem globe.svg
- Titel zu AegisSight Monitor geändert (ohne OSINT)
- Emdashes durch normale Bindestriche ersetzt (DE + EN)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Neue Product Card mit Globe-Icon, Beschreibungstext und Link zum Iran-Liveticker
- DE/EN Übersetzungen ergänzt
- Card verlinkt direkt auf /lagebild/
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Lagebild-Dashboard mit Snapshot-Daten hinzugefuegt
- Impressum und Datenschutz (DE/EN) aktualisiert
- Uebersetzungen in translations.js erweitert
- Video-Dateien als LFS-Objekte aktualisiert
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove trust-indicators JavaScript animations from animations-enhanced.js
- Clean up translation keys for removed indicator elements
- Remove selector references from config.js
- Fix missing video reference (hero-tech-pattern.mp4)
- Remove massive unused CSS sections: timeline, digital-beat, neural network viz
- Reduce animations.css from 2669 to 272 lines (90% size reduction)
This removes code that was referencing non-existent HTML elements
and large unused visual effects from previous design iterations.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix impressum.html with correct HRB 110105 and Amtsgericht Düsseldorf
- Add English versions of legal pages (impressum-en.html, datenschutz-en.html)
- Correct company representatives to Hendrik Gebhardt & Monami Homma
- Remove incorrect Marlon Paulse references and Wiesenstraße address
- Remove trust-indicators section from website (HTML, CSS, JS)
- Add mobile.css and related mobile navigation files
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>