# LAUNCH-CHECKLIST — Online-Schaltung der neuen AegisSight-Hauptseite

**Zielgruppe dieser Datei:** Claude (oder ein Mensch) auf einem anderen Rechner, der diese Datei vollständig liest und Schritt für Schritt ausführt. Alle Anweisungen sind so geschrieben, dass keine Eigenentscheidungen nötig sind.

**Auslöser:** Der User sagt sinngemäß "Jo stell online" oder "Schalte die Vorschau live".

**Was passiert:** Die Vorschauseite (`/vorschau/`) wird zur neuen Hauptseite (`/`). Die alte Hauptseite ("Sicherheit Made in Germany") wird in `_archiv/` verschoben. SEO wird aktiviert (robots.txt + sitemap.xml + Entfernung der noindex-Meta-Tags). Cookie-Consent + Umami sind bereits eingebaut.

---

## 0. Voraussetzungen — vor dem Start prüfen

- [ ] **Iran-Lage-Anpassung ist fertig.** Der zuständige Kollege hat die zu langen Iran-Lagen-Texte gekürzt/strukturiert. Sichtcheck: `https://aegis-sight.de/vorschau/` (Passwort: siehe Pass-Manager) → Demos-Karussell → Iran-Karte sollte ähnlich hoch sein wie Cyberangriffe und Deepfakes.
- [ ] **SSH-Zugriff** auf `claude-dev@46.225.225.49` funktioniert.
- [ ] **Git-Push-Rechte** für `https://gitea-undso.aegis-sight.de/AegisSight/Website.git` vorhanden (Token im Remote-URL eingebettet).
- [ ] **User hat ausdrücklich Go gegeben** ("Stell online", "Schalte live", o.ä.).

Wenn ein Punkt nicht erfüllt: NICHT FORTSETZEN, dem User Bescheid geben.

---

## 1. Pre-Flight-Backup (Pflicht!)

Werden auf dem Server (`46.225.225.49`) ausgeführt:

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && git tag pre-launch-$(date +%Y%m%d-%H%M%S) && git push origin --tags'
ssh claude-dev@46.225.225.49 'tar -czf /home/claude-dev/website-snapshot-$(date +%Y%m%d-%H%M%S).tar.gz -C /opt/v2-Docker/aegis-website html'
ssh claude-dev@46.225.225.49 'ls -lh /home/claude-dev/website-snapshot-*.tar.gz | tail -1'
```

Erwartet: Tar-Archiv ~40–60 MB. Git-Tag `pre-launch-YYYYMMDD-HHMMSS` ist gepusht.

**Notiere dir den Git-Tag-Namen** — du brauchst ihn fürs Rollback.

---

## 2. Schaltungs-Schritte (in genau dieser Reihenfolge)

Alle Pfade relativ zu `/opt/v2-Docker/aegis-website/html/`. Alle Commands per `ssh claude-dev@46.225.225.49 '...'` ausführen.

### 2.1  Archiv-Verzeichnis vorbereiten

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && mkdir -p _archiv'
```

### 2.2  Alte Hauptseite-Files in `_archiv/` verschieben

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  mv index.html _archiv/old-index.html && \
  cp -r css _archiv/old-css && \
  cp -r js _archiv/old-js && \
  mv robots.txt _archiv/old-robots.txt && \
  mv assets/videos/AFv6.mp4 _archiv/ 2>/dev/null; \
  mv assets/videos/hero-code-abstract.mp4 _archiv/ 2>/dev/null; \
  mv assets/videos/hero-data-flow.mp4 _archiv/ 2>/dev/null; \
  mv assets/videos/hero-network-viz.mp4 _archiv/ 2>/dev/null; \
  ls -la _archiv/'
```

**Wichtig:** `css` und `js` werden mit `cp -r` (kopiert, NICHT verschoben), weil die Lagen-Seiten weiterhin `/js/config.js`, `/js/translations.js`, `/js/mobile-nav.js` aus dem alten /js/-Ordner brauchen. Die alten /css/-Stylesheets brauchen die Lagen ebenfalls (`/css/main.css`, `/css/fonts.css`, `/css/mobile.css`).

### 2.3  Neue Vorschau-Files an Hauptseite-Position kopieren

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  cp vorschau/index.html index.html && \
  cp vorschau/css/style.css css/vorschau-style.css && \
  cp vorschau/js/app.js js/vorschau-app.js && \
  mkdir -p assets/videos/vorschau-hero && \
  cp vorschau/videos/* assets/videos/vorschau-hero/ && \
  ls -la index.html css/vorschau-style.css js/vorschau-app.js assets/videos/vorschau-hero/'
```

