Commits vergleichen

...

14 Commits

Autor SHA1 Nachricht Datum
2e9b979ed7 Promote develop → main (2026-07-23 09:09 UTC) 2026-07-23 11:09:39 +02:00
claude-dev
0492b11cf4 Testzugang: Freemail nicht mehr blockieren, nur Hinweis anzeigen
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>
2026-07-23 10:51:51 +02:00
claude-dev
457f64ef0d Testzugang-Modal: Feld-Layout, Zulassungstext und State-Reset
- 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>
2026-07-23 10:48:39 +02:00
claude-dev
8934b1a920 FAQ: DSGVO-Antwort praezisiert (KI-Analyse EU-Rechenzentrum, AVV, lokale Version)
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>
2026-07-23 10:32:33 +02:00
AegisSight
acb12e28b4 Formularfelder stehen wieder auf einer Linie
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.
2026-07-22 23:06:09 +02:00
AegisSight
d5851d8d99 Behoerde und Funktion optional, Pflichtfelder greifen jetzt wirklich
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.
2026-07-22 23:01:23 +02:00
AegisSight
e04a659fe9 Problem-Punkte bleiben in einer Reihe, Anwendungsfall-Karten bundig
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.
2026-07-22 22:48:27 +02:00
AegisSight
835479b78c Loesungs-Abschnitt aufgeloest, Anwendungsfaelle wandern unter die Karte
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.
2026-07-22 22:42:54 +02:00
AegisSight
55b3b6b247 Unterseite Testzugang entfernt, alles laeuft ueber das Popup
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.
2026-07-22 22:28:26 +02:00
AegisSight
5dccc26d19 Testzugang-Knopf in der Navigation oeffnet jetzt das Popup
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.
2026-07-22 22:23:26 +02:00
AegisSight
1465104d8c Feld fuer die geplante Nutzerzahl entfernt, im Popup und auf beiden Testzugang-Seiten 2026-07-22 22:17:39 +02:00
AegisSight
434ec96e4e Kontakt-Popup wird zum Testzugang-Formular, nur noch ein Knopf
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.
2026-07-22 22:11:32 +02:00
AegisSight
893a3feb3d Testzugang: eigene Anfrageseite DE+EN und Einstiege auf der Startseite
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.
2026-07-22 21:42:55 +02:00
claude-dev
8bffb169e0 SEO: Drei Themen-Unterseiten (Loesungen) + Startseiten-Schaerfung
Sichtbarer Content fuer gewinnbare Keyword-Cluster, breites OSINT-Positioning:

- Neue Loesungsseiten (DE+EN, je eigenes Schema Service+Breadcrumb+FAQPage):
  - OSINT- & Lagebild-Software / OSINT & Situational Awareness Software
  - Desinformationsmonitoring & FIMI / Disinformation Monitoring & FIMI
  - Social-Media- & Krisenmonitoring fuer Behoerden / ... for Government
- Startseite DE+EN: Hero-Tagline um "OSINT-Software" geschaerft,
  Navigationspunkt Loesungen/Solutions + sichtbare Loesungs-Sektion mit
  interner Verlinkung zu den Unterseiten
- sitemap.xml: 6 neue URLs mit hreflang-Paaren
- llms.txt: Loesungen-Sektion ergaenzt
- Content faktenbasiert aus bestehendem Material, keine erfundenen Features

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 22:50:19 +02:00
9 geänderte Dateien mit 460 neuen und 89 gelöschten Zeilen

Datei anzeigen

