# RSC100 Control Center

Eine reine HTML/CSS/JavaScript-Startseite für Dienste, Administration und lokale Statuswerte. Sie braucht weder Datenbank noch Cloud und enthält keine Secrets.

## Start und Test

Im Projektverzeichnis starten:

```bash
python3 scripts/update-system-status.py
python3 -m http.server 8000
```

Dann `http://127.0.0.1:8000` im Browser öffnen. Ein einfacher Smoke-Test:

```bash
curl -fsS http://127.0.0.1:8000/data/system-status.json
```

Die Seite funktioniert auch als statische Datei, die Statusdaten werden jedoch über `fetch` geladen; deshalb für den Test einen HTTP-Server verwenden. `scripts/update-system-status.py` erfasst die lokalen Werte read-only, ohne `sudo`, Root-Rechte oder Secrets, und ersetzt `data/system-status.json` atomar. Hinweise zur regelmäßigen Ausführung und zum Verhalten ohne Docker-Socket-Rechte stehen in [`docs/STATUS-INTEGRATION.md`](docs/STATUS-INTEGRATION.md).

Die minütliche Ausführung als User-Timer installieren:

```bash
scripts/install-user-status-timer.sh
```

Installation, Deinstallation, Status, Logs und der optionale Linger-Hinweis sind in [`docs/STATUS-INTEGRATION.md`](docs/STATUS-INTEGRATION.md) dokumentiert.

## Konfiguration

Die Control-Center-Version wird ausschließlich über `version` in [`config.js`](config.js) gepflegt und im Header angezeigt. Sie ist unabhängig von der Discover-Produktversion; deren Quelle bleibt `data/email-discover-version.json`.

Alle Kachel-Ziele und die Statusquelle stehen ebenfalls zentral in [`config.js`](config.js). Nur geprüfte Ziele sind als Links aktiviert; geplante Funktionen bleiben URL-frei und deaktiviert. `data/system-status.json` enthält die zuletzt lokal erfassten Systemwerte. Details der read-only Anbindung: [`docs/STATUS-INTEGRATION.md`](docs/STATUS-INTEGRATION.md). Die geprüften Dienste, deaktivierten Platzhalter und Maintainer-Gates dokumentiert [`docs/SERVICE-AUDIT.md`](docs/SERVICE-AUDIT.md).

Hermes CLI ist bewusst als geplante Terminal-Integration dargestellt, nicht als Weblink. Gitk ist als lokale GUI erläutert und verweist alternativ auf GitHub.

## Betriebsadministration

Produktive RSC100-Applikationen stehen im Abschnitt **Betriebsadministration**. Der Eintrag **Discover** (`email-discover`) verweist auf die zentrale n8n-Instanz und zeigt Version, Diensttyp, letzte bestätigte produktive Execution und Sendesperre. Sein Aktivzustand wird bei jedem Laden und anschließend alle 60 Sekunden aus derselben Statusquelle wie die übrige Telemetrie ermittelt. Ist der n8n-Dienst nicht `healthy` oder die Statusquelle nicht erreichbar, wird die Kachel automatisch ausgegraut und der Hauptlink deaktiviert; die secrets-freie Detailansicht bleibt erreichbar.

Die kanonische Discover-Version steht im Repository `email-discover` ausschließlich in `data/email-discover-version.json`. Die gleichnamige Datei in diesem Repository ist eine durch dessen Versions-Synchronisation geprüfte Deployment-Kopie; sie darf nicht unabhängig gepflegt werden. Aktuell ist dies `1.0.2` mit Release-Tag `v1.0.2`. Control Center und Discover-Startseite laden die Quelle mit `no-store`, verwenden die geladene Version als Cache-Key für CSS und JavaScript und zeigen bei fehlenden oder ungültigen Daten sichtbar `Version unbekannt`.

Versionsdiagnose:

```bash
node scripts/diagnose-discover-version.js
```

Weitere Übersichten:

