Technisches Handbuch v1.0.0

Encryptet Lan-
Chat & Videoanrufe

Ein leichtgewichtiges, lokal firstes Chat-Server- und Single-Page-Web-Client-System für schnelles LAN-Messaging und Peer-to-Peer-Videoanrufe — mit KI-Helfern am Ort oder remote, ohne externe Datenbank.

Dokumentation lesen
Testsession anfragen

1. Einleitung

Was ist XteVision SecuChat und für wen ist es gedacht?

1.1 Was ist XteVision SecuChat?

XteVision SecuChat (xtevision-secuchat v1.0.0) ist ein leichtgewichtiges, lokal firstes, selbst gehostetes Chat-Server- und Single-Page-Web-Client-System für schnelles LAN-Messaging und Peer-to-Peer-Videoanrufe. Die Daten werden in data.json gespeichert, die Oberfläche aus public/ bereitgestellt und Uploads nach uploads/ gespeichert. Entwickelt für minimalen Setup — keine externe Datenbank erforderlich.

1.2 Kernfunktionen

  • Kontobasierte Benutzer: Registrierung / Login mit gesalzener scrypt-Passwortverschlüsselung
  • Echtzeit-Präsenz & Nachrichten über Server-Sent Events (SSE)
  • Kontakte: Anfrage / Annahme-Workflow und Präsenz-Updates
  • Datei-Uploads: Anhänge & Avatare (Grenzen werden durchgesetzt) gespeichert in uploads/
  • P2P-Videoanrufe: über PeerJS + lokales PeerServer (Port 5009)
  • KI-Helfer & Assistent: Integration von Modellen am Ort oder remote für Chat, Übersetzung, Zusammenfassung, Embeddings und Inhaltsmoderation; konfigurierbare Modellauswahl und Streaming-Antworten
  • Sicherheit: CSP und übliche Sicherheits-Header werden vom Server gesetzt

1.3 Zielgruppe

  • Primär: Teams und Organisationen, die eine private, LAN-basierte Chat- und Videoanrufe-Lösung ohne Cloud-Abhängigkeit möchten
  • Sekundär: Datenschutzbewusste Benutzer, die KI-Helfer am Ort oder selbst gehostete Helfer für Chat, Übersetzung und Moderation möchten

2. Systemarchitektur

High-Level-Design und Kommunikationsablauf

2.1 High-Level-Architektur

┌─────────────────────────────────────────────────────────────────┐
│                         Browser (Single-Page-Client)              │
│  ┌────────┐ ┌──────────┐ ┌────────┐ ┌────────┐ ┌──────────────┐  │
│  │ Login  │ │ Chat     │ │ Kontakte │ │Anrufe  │ │KI-Assistent  │  │
│  └────────┘ └──────────┘ └────────┘ └────────┘ └──────────────┘  │
└──────────────────────────────┬──────────────────────────────────┘
                               │ HTTP / SSE