@@ -48,6 +48,14 @@ a { color:inherit; text-decoration:none; }
.nav-extras { display:flex; align-items:center; gap:18px; } .nav-extras { display:flex; align-items:center; gap:18px; }
/* Testzugang-Knopf in der Navigation */
.nav-cta { display:inline-block; background:var(--gold); color:var(--navy); font-size:0.88rem; font-weight:600; padding:9px 18px; border-radius:var(--radius); white-space:nowrap; transition:background 0.2s; }
.nav-cta:hover { background:var(--gold-dark); color:var(--navy); }
.mobile-menu .nav-cta { display:block; text-align:center; margin:10px 0 4px; padding:13px 18px; font-size:1rem; }
/* Zwei Knoepfe nebeneinander im Kontakt-Abschnitt */
.cta-buttons { display:flex; flex-wrap:wrap; gap:14px; justify-content:center; }
.mobile-menu-toggle { display:none; background:none; border:none; cursor:pointer; width:32px; height:24px; position:relative; flex-direction:column; justify-content:space-between; } .mobile-menu-toggle { display:none; background:none; border:none; cursor:pointer; width:32px; height:24px; position:relative; flex-direction:column; justify-content:space-between; }
.mobile-menu-toggle span { display:block; width:100%; height:2px; background:var(--navy); border-radius:2px; transition:transform 0.3s,opacity 0.3s; } .mobile-menu-toggle span { display:block; width:100%; height:2px; background:var(--navy); border-radius:2px; transition:transform 0.3s,opacity 0.3s; }
.mobile-menu-toggle.active span:nth-child(1) { transform:rotate(45deg) translate(7px,7px); } .mobile-menu-toggle.active span:nth-child(1) { transform:rotate(45deg) translate(7px,7px); }
@@ -286,12 +294,47 @@ a { color:inherit; text-decoration:none; }
.modal-close:hover { color:var(--navy); } .modal-close:hover { color:var(--navy); }
.modal-content h2 { font-size:1.5rem; font-weight:700; color:var(--navy); margin-bottom:8px; } .modal-content h2 { font-size:1.5rem; font-weight:700; color:var(--navy); margin-bottom:8px; }
.modal-sub { font-size:0.95rem; color:var(--text-light); margin-bottom:28px; } .modal-sub { font-size:0.95rem; color:var(--text-light); margin-bottom:28px; }
.form-row { display:grid; grid-template-columns:1fr 1fr; gap:16px; } .form-row { display:grid; grid-template-columns:1fr 1fr; gap:16px; align-items:end; }
.form-group { margin-bottom:16px; } .form-group { margin-bottom:16px; }
.form-group label { display:block; font-size:0.82rem; font-weight:600; color:var(--navy); margin-bottom:6px; text-transform:uppercase; letter-spacing:0.04em; } .form-group label { display:block; font-size:0.82rem; font-weight:600; color:var(--navy); margin-bottom:6px; text-transform:uppercase; letter-spacing:0.04em; }
.form-group input, .form-group textarea { width:100%; padding:10px 14px; border:1px solid var(--gray-200); border-radius:var(--radius); font-family:inherit; font-size:0.95rem; color:var(--text); background:var(--base); transition:border-color 0.2s; } .form-group input, .form-group textarea { width:100%; padding:10px 14px; border:1px solid var(--gray-200); border-radius:var(--radius); font-family:inherit; font-size:0.95rem; color:var(--text); background:var(--base); transition:border-color 0.2s; }
.form-group input:focus, .form-group textarea:focus { outline:none; border-color:var(--gold); } .form-group input:focus, .form-group textarea:focus { outline:none; border-color:var(--gold); }
.form-group textarea { resize:vertical; } .form-group textarea { resize:vertical; }
/* Anwendungsfaelle unter der Karte im Bereich Live-Lagebilder */
.einsatz-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:20px; margin-top:40px; }
.einsatz-card { background:var(--white); border:1px solid var(--gray-100); border-radius:var(--radius-lg); padding:26px 28px; box-shadow:var(--shadow); }
/* Zwei Zeilen Mindesthoehe, damit die Absaetze aller drei Karten auf
gleicher Hoehe beginnen und unten gleich viel Luft bleibt. */
.einsatz-card h3 { color:var(--navy); font-size:1.2rem; line-height:1.35; margin:0 0 10px; min-height:2.7em; }
.einsatz-card p { color:var(--text-light); font-size:0.97rem; line-height:1.6; margin:0; }
@media(max-width:768px) { .einsatz-grid { gap:16px; margin-top:28px; } .einsatz-card { padding:20px 22px; } .einsatz-card h3 { min-height:0; } }
/* Testzugang-Formular im Anfrage-Popup der Startseite */
.form-group select { width:100%; padding:10px 14px; border:1px solid var(--gray-200); border-radius:var(--radius); font-family:inherit; font-size:0.95rem; color:var(--text); background-color:var(--base); transition:border-color 0.2s; appearance:none; -webkit-appearance:none; background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235A6478' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right 12px center; background-size:18px; padding-right:38px; }
.form-group select:focus { outline:none; border-color:var(--gold); }
.form-group input[aria-invalid="true"] { border-color:#C0392B; }
.tf-note { display:block; font-size:0.85rem; margin-top:6px; line-height:1.5; }
.tf-note-error { color:#C0392B; }
.tf-note-ok { color:#1E7A44; }
.tf-note-warn { color:#8A6D1B; }
.tf-hint { font-size:0.82rem; color:var(--text-light); margin-left:5px; font-weight:400; text-transform:none; letter-spacing:0; white-space:nowrap; }
/* Kompakte Zeilenhoehe fuer mehrzeilige Labels; Felder einer Reihe per align-items:end buendig */
#trial-form .form-row label { line-height:1.35; }
.tf-consent { display:flex; align-items:flex-start; gap:12px; margin:6px 0 22px; }
.tf-consent input { width:18px; height:18px; margin-top:2px; flex:0 0 auto; accent-color:var(--gold-dark); }
.tf-consent label { font-size:0.9rem; color:var(--text-light); line-height:1.6; font-weight:400; text-transform:none; letter-spacing:0; margin:0; }
.tf-consent a { color:var(--gold-dark); font-weight:600; text-decoration:underline; }
.tf-error { display:none; background:#FDECEA; border:1px solid #E7B3AC; color:#A5281B; border-radius:var(--radius); padding:13px 16px; font-size:0.92rem; line-height:1.6; margin-bottom:18px; }
.tf-success { display:none; text-align:center; padding:20px 0 6px; }
.tf-success h3 { color:var(--navy); font-size:1.3rem; margin:0 0 12px; }
.tf-success p { color:var(--text); line-height:1.75; margin:0 0 10px; }
.tf-success a { color:var(--gold-dark); text-decoration:underline; }
.tf-hp { position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden; }
.tf-privacy { font-size:0.86rem; color:var(--text-light); line-height:1.7; margin-top:22px; }
.tf-privacy a { color:var(--gold-dark); text-decoration:underline; }
.contact-alt { font-size:0.92rem; color:var(--text-light); margin-top:18px; }
.contact-alt a { color:var(--gold-dark); font-weight:600; text-decoration:underline; }
.form-success { text-align:center; padding:40px 0; } .form-success { text-align:center; padding:40px 0; }
.form-success p { font-size:1.05rem; color:var(--navy); font-weight:500; } .form-success p { font-size:1.05rem; color:var(--navy); font-weight:500; }
@media(max-width:768px) { .form-row { grid-template-columns:1fr; } .modal-content { padding:28px 20px; } } @media(max-width:768px) { .form-row { grid-template-columns:1fr; } .modal-content { padding:28px 20px; } }
@@ -308,6 +351,9 @@ a { color:inherit; text-decoration:none; }
@media(max-width:1024px) { @media(max-width:1024px) {
.grid-3 { grid-template-columns:repeat(2,1fr); } .grid-3 { grid-template-columns:repeat(2,1fr); }
.grid-4 { grid-template-columns:repeat(2,1fr); } .grid-4 { grid-template-columns:repeat(2,1fr); }
/* Die drei Punkte im Problem-Abschnitt bleiben in einer Reihe */
#problem .grid-3 { grid-template-columns:repeat(3,1fr); gap:16px; }
#problem .problem-card { padding:28px 10px; }
.hero-title { font-size:2.5rem; } .hero-title { font-size:2.5rem; }
.section { padding:64px 0; } .section { padding:64px 0; }
.workflow-connector { width:40px; } .workflow-connector { width:40px; }
@@ -315,8 +361,14 @@ a { color:inherit; text-decoration:none; }
@media(max-width:768px) { @media(max-width:768px) {
.nav-menu { display:none; } .nav-menu { display:none; }
.nav-extras > .nav-cta { display:none; }
.mobile-menu-toggle { display:flex; } .mobile-menu-toggle { display:flex; }
.cta-buttons { flex-direction:column; }
.cta-buttons .btn { width:100%; }
.grid-3,.grid-4 { grid-template-columns:1fr; gap:20px; } .grid-3,.grid-4 { grid-template-columns:1fr; gap:20px; }
/* Auf dem Telefon untereinander, drei Spalten waeren dort unlesbar */
#problem .grid-3 { grid-template-columns:1fr; gap:20px; }
#problem .problem-card { padding:32px 20px; }
.hero { min-height:75vh; } .hero { min-height:75vh; }
.hero-brand { padding:0 20px; } .hero-brand { padding:0 20px; }
.hero-title { font-size:1.9rem; } .hero-title { font-size:1.9rem; }

Datei anzeigen

@@ -265,7 +265,7 @@
"name": "How do I get access to the AegisSight Monitor?", "name": "How do I get access to the AegisSight Monitor?",
"acceptedAnswer": { "acceptedAnswer": {
"@type": "Answer", "@type": "Answer",
"text": "Access is granted on individual request; pilot access is available for qualified organisations. Contact: info@aegis-sight.de." "text": "Through a free trial access, requested via the form on aegis-sight.de. The trial runs for one week, includes your own topic with the full feature set and ends automatically. A work email address is required."
} }
} }
] ]
@@ -288,6 +288,7 @@
<li><a href="#contact">Contact</a></li> <li><a href="#contact">Contact</a></li>
</ul> </ul>
<div class="nav-extras"> <div class="nav-extras">
<a class="nav-cta" href="#contact" onclick="openContactModal(); return false;">Trial access</a>
<div class="lang-switcher" role="group" aria-label="Language"> <div class="lang-switcher" role="group" aria-label="Language">
<a class="lang-link" href="/" lang="de" hreflang="de" rel="alternate">DE</a> <a class="lang-link" href="/" lang="de" hreflang="de" rel="alternate">DE</a>
<span class="lang-sep" aria-hidden="true">|</span> <span class="lang-sep" aria-hidden="true">|</span>
@@ -309,6 +310,7 @@
<li><a href="#faq">FAQ</a></li> <li><a href="#faq">FAQ</a></li>
<li><a href="#contact">Contact</a></li> <li><a href="#contact">Contact</a></li>
</ul> </ul>
<a class="nav-cta" href="#contact" onclick="openContactModal(); return false;">Request trial access</a>
<div class="lang-switcher" role="group" aria-label="Language"> <div class="lang-switcher" role="group" aria-label="Language">
<a class="lang-link" href="/" lang="de" hreflang="de" rel="alternate">DE</a> <a class="lang-link" href="/" lang="de" hreflang="de" rel="alternate">DE</a>
<span class="lang-sep" aria-hidden="true">|</span> <span class="lang-sep" aria-hidden="true">|</span>
@@ -323,7 +325,7 @@
<div class="hero-content"> <div class="hero-content">
<div class="hero-brand"> <div class="hero-brand">
<h1 class="hero-title">AegisSight Monitor</h1> <h1 class="hero-title">AegisSight Monitor</h1>
<p class="hero-tagline">AI-powered real-time situation reports from open sources, <span class="gold">fully automated.</span></p> <p class="hero-tagline">The OSINT software for AI-powered real-time situation reports from open sources, <span class="gold">fully automated.</span></p>
</div> </div>
<div class="hero-slider" role="region" aria-label="Product highlights" aria-live="polite"> <div class="hero-slider" role="region" aria-label="Product highlights" aria-live="polite">
@@ -601,6 +603,22 @@
<div id="map-container"></div> <div id="map-container"></div>
<div class="map-empty" id="map-empty" style="display:none">Map data follows</div> <div class="map-empty" id="map-empty" style="display:none">Map data follows</div>
</div> </div>
<!-- Use cases -->
<div class="einsatz-grid">
<div class="einsatz-card">
<h3>OSINT &amp; Situational Awareness Software</h3>
<p>Automatically evaluate hundreds of open sources and turn them into structured real-time situation reports.</p>
</div>
<div class="einsatz-card">
<h3>Disinformation Monitoring &amp; FIMI</h3>
<p>Detect manipulation and foreign interference early, with fact-checking and source assessment.</p>
</div>
<div class="einsatz-card">
<h3>Social Media &amp; Crisis Monitoring</h3>
<p>Provide crisis teams with an automatically updated situation report from social media and open sources.</p>
</div>
</div>
</div> </div>
</section> </section>
@@ -611,8 +629,11 @@
<section class="section section-base" id="contact"> <section class="section section-base" id="contact">
<div class="container cta-container"> <div class="container cta-container">
<h2 class="section-title">Interested in AegisSight Monitor?</h2> <h2 class="section-title">Interested in AegisSight Monitor?</h2>
<p class="cta-text">Talk to us about your use case.</p> <p class="cta-text">Test the Monitor for one week with your own topic, free of charge and without obligation.</p>
<button class="btn btn-primary btn-lg" onclick="openContactModal()">Get in touch</button> <div class="cta-buttons">
<button class="btn btn-primary btn-lg" onclick="openContactModal()">Request trial access</button>
</div>
<p class="contact-alt">Have a question first. Write to us at <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p>
</div> </div>
</section> </section>
@@ -696,7 +717,7 @@
<details class="faq-item"> <details class="faq-item">
<summary>How do I get access to the AegisSight Monitor?</summary> <summary>How do I get access to the AegisSight Monitor?</summary>
<p class="faq-answer">Access is granted on individual request; pilot access is available for qualified organisations. Contact: <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p> <p class="faq-answer">Through a free trial access. It runs for one week, includes your own topic with the full feature set and ends automatically. A work email address is required. <a href="#contact" onclick="openContactModal(); return false;">Request trial access</a>.</p>
</details> </details>
</div> </div>
</section> </section>
@@ -710,6 +731,7 @@
<p>Gladbacher Straße 3-5, 40764 Langenfeld, Germany</p> <p>Gladbacher Straße 3-5, 40764 Langenfeld, Germany</p>
</div> </div>
<div class="footer-links"> <div class="footer-links">
<a href="#contact" onclick="openContactModal(); return false;">Trial access</a>
<a href="/en/legal-notice.html">Legal notice</a> <a href="/en/legal-notice.html">Legal notice</a>
<a href="/en/privacy.html">Privacy policy</a> <a href="/en/privacy.html">Privacy policy</a>
<a href="#" id="cookie-settings-link">Cookie settings</a> <a href="#" id="cookie-settings-link">Cookie settings</a>
@@ -725,31 +747,54 @@
<div class="modal-overlay" id="contact-modal" style="display:none"> <div class="modal-overlay" id="contact-modal" style="display:none">
<div class="modal-content"> <div class="modal-content">
<button class="modal-close" onclick="closeContactModal()" aria-label="Close">&times;</button> <button class="modal-close" onclick="closeContactModal()" aria-label="Close">&times;</button>
<h2>Get in touch</h2> <h2>Request trial access</h2>
<p class="modal-sub">Talk to us about your use case.</p> <p class="modal-sub">Test the Monitor for one week with the full feature set, free of charge and without obligation. For trial access we only consider official email addresses from public authorities or companies.</p>
<form id="contact-form" onsubmit="return submitContact(event)">
<div class="tf-error" id="tf-error" role="alert"></div>
<form id="trial-form" novalidate>
<div class="form-row"> <div class="form-row">
<div class="form-group"> <div class="form-group">
<label for="cf-name">Name</label> <label for="tf-name">Name</label>
<input type="text" id="cf-name" name="name" required> <input type="text" id="tf-name" name="name" autocomplete="name" required>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="cf-org">Organisation</label> <label for="tf-org">Authority or organisation <span class="tf-hint">optional</span></label>
<input type="text" id="cf-org" name="organisation"> <input type="text" id="tf-org" name="organisation" autocomplete="organization">
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="tf-role">Role or department <span class="tf-hint">optional</span></label>
<input type="text" id="tf-role" name="role" autocomplete="organization-title">
</div>
<div class="form-group">
<label for="tf-phone">Phone <span class="tf-hint">optional</span></label>
<input type="tel" id="tf-phone" name="phone" autocomplete="tel">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="cf-email">Email</label> <label for="tf-email">Work email address</label>
<input type="email" id="cf-email" name="email" required> <input type="email" id="tf-email" name="email" autocomplete="email" required aria-describedby="tf-email-note">
<span class="tf-note" id="tf-email-note"></span>
</div> </div>
<div class="form-group"> <div class="tf-hp" aria-hidden="true">
<label for="cf-message">Message</label> <label for="tf-website">Website</label>
<textarea id="cf-message" name="message" rows="4" required></textarea> <input type="text" id="tf-website" name="website" tabindex="-1" autocomplete="off">
</div> </div>
<button type="submit" class="btn btn-primary btn-block">Send message</button>
<div class="tf-consent">
<input type="checkbox" id="tf-consent" name="consent" required>
<label for="tf-consent">I agree that my details may be stored and processed in order to handle this request. Further information is available in the <a href="/en/privacy.html">privacy policy</a>.</label>
</div>
<button type="submit" class="btn btn-primary btn-block">Request trial access</button>
</form> </form>
<div class="form-success" id="form-success" style="display:none">
<p>Thank you for your message. We will get back to you shortly.</p> <div class="tf-success" id="tf-success">
<h3>Thank you for your request</h3>
<p>We have received your details and will normally get back to you within two working days.</p>
<p>If you have any questions in the meantime, you can reach us at <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p>
</div> </div>
</div> </div>
</div> </div>
@@ -757,6 +802,7 @@
<script src="/assets/vendor/leaflet/leaflet.js"></script> <script src="/assets/vendor/leaflet/leaflet.js"></script>
<script src="/assets/vendor/leaflet/leaflet.markercluster.js"></script> <script src="/assets/vendor/leaflet/leaflet.markercluster.js"></script>
<script src="/js/app.js"></script> <script src="/js/app.js"></script>
<script src="/js/trial-form.js"></script>
<script src="/cookie-consent.js"></script> <script src="/cookie-consent.js"></script>
</body> </body>
</html> </html>

Datei anzeigen

@@ -249,7 +249,7 @@
"name": "Ist AegisSight DSGVO-konform?", "name": "Ist AegisSight DSGVO-konform?",
"acceptedAnswer": { "acceptedAnswer": {
"@type": "Answer", "@type": "Answer",
"text": "AegisSight wird vollständig auf Servern in Deutschland betrieben und verarbeitet ausschließlich öffentlich zugängliche Quellen. Es werden keine Daten an Drittländer übermittelt." "text": "AegisSight wird auf Servern in Deutschland betrieben und verarbeitet ausschließlich öffentlich zugängliche Quellen. Für die KI-gestützte Analyse setzen wir ein Sprachmodell ein, das in einem Rechenzentrum in der EU (Frankfurt) läuft. Ihre Inhalte werden dabei nicht zum Training der Modelle verwendet, und es besteht ein Auftragsverarbeitungsvertrag nach Art. 28 DSGVO. Für Behörden und besonders sensible Einsätze bieten wir zusätzlich eine lokale Version an, die vollständig in Ihrer eigenen Infrastruktur läuft, ohne jede externe Datenübermittlung."
} }
}, },
{ {
@@ -265,7 +265,7 @@
"name": "Wie bekomme ich Zugang zum AegisSight Monitor?", "name": "Wie bekomme ich Zugang zum AegisSight Monitor?",
"acceptedAnswer": { "acceptedAnswer": {
"@type": "Answer", "@type": "Answer",
"text": "Zugang erfolgt nach individueller Anfrage; Pilotzugänge für qualifizierte Organisationen sind möglich. Kontakt: info@aegis-sight.de." "text": "Über einen kostenfreien Testzugang, anzufragen über das Formular auf aegis-sight.de. Der Testzugang läuft eine Woche, umfasst ein eigenes Thema mit vollem Funktionsumfang und endet automatisch. Voraussetzung ist eine dienstliche E-Mail-Adresse."
} }
} }
] ]
@@ -288,6 +288,7 @@
<li><a href="#contact">Kontakt</a></li> <li><a href="#contact">Kontakt</a></li>
</ul> </ul>
<div class="nav-extras"> <div class="nav-extras">
<a class="nav-cta" href="#contact" onclick="openContactModal(); return false;">Testzugang</a>
<div class="lang-switcher" role="group" aria-label="Sprache"> <div class="lang-switcher" role="group" aria-label="Sprache">
<span class="lang-active" lang="de" aria-current="true">DE</span> <span class="lang-active" lang="de" aria-current="true">DE</span>
<span class="lang-sep" aria-hidden="true">|</span> <span class="lang-sep" aria-hidden="true">|</span>
@@ -309,6 +310,7 @@
<li><a href="#faq">Fragen</a></li> <li><a href="#faq">Fragen</a></li>
<li><a href="#contact">Kontakt</a></li> <li><a href="#contact">Kontakt</a></li>
</ul> </ul>
<a class="nav-cta" href="#contact" onclick="openContactModal(); return false;">Testzugang anfragen</a>
<div class="lang-switcher" role="group" aria-label="Sprache"> <div class="lang-switcher" role="group" aria-label="Sprache">
<span class="lang-active" lang="de" aria-current="true">DE</span> <span class="lang-active" lang="de" aria-current="true">DE</span>
<span class="lang-sep" aria-hidden="true">|</span> <span class="lang-sep" aria-hidden="true">|</span>
@@ -323,7 +325,7 @@
<div class="hero-content"> <div class="hero-content">
<div class="hero-brand"> <div class="hero-brand">
<h1 class="hero-title">AegisSight Monitor</h1> <h1 class="hero-title">AegisSight Monitor</h1>
<p class="hero-tagline">KI-gestützte Echtzeit-Lagebilder aus offenen Quellen, <span class="gold">vollautomatisch.</span></p> <p class="hero-tagline">Die OSINT-Software für KI-gestützte Echtzeit-Lagebilder aus offenen Quellen, <span class="gold">vollautomatisch.</span></p>
</div> </div>
<div class="hero-slider" role="region" aria-label="Produktvorteile" aria-live="polite"> <div class="hero-slider" role="region" aria-label="Produktvorteile" aria-live="polite">
@@ -601,6 +603,22 @@
<div id="map-container"></div> <div id="map-container"></div>
<div class="map-empty" id="map-empty" style="display:none">Kartendaten folgen</div> <div class="map-empty" id="map-empty" style="display:none">Kartendaten folgen</div>
</div> </div>
<!-- Anwendungsfälle -->
<div class="einsatz-grid">
<div class="einsatz-card">
<h3>OSINT- &amp; Lagebild-Software</h3>
<p>Hunderte offene Quellen automatisiert auswerten und daraus strukturierte Echtzeit-Lagebilder erstellen.</p>
</div>
<div class="einsatz-card">
<h3>Desinformationsmonitoring &amp; FIMI</h3>
<p>Manipulation und ausländische Einflussnahme früh erkennen, mit Faktenprüfung und Quellenbewertung.</p>
</div>
<div class="einsatz-card">
<h3>Social-Media- &amp; Krisenmonitoring</h3>
<p>Krisenstäbe mit einem automatisch aktualisierten Lagebild aus Social Media und offenen Quellen versorgen.</p>
</div>
</div>
</div> </div>
</section> </section>
@@ -611,8 +629,11 @@
<section class="section section-base" id="contact"> <section class="section section-base" id="contact">
<div class="container cta-container"> <div class="container cta-container">
<h2 class="section-title">Interesse am AegisSight Monitor?</h2> <h2 class="section-title">Interesse am AegisSight Monitor?</h2>
<p class="cta-text">Sprechen Sie mit uns über Ihren Anwendungsfall.</p> <p class="cta-text">Testen Sie den Monitor eine Woche lang mit Ihrem eigenen Thema, kostenfrei und ohne Verpflichtung.</p>
<button class="btn btn-primary btn-lg" onclick="openContactModal()">Kontakt aufnehmen</button> <div class="cta-buttons">
<button class="btn btn-primary btn-lg" onclick="openContactModal()">Testzugang anfragen</button>
</div>
<p class="contact-alt">Sie haben zuerst eine Frage. Schreiben Sie uns an <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p>
</div> </div>
</section> </section>
@@ -686,7 +707,8 @@
<details class="faq-item"> <details class="faq-item">
<summary>Ist AegisSight DSGVO-konform?</summary> <summary>Ist AegisSight DSGVO-konform?</summary>
<p class="faq-answer">AegisSight wird vollständig auf Servern in Deutschland betrieben und verarbeitet ausschließlich öffentlich zugängliche Quellen. Es werden keine Daten an Drittländer übermittelt.</p> <p class="faq-answer">AegisSight wird auf Servern in Deutschland betrieben und verarbeitet ausschließlich öffentlich zugängliche Quellen. Für die KI-gestützte Analyse setzen wir ein Sprachmodell ein, das in einem Rechenzentrum in der EU (Frankfurt) läuft. Ihre Inhalte werden dabei nicht zum Training der Modelle verwendet, und es besteht ein Auftragsverarbeitungsvertrag nach Art. 28 DSGVO.</p>
<p class="faq-answer">Für Behörden und besonders sensible Einsätze bieten wir zusätzlich eine lokale Version an, die vollständig in Ihrer eigenen Infrastruktur läuft, ohne jede externe Datenübermittlung.</p>
</details> </details>
<details class="faq-item"> <details class="faq-item">
@@ -696,7 +718,7 @@
<details class="faq-item"> <details class="faq-item">
<summary>Wie bekomme ich Zugang zum AegisSight Monitor?</summary> <summary>Wie bekomme ich Zugang zum AegisSight Monitor?</summary>
<p class="faq-answer">Zugang erfolgt nach individueller Anfrage; Pilotzugänge für qualifizierte Organisationen sind möglich. Kontakt: <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p> <p class="faq-answer">Über einen kostenfreien Testzugang. Er läuft eine Woche, umfasst ein eigenes Thema mit vollem Funktionsumfang und endet automatisch. Voraussetzung ist eine dienstliche E-Mail-Adresse. <a href="#contact" onclick="openContactModal(); return false;">Testzugang anfragen</a>.</p>
</details> </details>
</div> </div>
</section> </section>
@@ -710,6 +732,7 @@
<p>Gladbacher Straße 3-5, 40764 Langenfeld</p> <p>Gladbacher Straße 3-5, 40764 Langenfeld</p>
</div> </div>
<div class="footer-links"> <div class="footer-links">
<a href="#contact" onclick="openContactModal(); return false;">Testzugang</a>
<a href="/impressum.html">Impressum</a> <a href="/impressum.html">Impressum</a>
<a href="/datenschutz.html">Datenschutz</a> <a href="/datenschutz.html">Datenschutz</a>
<a href="#" id="cookie-settings-link">Cookie-Einstellungen</a> <a href="#" id="cookie-settings-link">Cookie-Einstellungen</a>
@@ -725,31 +748,54 @@
<div class="modal-overlay" id="contact-modal" style="display:none"> <div class="modal-overlay" id="contact-modal" style="display:none">
<div class="modal-content"> <div class="modal-content">
<button class="modal-close" onclick="closeContactModal()">&times;</button> <button class="modal-close" onclick="closeContactModal()">&times;</button>
<h2>Kontakt aufnehmen</h2> <h2>Testzugang anfragen</h2>
<p class="modal-sub">Sprechen Sie mit uns über Ihren Anwendungsfall.</p> <p class="modal-sub">Eine Woche lang mit vollem Funktionsumfang testen, kostenfrei und ohne Verpflichtung. Für einen Testzugang berücksichtigen wir ausschließlich dienstliche E-Mail-Adressen von Behörden oder Unternehmen.</p>
<form id="contact-form" onsubmit="return submitContact(event)">
<div class="tf-error" id="tf-error" role="alert"></div>
<form id="trial-form" novalidate>
<div class="form-row"> <div class="form-row">
<div class="form-group"> <div class="form-group">
<label for="cf-name">Name</label> <label for="tf-name">Name</label>
<input type="text" id="cf-name" name="name" required> <input type="text" id="tf-name" name="name" autocomplete="name" required>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="cf-org">Organisation</label> <label for="tf-org">Behörde oder Organisation <span class="tf-hint">optional</span></label>
<input type="text" id="cf-org" name="organisation"> <input type="text" id="tf-org" name="organisation" autocomplete="organization">
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="tf-role">Funktion oder Dienststelle <span class="tf-hint">optional</span></label>
<input type="text" id="tf-role" name="role" autocomplete="organization-title">
</div>
<div class="form-group">
<label for="tf-phone">Telefon <span class="tf-hint">optional</span></label>
<input type="tel" id="tf-phone" name="phone" autocomplete="tel">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="cf-email">E-Mail</label> <label for="tf-email">Dienstliche E-Mail-Adresse</label>
<input type="email" id="cf-email" name="email" required> <input type="email" id="tf-email" name="email" autocomplete="email" required aria-describedby="tf-email-note">
<span class="tf-note" id="tf-email-note"></span>
</div> </div>
<div class="form-group"> <div class="tf-hp" aria-hidden="true">
<label for="cf-message">Nachricht</label> <label for="tf-website">Website</label>
<textarea id="cf-message" name="message" rows="4" required></textarea> <input type="text" id="tf-website" name="website" tabindex="-1" autocomplete="off">
</div> </div>
<button type="submit" class="btn btn-primary btn-block">Nachricht senden</button>
<div class="tf-consent">
<input type="checkbox" id="tf-consent" name="consent" required>
<label for="tf-consent">Ich bin damit einverstanden, dass meine Angaben zur Bearbeitung dieser Anfrage gespeichert und verarbeitet werden. Weitere Hinweise finden sich in der <a href="/datenschutz.html">Datenschutzerklärung</a>.</label>
</div>
<button type="submit" class="btn btn-primary btn-block">Testzugang anfragen</button>
</form> </form>
<div class="form-success" id="form-success" style="display:none">
<p>Vielen Dank für Ihre Nachricht. Wir melden uns zeitnah bei Ihnen.</p> <div class="tf-success" id="tf-success">
<h3>Vielen Dank für Ihre Anfrage</h3>
<p>Wir haben Ihre Angaben erhalten und melden uns in der Regel innerhalb von zwei Werktagen bei Ihnen.</p>
<p>Sollten Sie in der Zwischenzeit Fragen haben, erreichen Sie uns unter <a href="mailto:info@aegis-sight.de">info@aegis-sight.de</a>.</p>
</div> </div>
</div> </div>
</div> </div>
@@ -757,6 +803,7 @@
<script src="/assets/vendor/leaflet/leaflet.js"></script> <script src="/assets/vendor/leaflet/leaflet.js"></script>
<script src="/assets/vendor/leaflet/leaflet.markercluster.js"></script> <script src="/assets/vendor/leaflet/leaflet.markercluster.js"></script>
<script src="js/app.js"></script> <script src="js/app.js"></script>
<script src="/js/trial-form.js"></script>
<script src="/cookie-consent.js"></script> <script src="/cookie-consent.js"></script>
</body> </body>
</html> </html>

Datei anzeigen

@@ -621,6 +621,7 @@ function mdToHtml(md) {
/* ==================== CONTACT MODAL ==================== */ /* ==================== CONTACT MODAL ==================== */
window.openContactModal = function () { window.openContactModal = function () {
if (typeof window.resetTrialForm === 'function') window.resetTrialForm();
document.getElementById('contact-modal').style.display = 'flex'; document.getElementById('contact-modal').style.display = 'flex';
document.body.style.overflow = 'hidden'; document.body.style.overflow = 'hidden';
if (window.umami) umami.track('contact_modal_open'); if (window.umami) umami.track('contact_modal_open');
@@ -646,44 +647,8 @@ function mdToHtml(md) {
} }
}); });
// Form submit -> server-side SMTP /* Der Versand des Modal-Formulars liegt seit dem Umbau auf Testzugang
window.submitContact = function (e) { in js/trial-form.js. */
e.preventDefault();
var lang = (document.documentElement.lang || 'de').toLowerCase().indexOf('en') === 0 ? 'en' : 'de';
var T = lang === 'en'
? { sending: 'Sending...', send: 'Send message', sendError: 'Error sending message', netError: 'Connection error. Please try again.' }
: { sending: 'Wird gesendet...', send: 'Nachricht senden', sendError: 'Fehler beim Senden', netError: 'Verbindungsfehler. Bitte versuchen Sie es erneut.' };
var btn = e.target.querySelector('button[type="submit"]');
if (btn) { btn.disabled = true; btn.textContent = T.sending; }
fetch('/api/contact', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name: document.getElementById('cf-name').value,
organisation: document.getElementById('cf-org').value,
email: document.getElementById('cf-email').value,
message: document.getElementById('cf-message').value,
lang: lang
})
})
.then(function (r) { return r.json().then(function (d) { return { ok: r.ok, data: d }; }); })
.then(function (res) {
if (res.ok) {
document.getElementById('contact-form').style.display = 'none';
document.getElementById('form-success').style.display = 'block';
if (window.umami) umami.track('contact_form_success');
} else {
alert(res.data.error || T.sendError);
if (btn) { btn.disabled = false; btn.textContent = T.send; }
}
})
.catch(function () {
alert(T.netError);
if (btn) { btn.disabled = false; btn.textContent = T.send; }
});
return false;
};
/* ==================== LOAD DEEPFAKES DATA ==================== */ /* ==================== LOAD DEEPFAKES DATA ==================== */
function loadDeepfakesData() { function loadDeepfakesData() {

258
js/trial-form.js Normale Datei
Datei anzeigen

@@ -0,0 +1,258 @@
/* ==================================================================
AegisSight Testzugang-Formular
Liegt im Anfrage-Popup der Startseite, deutsch und englisch.
Sprache wird aus <html lang> gelesen, wie in lagebild.js und
cookie-consent.js auch.
================================================================== */
(function () {
'use strict';
var LANG = (document.documentElement.lang || 'de').toLowerCase().indexOf('en') === 0 ? 'en' : 'de';
/* ---------- Texte ---------- */
var T = {
de: {
sending: 'Wird gesendet...',
send: 'Testzugang anfragen',
nameFehlt: 'Bitte geben Sie Ihren Namen an.',
freemail: 'Für einen Testzugang berücksichtigen wir ausschließlich dienstliche E-Mail-Adressen von Behörden oder Unternehmen. Bitte verwenden Sie daher möglichst keine Freemail-Adresse wie Gmail, GMX oder web.de.',
invalidMail: 'Diese E-Mail-Adresse sieht nicht vollständig aus. Bitte prüfen Sie Ihre Eingabe.',
consent: 'Bitte bestätigen Sie die Datenschutzhinweise, damit wir Ihre Anfrage bearbeiten dürfen.',
tooFast: 'Bitte nehmen Sie sich einen Moment für das Formular. Versuchen Sie es gleich noch einmal.',
sendError: 'Die Anfrage konnte nicht gesendet werden.',
netError: 'Verbindungsfehler. Bitte versuchen Sie es erneut.',
hintOfficial: 'Dienstliche Adresse erkannt.',
labels: {
head: 'ANFRAGE TESTZUGANG AEGISSIGHT MONITOR',
name: 'Name',
org: 'Behörde oder Organisation',
role: 'Funktion oder Dienststelle',
mail: 'Dienstliche E-Mail',
phone: 'Telefon',
domain: 'Domain-Einstufung',
domainOk: 'Behörden- oder Organisationsdomain erkannt',
domainCheck: 'nicht eindeutig, bitte manuell prüfen',
empty: 'keine Angabe'
}
},
en: {
sending: 'Sending...',
send: 'Request trial access',
nameFehlt: 'Please enter your name.',
freemail: 'For trial access we only consider official email addresses from public authorities or companies. Please avoid free-provider addresses such as Gmail, GMX or web.de.',
invalidMail: 'This email address looks incomplete. Please check your entry.',
consent: 'Please confirm the privacy notice so that we may process your request.',
tooFast: 'Please take a moment to fill in the form, then try again.',
sendError: 'The request could not be sent.',
netError: 'Connection error. Please try again.',
hintOfficial: 'Official address recognised.',
labels: {
head: 'TRIAL ACCESS REQUEST AEGISSIGHT MONITOR',
name: 'Name',
org: 'Authority or organisation',
role: 'Role or department',
mail: 'Work email',
phone: 'Phone',
domain: 'Domain assessment',
domainOk: 'official domain recognised',
domainCheck: 'not conclusive, please review manually',
empty: 'not provided'
}
}
}[LANG];
/* ---------- Freemail- und Wegwerf-Anbieter ----------
Diese Adressen werden abgewiesen. Alles andere kommt durch,
damit Landkreise, Hochschulen und Rettungsdienste mit eigener
Domain nicht ausgesperrt werden. */
var BLOCKED = [
'gmail.com', 'googlemail.com', 'gmx.de', 'gmx.net', 'gmx.at', 'gmx.ch', 'gmx.com',
'web.de', 't-online.de', 'freenet.de', 'arcor.de', 'online.de',
'outlook.com', 'outlook.de', 'hotmail.com', 'hotmail.de', 'live.com', 'live.de', 'msn.com',
'yahoo.com', 'yahoo.de', 'yahoo.co.uk', 'ymail.com', 'aol.com',
'icloud.com', 'me.com', 'mac.com',
'proton.me', 'protonmail.com', 'pm.me', 'posteo.de', 'posteo.net', 'mailbox.org',
'mail.de', 'mail.com', 'email.de', 'firemail.de', 'unitybox.de', 'vodafone.de', 'vodafonemail.de',
'zoho.com', 'fastmail.com', 'hey.com', 'tutanota.com', 'tutanota.de', 'tuta.io',
'yandex.com', 'yandex.ru', 'mail.ru', 'qq.com', '163.com', '126.com', 'sina.com',
'mailinator.com', 'guerrillamail.com', '10minutemail.com', 'temp-mail.org', 'tempmail.com',
'trashmail.com', 'trashmail.de', 'wegwerfmail.de', 'yopmail.com', 'sharklasers.com',
'getnada.com', 'dispostable.com', 'maildrop.cc', 'throwawaymail.com', 'moakt.com',
'emailondeck.com', 'spam4.me', 'byom.de', 'einrot.com', 'mytemp.email'
];
/* ---------- Muster typischer Behörden- und Organisationsdomains ----------
Nur zur Kennzeichnung in der Anfrage-Mail, keine Sperre. */
var OFFICIAL_SUFFIX = [
'.bund.de', '.bundeswehr.org', '.bundestag.de', '.bundesrat.de',
'.bayern.de', '.nrw.de', '.berlin.de', '.hamburg.de', '.bremen.de',
'.niedersachsen.de', '.hessen.de', '.rlp.de', '.saarland.de', '.sachsen.de',
'.sachsen-anhalt.de', '.thueringen.de', '.brandenburg.de', '.schleswig-holstein.de',
'.mv-regierung.de', '.bwl.de', '.baden-wuerttemberg.de',
'.europa.eu', '.europarl.europa.eu', '.gv.at', '.bmi.gv.at', '.admin.ch',
'.gov', '.gov.uk', '.mil', '.gouv.fr', '.overheid.nl', '.edu'
];
var OFFICIAL_PART = [
'polizei.', 'bundeswehr.', 'bundespolizei.', 'zoll.', 'thw.', 'feuerwehr.',
'stadt-', 'stadt.', 'kreis-', 'landkreis-', 'kreis.', 'bezirk-', 'gemeinde-',
'uni-', 'universitaet', 'university', 'hochschule', 'fh-', 'hs-',
'landtag', 'ministerium', 'verfassungsschutz', 'bka.', 'bfv.', 'lka.'
];
function domainOf(mail) {
var at = (mail || '').lastIndexOf('@');
return at === -1 ? '' : mail.slice(at + 1).trim().toLowerCase();
}
function isBlocked(mail) {
return BLOCKED.indexOf(domainOf(mail)) !== -1;
}
function looksOfficial(mail) {
var d = domainOf(mail);
if (!d) return false;
var i;
for (i = 0; i < OFFICIAL_SUFFIX.length; i++) {
if (d === OFFICIAL_SUFFIX[i].slice(1) || d.slice(-OFFICIAL_SUFFIX[i].length) === OFFICIAL_SUFFIX[i]) return true;
}
for (i = 0; i < OFFICIAL_PART.length; i++) {
if (d.indexOf(OFFICIAL_PART[i]) !== -1) return true;
}
return false;
}
function plausibleMail(mail) {
return /^[^\s@]+@[^\s@.]+(\.[^\s@.]+)+$/.test(mail || '');
}
/* ---------- Initialisierung ---------- */
document.addEventListener('DOMContentLoaded', function () {
var form = document.getElementById('trial-form');
if (!form) return;
var loadedAt = Date.now();
var mailField = document.getElementById('tf-email');
var mailNote = document.getElementById('tf-email-note');
/* Formular in den Ausgangszustand zuruecksetzen. Wird beim Oeffnen
des Modals aufgerufen, damit niemand die Eingaben oder die
Erfolgsmeldung eines vorherigen Nutzers sieht. */
function resetTrialForm() {
form.reset();
form.style.display = '';
var ok = document.getElementById('tf-success');
if (ok) ok.style.display = 'none';
var errorBox = document.getElementById('tf-error');
if (errorBox) { errorBox.style.display = 'none'; errorBox.textContent = ''; }
if (mailNote) { mailNote.textContent = ''; mailNote.className = 'tf-note'; }
if (mailField) mailField.removeAttribute('aria-invalid');
var btn = form.querySelector('button[type="submit"]');
if (btn) { btn.disabled = false; btn.textContent = T.send; }
}
window.resetTrialForm = resetTrialForm;
/* Live-Rueckmeldung am E-Mail-Feld */
if (mailField && mailNote) {
mailField.addEventListener('blur', function () {
var v = mailField.value.trim();
mailNote.className = 'tf-note';
if (!v) { mailNote.textContent = ''; return; }
if (isBlocked(v)) {
mailNote.textContent = T.freemail;
mailNote.className = 'tf-note tf-note-warn';
mailField.removeAttribute('aria-invalid');
} else if (looksOfficial(v)) {
mailNote.textContent = T.hintOfficial;
mailNote.className = 'tf-note tf-note-ok';
mailField.removeAttribute('aria-invalid');
} else {
mailNote.textContent = '';
mailField.removeAttribute('aria-invalid');
}
});
}
form.addEventListener('submit', function (e) {
e.preventDefault();
var val = function (id) {
var el = document.getElementById(id);
return el ? el.value.trim() : '';
};
var email = val('tf-email');
var honey = val('tf-website');
var consent = document.getElementById('tf-consent');
var errorBox = document.getElementById('tf-error');
var btn = form.querySelector('button[type="submit"]');
var fail = function (msg, feldId) {
if (errorBox) {
errorBox.textContent = msg;
errorBox.style.display = 'block';
errorBox.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
var feld = feldId && document.getElementById(feldId);
if (feld) { feld.focus(); }
if (btn) { btn.disabled = false; btn.textContent = T.send; }
};
if (errorBox) errorBox.style.display = 'none';
/* Honeypot. Echte Nutzer sehen dieses Feld nicht. */
if (honey) return false;
/* Zeitfalle gegen Bots */
if (Date.now() - loadedAt < 4000) return fail(T.tooFast);
/* Das Formular traegt novalidate, damit die Browsermeldungen die
eigene Pruefung nicht ueberlagern. Pflichtfelder deshalb hier. */
if (!val('tf-name')) return fail(T.nameFehlt, 'tf-name');
if (!plausibleMail(email)) return fail(T.invalidMail, 'tf-email');
if (consent && !consent.checked) return fail(T.consent, 'tf-consent');
if (btn) { btn.disabled = true; btn.textContent = T.sending; }
var L = T.labels;
var e_ = L.empty;
var zeilen = [
L.head,
'',
L.name + ' = ' + val('tf-name'),
L.org + ' = ' + (val('tf-org') || e_),
L.role + ' = ' + (val('tf-role') || e_),
L.mail + ' = ' + email,
L.phone + ' = ' + (val('tf-phone') || e_),
'',
L.domain + ' = ' + (looksOfficial(email) ? L.domainOk : L.domainCheck)
];
var body = zeilen.join('\n');
fetch('/api/contact', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name: val('tf-name'),
organisation: val('tf-org'),
email: email,
message: body,
lang: LANG
})
})
.then(function (r) { return r.json().then(function (d) { return { ok: r.ok, data: d }; }); })
.then(function (res) {
if (res.ok) {
form.style.display = 'none';
var ok = document.getElementById('tf-success');
if (ok) { ok.style.display = 'block'; ok.scrollIntoView({ behavior: 'smooth', block: 'center' }); }
if (window.umami) umami.track('trial_request_success');
} else {
fail((res.data && res.data.error) || T.sendError);
}
})
.catch(function () { fail(T.netError); });
return false;
});
});
})();