- [`docs/APPLICATION-INVENTORY.md`](docs/APPLICATION-INVENTORY.md)
- [`docs/BETRIEBSADMINISTRATION.md`](docs/BETRIEBSADMINISTRATION.md)
- [`docs/CHANGELOG.md`](docs/CHANGELOG.md)
- [Verbindliche RSC100-Transferarchitektur](../RSC100-Hetzner/docs/architecture/rsc100-transferarchitektur.md)

## Dateiaustausch

Die führende Arbeitskopie des Control Center liegt in
`~/Projekte/RSC100-Control-Center`. Datei- und Datenaustausch nach oder von
rsc100 erfolgt ausschließlich nach dem
[RSC100-Transferstandard](../RSC100-Hetzner/docs/architecture/rsc100-transferarchitektur.md):
`/RSC3/RSC-Transfer/RSC100-Transfer/Projekte/RSC100-Control-Center/` mit
`_INPUT`, `_WORK`, `_OUTPUT` und `_ARCHIVE`. `To-Hermes`/`From-Hermes` sowie
direkte Übertragungen per `scp`, `sftp` oder SSH-basiertem `rsync` sind
abgelöst. Für Initialisierung und Synchronisation gilt
`~/bin/rsc-transfer-init.sh`; die Transferstruktur ist nur für kontrollierten
Austausch bestimmt und enthält keine Secrets.

## Projekt-Backups

Der Menüeintrag **Projekt-Backups** unter **Betriebsadministration** zeigt die
read-only Projektinventur für RSC100-Hetzner, Dayfile,
RSC100-Control-Center, email-discover und RSCwiki-SMW. Das Werkzeug ist
`~/bin/rsc-project-backup.sh` in Version `1.0.0`; es schreibt die atomare,
generierte Laufzeitquelle `data/project-backup-status.json`. Diese Datei wird
nicht versioniert. Browserzugriffe lösen ausschließlich Status- und
Integritätsanzeigen aus, nie Backup-, Restore-, Lösch- oder Retention-Aktionen.
Details, Schema, Statuslogik und Altersgrenze stehen in
[`docs/PROJECT-BACKUP.md`](docs/PROJECT-BACKUP.md) und
[`docs/PROJECT-BACKUP-STATUS-SCHEMA.md`](docs/PROJECT-BACKUP-STATUS-SCHEMA.md).

## Docker und Nginx

Für einen späteren lokalen Containerbetrieb:

```bash
docker compose up --build -d
```

Danach ist die Seite ausschließlich auf dem Host unter `http://127.0.0.1:8080` erreichbar. Die [`nginx.example.conf`](nginx.example.conf) ist nur ein Beispiel für einen vorhandenen Nginx und nimmt keine Systemänderungen vor. Sie beschränkt Zugriffe auf localhost und einen privaten RFC1918-Bereich; das konkrete RSC-Subnetz bei Bedarf präzisieren.

## Projektstruktur

```text
assets/                 Oberfläche und Logik
apps/                   Statische Applikationsdetails
data/system-status.json Zuletzt atomar erzeugte lokale Statusdaten
data/project-backup-status.json Generierte Backup-Laufzeitdaten (ignoriert)
data/email-discover-version.json Zentrale Discover-Versionsquelle
docs/                   Integrationshinweise
deploy/systemd-user/    User-Service und minütlicher Timer
config.js               Zentrale Kachel- und Quellenkonfiguration
scripts/update-system-status.py Read-only Status-Erfassung
scripts/install-user-status-timer.sh Installer für den User-Timer
```

## Deployment-Hinweise

Statische Dateien hinter einem bestehenden lokalen Webserver oder über Compose bereitstellen. Vorab die URLs in `config.js`, den gewünschten Hostnamen und das konkrete RSC-Netz in der Nginx-Beispieldatei prüfen. Es werden keine bestehenden Nginx-, Docker-, Firewall- oder Systemdienst-Konfigurationen verändert.