**Begründung:** Die Vorschau-CSS heißt `style.css` und liegt unter `vorschau/css/`. Wenn wir sie nach `/css/style.css` packen, würden wir die alte Hauptseite-CSS überschreiben (die für Lagen-Seiten gebraucht wird, falls dort references existieren). Daher: eindeutige Namen `vorschau-style.css` und `vorschau-app.js`.

### 2.4  Pfade in der neuen `index.html` anpassen

Die Vorschau-`index.html` referenziert relativ:
- `<link rel="stylesheet" href="css/style.css">` → muss zu `css/vorschau-style.css`
- `<script src="js/app.js"></script>` → muss zu `js/vorschau-app.js`
- `videos/hero-slide-X-monitoring.mp4` → muss zu `assets/videos/vorschau-hero/hero-slide-X-monitoring.mp4`

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  sed -i "s|href=\"css/style.css\"|href=\"/css/vorschau-style.css\"|g" index.html && \
  sed -i "s|src=\"js/app.js\"|src=\"/js/vorschau-app.js\"|g" index.html && \
  sed -i "s|src=\"videos/hero-slide-|src=\"/assets/videos/vorschau-hero/hero-slide-|g" index.html && \
  grep -E "(vorschau-style|vorschau-app|vorschau-hero)" index.html | head -10'
```

Erwartet: 7 Treffer (1× CSS, 1× JS, 5× Videos).

### 2.5  Passwort-Gate aus `index.html` entfernen

Folgenden Block ersatzlos löschen — es sind drei zusammenhängende Bereiche:
1. `<!-- Password Gate -->` Kommentar + dahinterliegender `<style>`-Block
2. `<div id="login-gate">...</div>`
3. `<script>` mit `var PW_HASH=...` etc.

Sed-Lösung (einzeilig):

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  python3 -c "
import re
with open(\"index.html\") as f: c = f.read()
# Entferne den kompletten Block von '<!-- Password Gate -->' bis nach dem login-gate-Script
c = re.sub(r'<!-- Password Gate -->.*?if\(getCookie.*?</script>', '', c, count=1, flags=re.DOTALL)
with open(\"index.html\", \"w\") as f: f.write(c)
print(\"Passwort-Gate entfernt\")
"'
```

Verifikation:

```bash
ssh claude-dev@46.225.225.49 'grep -c "PW_HASH\|login-gate" /opt/v2-Docker/aegis-website/html/index.html'
```

Erwartet: `0`

### 2.6  noindex/nofollow-Meta-Tags entfernen