Datei anzeigen

@@ -134,7 +134,7 @@
<ul class="nav-menu"> <ul class="nav-menu">
<li><a href="/">Startseite</a></li> <li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li> <li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li> <li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li> <li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul> </ul>
<div class="nav-extras"> <div class="nav-extras">
@@ -156,7 +156,7 @@
<ul> <ul>
<li><a href="/">Startseite</a></li> <li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li> <li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li> <li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li> <li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul> </ul>
<div class="lang-switcher" role="group" aria-label="Sprache"> <div class="lang-switcher" role="group" aria-label="Sprache">

Datei anzeigen

@@ -111,7 +111,7 @@
<ul class="nav-menu"> <ul class="nav-menu">
<li><a href="/">Startseite</a></li> <li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li> <li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li> <li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li> <li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul> </ul>
<div class="nav-extras"> <div class="nav-extras">
@@ -135,7 +135,7 @@
<ul> <ul>
<li><a href="/">Startseite</a></li> <li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li> <li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li> <li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li> <li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul> </ul>
<div class="lang-switcher" role="group" aria-label="Sprache"> <div class="lang-switcher" role="group" aria-label="Sprache">

Datei anzeigen

@@ -136,7 +136,7 @@
<ul class="nav-menu"> <ul class="nav-menu">
<li><a href="/">Startseite</a></li> <li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li> <li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li> <li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li> <li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul> </ul>
<div class="nav-extras"> <div class="nav-extras">
@@ -160,7 +160,7 @@
<ul> <ul>
<li><a href="/">Startseite</a></li> <li><a href="/">Startseite</a></li>
<li><a href="/#about">Über uns</a></li> <li><a href="/#about">Über uns</a></li>
<li><a href="/#products">Lösungen</a></li> <li><a href="/#demos">Lösungen</a></li>
<li><a href="mailto:info@aegis-sight.de">Kontakt</a></li> <li><a href="mailto:info@aegis-sight.de">Kontakt</a></li>
</ul> </ul>
<div class="lang-switcher" role="group" aria-label="Sprache"> <div class="lang-switcher" role="group" aria-label="Sprache">