┌──────────────────────────────┴──────────────────────────────────┐
│                    Node.js-Server (Port 5008)                     │
│  ┌───────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────────┐  │
│  │ Auth      │ │Nachrichten │ │Kontakte    │ │KI-Proxy (optional) │  │
│  │(scrypt)   │ │(SSE)       │ │(Anfrage / │ │ → lokales/remote LLM│  │
│  │           │ │            │ │ Annahme)   │ └────────────────────┘  │
│  └───────────┘ └──────────┘ └──────────┘                          │
│  ┌───────────┐ ┌───────────────────────────────────────────────┐  │
│  │Uploads     │ │ data.json (Benutzer, Nachrichten, Kontakte)     │  │
│  │ (uploads/  │ │ public/ (bereitgestellte Oberfläche)            │  │
│  └───────────┘ └───────────────────────────────────────────────┘  │
└──────────────────────────────┬──────────────────────────────────┘
                               │ PeerJS-Signalisierung
┌──────────────────────────────┴──────────────────────────────────┐
│                    Lokales PeerServer (Port 5009)                  │
│  P2P-Media-Verbindung zwischen Peers (Videoanrufe)                 │
└───────────────────────────────────────────────────────────────────┘

2.2 Kommunikationsablauf

  1. Frontend → Server: HTTP-Anfragen für Auth, Nachrichten, Kontakte, Uploads; SSE-Abonnement für Echtzeit-Präsenz & Nachrichten
  2. Server → data.json: Alle Benutzer-, Nachrichten- und Kontaktzustände werden in einer einzelnen JSON-Datei persistiert — keine externe Datenbank
  3. Frontend → PeerServer: P2P-Videoanrufe signalisieren über das lokales PeerServer (Port 5009), dann fließt das Medien-Peer-to-Peer
  4. Frontend → KI-Backend: Chat, Übersetzung, Zusammenfassung, Embeddings und Moderation laufen über den KI-Proxy zu einem lokalen (Ollama/MLX) oder remote Modell

2.3 Bereitstellungsmodell

XteVision SecuChat ist für selbst gehosteten, LAN-firsten Betrieb konzipiert:

  • Läuft als eigenständiger Node.js-Server auf Ihrer eigenen Hardware
  • Für LAN-only-Nutzung reicht die Anbindung an eine private Oberfläche
  • Für Remote-Zugriff hinter einen Reverse-Proxy (nginx) mit HTTPS betreiben
  • Alle Chat-Daten bleiben auf Ihrem lokalen Server — keine Cloud-Abhängigkeit

3. Tech-Stack

Frontend, Backend und Infrastrukturtechnologien

EbeneTechnologieZweck
LaufzeitNode.js (≥ 16)Server-Laufzeit
ServerExpress.jsHTTP-Server + API-Routen
Authcrypto.scryptGesalzene Passwortverschlüsselung
EchtzeitSSE (Server-Sent Events)Präsenz & Nachrichten-Ereignisse
Speicherdata.jsonBenutzer, Nachrichten, Kontakte
Datei-Uploadsmulteruploads/Anhänge & Avatare
P2P-SignalisierungPeerJS + PeerServerVideoanrufe-Signalisierung (Port 5009)
KI-BackendLLM-kompatible APIChat, Übersetzung, Zusammenfassung, Embeddings, Moderation
FrontendVanilla HTML/CSS/JSSingle-Page-Client, aus public/ bereitgestellt
Hinweis: Die KI-Backend ist optional. Kern-Chat, Präsenz, Kontakte und P2P-Videoanrufe funktionieren ohne sie; KI-Funktionen erfordern ein konfiguriertes lokales oder remoten Modell.

4. Installation & Setup

XteVision SecuChat auf Ihrem Server starten

4.1 Voraussetzungen

  • Node.js LTS (z. B. 16+)
  • npm oder yarn
  • PeerServer (optional, nur für P2P-Fallback — siehe peerjs/)
  • Lokales KI-Service (optional, für die KI-Endpunkte)

4.2 Installation

Abhängigkeiten installieren, optional das Peer-Server für P2P-Fallback installieren.

# 1. Server-Abhängigkeiten installieren
npm install

# 2. (Optional) Peer-Server für P2P-Fallback installieren
cd peerjs
npm install
cd ..

4.3 Zugriff auf die Anwendung

http://ihre-server-ip:5008

Der Server läuft standardmäßig auf Port 5008. Verbindung vom lokalen Netzwerk. Das PeerServer für P2P-Videoanrufe verwendet Port 5009.

4.4 Server starten

# Entwicklung
npm run dev        # wenn in package.json definiert

# Produktion
NODE_ENV=production npm start
# oder: node server.js

5. Konfiguration

Laufzeiteinstellungen in config.json

XteVision liuft Laufzeiteinstellungen aus config.json im Projektverzeichnis. Passen Sie diese für Ihre Bereitstellung an, bevor Sie den Server starten.

5.1 Wichtige Abschnitte

AbschnittInstellungen
serverHTTP-Port, PeerJS-Port/Pfad, Datei-Pfade, Cookie-Einstellungen, Größenbegrenzungen, CSP-Quellen
aiKI-Benutzeridentität, Standard-Engine und Engine-spezifische Host/Port/Pfad/Modell-Einstellungen
clientP2P-Signalisierungseinstellungen und standardmäßige clientseitige KI-Engine

5.2 Häufige Umgebungsvariablen

VariableBeschreibung
PORTHTTP-Server-Port (Standard 5008)
AI_BASE_URLBasis-URL des lokalen/remote KI-Service (bezugsvorzugsweise konfiguriert)
AI_API_KEYKI-Schlüssel aus Umgebungsvariablen — wird nie geloggt
AI_STREAMtrue setzen, um inkrementelle KI-Token über SSE zu erhalten
AI_LOCAL_ONLYtrue setzen, um das Weiterleiten von Inhalten an externe Dienste zu verhindern
AI_RATE_LIMITPro-Klient-Anfrage-Begrenzung zur Missbrauch prevention

6. Anwendungsstruktur

Verzeichnisstruktur und wichtige Dateien

6.1 Verzeichnisstruktur

xtevision-secuchat/
├── server.js                 # Haupt-Express-Server: Routen, SSE, Uploads, KI-Proxy
├── config.json               # Laufzeit-Konfiguration (server / ai / client)
├── data.json                 # Benutzer, Nachrichten und Kontakte (vor manuellem Bearbeiten sichern)
├── public/                   # Single-Page-Oberfläche (als statische Assets bereitgestellt)
├── uploads/                  # Anhänge & Avatare (Grenzen serverseitig durchgesetzt)
├── peerjs/                   # Optional lokales PeerServer für P2P-Fallback
└── package.json              # Abhängigkeiten & Skripte

6.2 Wichtige Dateien

DateiZweck
server.jsHaupt-Express-Server — alle API-Routen, SSE, Uploads, KI-Proxy, statische Bereitstellung
config.jsonLaufzeit-Konfiguration für server, ai und client
data.jsonPersistierte Benutzer, Nachrichten und Kontakte — vor manuellem Bearbeiten sichern
public/Single-Page-Client-Oberfläche, statische Bereitstellung
uploads/Anhänge und Avatare (Größenbegrenzungen serverseitig durchgesetzt)
peerjs/Optional lokales PeerServer (Port 5009) für P2P-Fallback
Daten & Uploads: Sichern Sie data.json vor manuellem Bearbeiten. Stellen Sie sicher, dass der Server-Prozess in uploads/ schreiben kann. Übergrößte Uploads werden serverseitig abgelehnt.

7. Server-Endpunkte

API-Routen und ihr Zweck

7.1 Endpunkte-Übersicht

Kategorie Methode & PfadZweck
AuthPOST /api/registerKonto erstellen
AuthPOST /api/loginSitzierung obtain
KontaktePOST /api/contacts/requestKontakt-Anfrage senden
KontaktePOST /api/contacts/acceptKontakt-Anfrage annehmen
NachrichtenPOST /api/messagesNachricht senden (multipart für Anhänge)
NachrichtenGET /api/messages/:conversationIdNachrichten auflisten
SSEGET /sseZu SSE-Ereignisse abonnieren (Präsenz, Nachrichten)
UploadsPOST /api/uploadsDateien hochladen (Anhänge & Avatare)

7.2 KI-Endpunkte

Optional — erfordern ein konfiguriertes KI-Service. Siehe Server-Code für exakte Parameternamen und Antwortformate.

Methode & PfadZweck
POST /api/ai/chatKonversationeller Assistent. Akzeptiert { messages: [{ role, content }], model? }. Unterstützt Streaming mit Accept: text/event-stream (SSE).
POST /api/ai/translateNachricht übersetzen (KI-Service erforderlich)
POST /api/ai/summarizeNachricht zusammenfassen
POST /api/ai/embeddingsEmbeddings für ein Array von Texten erzeugen; liefert Embeddings-Array
POST /api/ai/moderateInhaltsicherheit prüfen (optional)

8. KI-Integration

Lokal firstes, optionales KI-Helfer-System

8.1 Kürzer Leitfaden

  • Lokal firstes: Wenn ein lokales KI-Service (AI_BASE_URL) verfügbar ist, wird es bevorzugt; Anfragen werden mit Modell + Schlüssel weitergeleitet.
  • Streaming: AI_STREAM=true setzen und mit Accept: text/event-stream anfragen, um inkrementelle KI-Token (SSE) zu erhalten.
  • Embeddings: /api/ai/embeddings für Vektor-Reäsentationen für Suche oder Clustering verwenden; Batching durch AI_BATCH_EMBEDDINGS gesteuert.
  • Datenschutz: AI_LOCAL_ONLY=true setzen, um das Weiterleiten von Inhalten an externe Dienste zu verhindern. Schlüssel aus Umgebungsvariablen gelesen und nicht geloggt.

8.2 Beispiele

Chat (nicht-streamend):

curl -s -X POST http://localhost:5008/api/ai/chat \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"Fasse diese Nachricht zusammen: ..."}]}

Chat (Streaming SSE):

curl -N -X POST http://localhost:5008/api/ai/chat \
  -H "Content-Type: application/json" \
  -H "Accept: text/event-stream" \
  -d '{"messages":[{"role":"user","content":"Sage mir über XteVision ein Jahr."}], "model":"gpt-4o-mini"}

Embeddings:

curl -s -X POST http://localhost:5008/api/ai/embeddings \
  -H "Content-Type: application/json" \
  -d '{"texts":["Hallo","Welt"]}

9. Sicherheit & Datenschutz

Header, Schlüssel und Datenschutz-Kontrollen

9.1 Serverseitige Sicherheit

  • Passwortverschlüsselung: Gesalzene scrypt — keine Klartext-Passwörter gespeichert
  • Content Security Policy: CSP und übliche Sicherheits-Header werden vom Server gesetzt
  • Upload-Grenzen: Serverseitig durchgesetzt — übergrößte Uploads werden abgelehnt
  • Keine Auth für LAN: Der Server ist für lokales LAN-Nutzung ausgelegt; HTTPS + Reverse-Proxy für Remote-Zugriff hinzufügen

9.2 KI-Datenschutz

  • KI-Schlüssel (AI_API_KEY) bleiben in der Server-Umgebung und werden wie Geheimnisse behandelt — der Server loggt sie nicht.
  • Wenn AI_BASE_URL auf einen externen Dienst zeigt, werden Inhalte an diesen Dienst weitergeleitet — AI_LOCAL_ONLY für datenschutzbewusste setups aktivieren.
  • Rate-Limiting (AI_RATE_LIMIT) hilft, Missbrauch und unerwartete Kosten zu vermeiden.
Empfehlung: Für Remote-Zugriff hinter einen Reverse-Proxy (nginx) mit HTTPS betreiben. Für LAN-only-Nutzung reicht die Anbindung an eine private Oberfläche aus.

10. Fehlerbehebung

Häufige Probleme und Lösungen

10.1 Server & Port

  • Problem: Port-Konflikt
  • Lösung: Stellen Sie sicher, dass PORT frei ist, oder ändern Sie ihn über eine Umgebungsvariable.

10.2 Uploads

  • Problem: Upload-Fehler
  • Lösung: Prüfen Sie die Schreibrechte im Verzeichnis uploads/.

10.3 Videoanrufe

  • Problem: Peer-Verbindungen schlagen fehl
  • Lösung: Stellen Sie sicher, dass PeerServer läuft und von Clients erreichbar ist; prüfen Sie die Browser-Konsole auf WebRTC-Fehler.

10.4 KI-Anfragen

  • Problem: KI-Anfragen schlagen fehl
  • Lösung: Prüfen Sie AI_BASE_URL, AI_API_KEY und Modell-Namen; überprüfen Sie die Rate-Limits und setzen Sie AI_STREAM_TIMEOUT entsprechend. Wenn ein lokales KI-Service verwendet wird, stellen Sie sicher, dass es gesund und erreichbar ist.