In `index.html` und in den drei Lagen-Seiten:

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  for f in index.html lagen/iran-konflikt/index.html lagen/cyberangriffe/index.html lagen/deepfakes/index.html; do \
    sed -i "/<meta name=\"robots\" content=\"noindex/d" "$f"; \
  done && \
  echo "--- Verbliebene noindex-Tags (sollte 0 sein):"; \
  grep -c noindex index.html lagen/*/index.html'
```

Erwartet: Alle Dateien zeigen `0`.

### 2.7  robots.txt aktivieren (Crawler erlaubt)

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  mv robots-launch.txt robots.txt && \
  head -10 robots.txt'
```

Erwartet: erste Zeilen zeigen `Allow: /` und `Sitemap:` Verweis.

### 2.8  sitemap.xml aktivieren

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  mv sitemap-launch.xml sitemap.xml && \
  head -5 sitemap.xml'
```

### 2.9  Vorschau-Verzeichnis löschen

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  rm -rf vorschau && \
  ls -d vorschau 2>&1 | tail -1'
```

Erwartet: `ls: cannot access 'vorschau': No such file or directory`

### 2.10  `.bak.*`-Dateien aufräumen (optional)

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  find . -name "*.bak.*" -type f -delete && \
  find . -name "*.bak.*" -type f | wc -l'
```

Erwartet: `0`

### 2.11  Git-Commit + Push

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  git add -A && \
  git status --short | head -30'
```

Status prüfen — sollte zeigen:
- `D index.html` (alte gelöscht), `?? index.html` (neue erscheint via add) → wird als "renamed" oder M erkannt
- Diverse Dateien in `_archiv/` neu
- `vorschau/` komplett gelöscht
- `robots.txt`, `sitemap.xml` erscheinen oder werden modifiziert

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  git commit -m "Online-Schaltung: Vorschau ist die neue Hauptseite

- Vorschau-Inhalt aus /vorschau/ nach /index.html, /css/vorschau-style.css, /js/vorschau-app.js, /assets/videos/vorschau-hero/ verschoben
- Alte Hauptseite (Sicherheit Made in Germany) in /_archiv/ archiviert
- Passwort-Gate entfernt
- robots.txt: Crawler erlaubt (außer AI-Crawler), Sitemap-Verweis aktiviert
- sitemap.xml aktiviert (Hauptseite, 3 Lagen, Impressum, Datenschutz)
- noindex/nofollow Meta-Tags aus Hauptseite und Lagen entfernt

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>" && \
  git push origin main 2>&1 | tail -5'
```

---

## 3. Smoke-Tests (sofort nach Push)

Jeden Test einzeln ausführen, erwartete Antwort daneben prüfen:

```bash
# Hauptseite läuft:
curl -sI https://aegis-sight.de/ | head -1
# Erwartet: HTTP/1.1 200 OK

# Title ist da:
curl -s https://aegis-sight.de/ | grep -c '<title>AegisSight Monitor'
# Erwartet: 1

# noindex ist WEG:
curl -s https://aegis-sight.de/ | grep -c 'noindex'
# Erwartet: 0

# Passwort-Gate ist WEG:
curl -s https://aegis-sight.de/ | grep -c 'PW_HASH\|login-gate'
# Erwartet: 0

# robots.txt erlaubt Crawling:
curl -s https://aegis-sight.de/robots.txt | grep -c '^Allow:'
# Erwartet: ≥1

# sitemap.xml ist da:
curl -sI https://aegis-sight.de/sitemap.xml | head -1
# Erwartet: HTTP/1.1 200 OK

# Vorschau ist 404:
curl -sI https://aegis-sight.de/vorschau/ | head -1
# Erwartet: HTTP/1.1 404 Not Found

# Lagen erreichbar:
curl -sI https://aegis-sight.de/lagen/iran-konflikt/ | head -1
# Erwartet: HTTP/1.1 200 OK
curl -sI https://aegis-sight.de/lagen/cyberangriffe/ | head -1
# Erwartet: HTTP/1.1 200 OK
curl -sI https://aegis-sight.de/lagen/deepfakes/ | head -1
# Erwartet: HTTP/1.1 200 OK

# Cookie-Consent Asset erreichbar:
curl -sI https://aegis-sight.de/cookie-consent.js | head -1
# Erwartet: HTTP/1.1 200 OK

# Impressum + Datenschutz:
curl -sI https://aegis-sight.de/impressum.html | head -1
curl -sI https://aegis-sight.de/datenschutz.html | head -1
# Erwartet: beide HTTP/1.1 200 OK

# OG-Image:
curl -sI https://aegis-sight.de/assets/images/og-image.png | head -1
# Erwartet: HTTP/1.1 200 OK
```

Wenn ALLE Smoke-Tests grün: **Sage dem User Bescheid, dass die Live-Schaltung erfolgreich war**, und bitte um manuelle Verifikation im Browser (Hard-Reload Strg+F5):
- Layout korrekt
- Cookie-Banner erscheint
- Kontaktformular funktioniert
- Hero-Videos laufen
- Lagen-Karussell zeigt aktuelle Daten
- Footer hat Cookie-Einstellungen-Link

---

## 4. Notfall-Rollback (falls Smoke-Tests fehlschlagen)

**Variante A — Git-Rollback (bevorzugt):**

```bash
# Den Tag-Namen aus Schritt 1 verwenden (z.B. pre-launch-20260427-093015)
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  git reset --hard pre-launch-YYYYMMDD-HHMMSS && \
  git push --force-with-lease origin main && \
  git status'
```

⚠ **WICHTIG**: `--force-with-lease` ist sicherer als `--force`. Im seltenen Fall, dass jemand parallel committed hat, schlägt es fehl statt Daten zu überschreiben.

**Variante B — Server-Snapshot zurückspielen:**

```bash
ssh claude-dev@46.225.225.49 'tar -xzf /home/claude-dev/website-snapshot-YYYYMMDD-HHMMSS.tar.gz -C /opt/v2-Docker/aegis-website/'
```

**Nach Rollback**: Smoke-Tests erneut laufen lassen — Vorschau sollte wieder unter `/vorschau/` erreichbar sein, Hauptseite zeigt wieder die alte Version.

---

## 5. Manuelle Aufgaben (User/Kollege außerhalb des Skripts)

- **Browser-Test** auf `https://aegis-sight.de/` (Hard-Reload Strg+F5):
  - Layout, Hero-Videos, Karussell, Kontaktformular
  - Cookie-Banner erscheint, Akzeptieren funktioniert
  - Mobile-View testen
  - Lagen-Footer-Links funktionieren (z.B. `/#features`, `/#contact`)
- **OG-Image-Preview** testen: URL in WhatsApp/Telegram/LinkedIn einfügen → Vorschaubild sollte erscheinen
- **Eintrag in Search Console / Bing Webmaster:** ENTFÄLLT laut User-Wunsch (eigener Tracking-Pixel via Umami)

---

## 6. Notfall-Wiederherstellung der alten Hauptseite (separater, eigenständiger Block)

Falls jemand die alte Hauptseite ("Sicherheit Made in Germany") jemals wieder sehen/wiederherstellen möchte:

**Option A — aus `_archiv/` zurückkopieren:**

```bash
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  ls _archiv/'
# Zeigt: old-index.html, old-css/, old-js/, old-robots.txt, old-videos
```

Ein einzelner File z.B.:

```bash
ssh claude-dev@46.225.225.49 'cp /opt/v2-Docker/aegis-website/html/_archiv/old-index.html /tmp/old-index.html && head -30 /tmp/old-index.html'
```

**Option B — aus Git-History wiederherstellen (auch wenn `_archiv/` mal gelöscht würde):**

```bash
# Letzten Commit finden, der die alte index.html noch enthielt:
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  git log --all --diff-filter=D --pretty=format:"%H %s" -- index.html | head -5'

# Dann die alte Datei aus diesem Commit zurückholen:
ssh claude-dev@46.225.225.49 'cd /opt/v2-Docker/aegis-website/html && \
  git show <commit-hash>^:index.html > /tmp/old-index.html'
```

Analog für `css/`, `js/` etc.

---

## 7. Anhang — Was wird wo geändert (Übersicht)

| Pfad | Vor Schaltung | Nach Schaltung |
|---|---|---|
| `/index.html` | "Sicherheit Made in Germany" (alte Hauptseite) | AegisSight Monitor (war Vorschau) |
| `/vorschau/` | passwortgeschützte Vorschau | gelöscht (404) |
| `/css/style.css` (alt) | aktiv (alte Hauptseite) | unter `/_archiv/old-css/style.css` |
| `/css/vorschau-style.css` | nicht existent | aktiv (für neue Hauptseite) |
| `/js/main.js` (alt) | aktiv | unter `/_archiv/old-js/main.js` |
| `/js/vorschau-app.js` | nicht existent | aktiv |
| `/css/main.css`, `/css/fonts.css`, `/css/mobile.css` | aktiv (für Hauptseite + Lagen) | aktiv (weiterhin für Lagen) |
| `/js/config.js`, `/js/translations.js`, `/js/mobile-nav.js` | aktiv | aktiv (für Lagen) |
| `/robots.txt` | blockiert alle Crawler | erlaubt Crawler (außer AI/Spam) |
| `/sitemap.xml` | nicht existent | aktiv |
| `/lagen/*/index.html` | hat noindex/nofollow | wird indexierbar |
| `/cookie-consent.js`, `/cookie-consent.css` | aktiv (auf alter Hauptseite) | aktiv (auf neuer Hauptseite + Lagen) |
| `/assets/images/og-image.png` | bereits vorhanden | weiterhin vorhanden |
| `/datenschutz.html` | bereits erweitert (Kontakt + Umami) | unverändert |

---

**Bei Fragen oder unerwarteten Outputs:** NICHT improvisieren. Dem User die genaue Fehlermeldung melden und Anweisung abwarten.