Datei anzeigen

@@ -31,7 +31,10 @@ AegisSight wird vollständig auf Servern in Deutschland betrieben und verarbeite
Der AegisSight Monitor richtet sich an Behörden, Redaktionen und Sicherheitsdienste, die belastbare Lagebilder in Echtzeit benötigen, etwa Krisenstäbe, investigative Newsrooms, Werkschutz und Corporate Security. Der AegisSight Monitor richtet sich an Behörden, Redaktionen und Sicherheitsdienste, die belastbare Lagebilder in Echtzeit benötigen, etwa Krisenstäbe, investigative Newsrooms, Werkschutz und Corporate Security.
### Wie bekomme ich Zugang zum AegisSight Monitor? ### Wie bekomme ich Zugang zum AegisSight Monitor?
Zugang erfolgt nach individueller Anfrage; Pilotzugänge für qualifizierte Organisationen sind möglich. Kontakt: info@aegis-sight.de. Über einen kostenfreien Testzugang, anzufragen über das Formular auf https://aegis-sight.de/. Der Testzugang läuft eine Woche, umfasst ein eigenes Thema mit vollem Funktionsumfang und ein festes Nutzungskontingent, und endet automatisch. Voraussetzung ist eine dienstliche E-Mail-Adresse, Adressen bei Freemail-Anbietern werden nicht berücksichtigt.
### Wer bekommt einen Testzugang und warum ist eine dienstliche E-Mail-Adresse nötig?
Der Testzugang richtet sich an Behörden, Redaktionen und Sicherheitsdienste. Die dienstliche Adresse zeigt, aus welchem Umfeld die Anfrage kommt, und erlaubt es, den Zugang inhaltlich auf die jeweilige Aufgabe zuzuschneiden. Organisationen mit eigener Domain, die nicht offensichtlich einer Behörde zuzuordnen ist, sind ausdrücklich eingeschlossen.
### Ist AegisSight eine Monitoring-Software wie PRTG, Checkmk oder Nagios? ### Ist AegisSight eine Monitoring-Software wie PRTG, Checkmk oder Nagios?
Nein. AegisSight ist keine IT- oder Netzwerk-Monitoring-Software zur Überwachung von Servern, Systemen oder Verfügbarkeiten. AegisSight ist OSINT-Monitoring-Software: Überwacht werden öffentliche Informationsquellen wie Nachrichten, Fachmedien, Behördenmeldungen und Social Media, nicht die eigene IT-Infrastruktur. Ergebnis sind strukturierte Lagebilder zur Sicherheits- und Informationslage. Nein. AegisSight ist keine IT- oder Netzwerk-Monitoring-Software zur Überwachung von Servern, Systemen oder Verfügbarkeiten. AegisSight ist OSINT-Monitoring-Software: Überwacht werden öffentliche Informationsquellen wie Nachrichten, Fachmedien, Behördenmeldungen und Social Media, nicht die eigene IT-Infrastruktur. Ergebnis sind strukturierte Lagebilder zur Sicherheits- und Informationslage.
@@ -43,7 +46,7 @@ Ja. Der AegisSight Monitor ist eine OSINT-Software aus Deutschland (Anbieter: Ae
Der AegisSight Monitor ist DSGVO-konform: Die Software läuft ausschließlich auf Servern in Deutschland, verarbeitet nur öffentlich zugängliche Quellen und übermittelt keine Daten in Drittländer. Damit ist sie eine europäische, souveräne Alternative zu außereuropäischen OSINT-Plattformen. Der AegisSight Monitor ist DSGVO-konform: Die Software läuft ausschließlich auf Servern in Deutschland, verarbeitet nur öffentlich zugängliche Quellen und übermittelt keine Daten in Drittländer. Damit ist sie eine europäische, souveräne Alternative zu außereuropäischen OSINT-Plattformen.
### Was kostet der AegisSight Monitor? ### Was kostet der AegisSight Monitor?
Die Preise richten sich nach Umfang und Organisation und werden auf Anfrage genannt. Für qualifizierte Organisationen sind Pilotzugänge möglich. Kontakt: info@aegis-sight.de. Die Preise richten sich nach Umfang und Organisation und werden auf Anfrage genannt. Ein einwöchiger Testzugang ist kostenfrei und über das Anfrageformular auf https://aegis-sight.de/ erhältlich. Kontakt: info@aegis-sight.de.
### Was ist Social-Media-Monitoring für Behörden? ### Was ist Social-Media-Monitoring für Behörden?
Social-Media-Monitoring für Behörden bezeichnet die strukturierte, kontinuierliche Auswertung öffentlicher Social-Media-Inhalte zur Lagebeurteilung, etwa für Krisenstäbe oder Sicherheitsbehörden. AegisSight integriert Social-Media-Quellen in seine OSINT-Lagebilder und prüft zentrale Behauptungen automatisch gegen unabhängige Quellen. Social-Media-Monitoring für Behörden bezeichnet die strukturierte, kontinuierliche Auswertung öffentlicher Social-Media-Inhalte zur Lagebeurteilung, etwa für Krisenstäbe oder Sicherheitsbehörden. AegisSight integriert Social-Media-Quellen in seine OSINT-Lagebilder und prüft zentrale Behauptungen automatisch gegen unabhängige Quellen.