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.
Was ist XteVision SecuChat und für wen ist es gedacht?
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.
scrypt-Passwortverschlüsselunguploads/5009)High-Level-Design und Kommunikationsablauf
┌─────────────────────────────────────────────────────────────────┐
│ 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) │
└───────────────────────────────────────────────────────────────────┘5009), dann fließt das Medien-Peer-to-PeerXteVision SecuChat ist für selbst gehosteten, LAN-firsten Betrieb konzipiert:
Frontend, Backend und Infrastrukturtechnologien
| Ebene | Technologie | Zweck |
|---|---|---|
| Laufzeit | Node.js (≥ 16) | Server-Laufzeit |
| Server | Express.js | HTTP-Server + API-Routen |
| Auth | crypto.scrypt | Gesalzene Passwortverschlüsselung |
| Echtzeit | SSE (Server-Sent Events) | Präsenz & Nachrichten-Ereignisse |
| Speicher | data.json | Benutzer, Nachrichten, Kontakte |
| Datei-Uploads | multer → uploads/ | Anhänge & Avatare |
| P2P-Signalisierung | PeerJS + PeerServer | Videoanrufe-Signalisierung (Port 5009) |
| KI-Backend | LLM-kompatible API | Chat, Übersetzung, Zusammenfassung, Embeddings, Moderation |
| Frontend | Vanilla HTML/CSS/JS | Single-Page-Client, aus public/ bereitgestellt |
XteVision SecuChat auf Ihrem Server starten
peerjs/)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 ..
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.
# Entwicklung
npm run dev # wenn in package.json definiert
# Produktion
NODE_ENV=production npm start
# oder: node server.js
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.
| Abschnitt | Instellungen |
|---|---|
| server | HTTP-Port, PeerJS-Port/Pfad, Datei-Pfade, Cookie-Einstellungen, Größenbegrenzungen, CSP-Quellen |
| ai | KI-Benutzeridentität, Standard-Engine und Engine-spezifische Host/Port/Pfad/Modell-Einstellungen |
| client | P2P-Signalisierungseinstellungen und standardmäßige clientseitige KI-Engine |
| Variable | Beschreibung |
|---|---|
| PORT | HTTP-Server-Port (Standard 5008) |
| AI_BASE_URL | Basis-URL des lokalen/remote KI-Service (bezugsvorzugsweise konfiguriert) |
| AI_API_KEY | KI-Schlüssel aus Umgebungsvariablen — wird nie geloggt |
| AI_STREAM | true setzen, um inkrementelle KI-Token über SSE zu erhalten |
| AI_LOCAL_ONLY | true setzen, um das Weiterleiten von Inhalten an externe Dienste zu verhindern |
| AI_RATE_LIMIT | Pro-Klient-Anfrage-Begrenzung zur Missbrauch prevention |
Verzeichnisstruktur und wichtige Dateien
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
| Datei | Zweck |
|---|---|
| server.js | Haupt-Express-Server — alle API-Routen, SSE, Uploads, KI-Proxy, statische Bereitstellung |
| config.json | Laufzeit-Konfiguration für server, ai und client |
| data.json | Persistierte 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 |
data.json vor manuellem Bearbeiten. Stellen Sie sicher, dass der Server-Prozess in uploads/ schreiben kann. Übergrößte Uploads werden serverseitig abgelehnt.API-Routen und ihr Zweck
| Kategorie | Methode & Pfad | Zweck |
|---|---|---|
| Auth | POST /api/register | Konto erstellen |
| Auth | POST /api/login | Sitzierung obtain |
| Kontakte | POST /api/contacts/request | Kontakt-Anfrage senden |
| Kontakte | POST /api/contacts/accept | Kontakt-Anfrage annehmen |
| Nachrichten | POST /api/messages | Nachricht senden (multipart für Anhänge) |
| Nachrichten | GET /api/messages/:conversationId | Nachrichten auflisten |
| SSE | GET /sse | Zu SSE-Ereignisse abonnieren (Präsenz, Nachrichten) |
| Uploads | POST /api/uploads | Dateien hochladen (Anhänge & Avatare) |
Optional — erfordern ein konfiguriertes KI-Service. Siehe Server-Code für exakte Parameternamen und Antwortformate.
| Methode & Pfad | Zweck |
|---|---|
POST /api/ai/chat | Konversationeller Assistent. Akzeptiert { messages: [{ role, content }], model? }. Unterstützt Streaming mit Accept: text/event-stream (SSE). |
POST /api/ai/translate | Nachricht übersetzen (KI-Service erforderlich) |
POST /api/ai/summarize | Nachricht zusammenfassen |
POST /api/ai/embeddings | Embeddings für ein Array von Texten erzeugen; liefert Embeddings-Array |
POST /api/ai/moderate | Inhaltsicherheit prüfen (optional) |
Lokal firstes, optionales KI-Helfer-System
AI_BASE_URL) verfügbar ist, wird es bevorzugt; Anfragen werden mit Modell + Schlüssel weitergeleitet.AI_STREAM=true setzen und mit Accept: text/event-stream anfragen, um inkrementelle KI-Token (SSE) zu erhalten./api/ai/embeddings für Vektor-Reäsentationen für Suche oder Clustering verwenden; Batching durch AI_BATCH_EMBEDDINGS gesteuert.AI_LOCAL_ONLY=true setzen, um das Weiterleiten von Inhalten an externe Dienste zu verhindern. Schlüssel aus Umgebungsvariablen gelesen und nicht geloggt.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"]}
Header, Schlüssel und Datenschutz-Kontrollen
scrypt — keine Klartext-Passwörter gespeichertAI_API_KEY) bleiben in der Server-Umgebung und werden wie Geheimnisse behandelt — der Server loggt sie nicht.AI_BASE_URL auf einen externen Dienst zeigt, werden Inhalte an diesen Dienst weitergeleitet — AI_LOCAL_ONLY für datenschutzbewusste setups aktivieren.AI_RATE_LIMIT) hilft, Missbrauch und unerwartete Kosten zu vermeiden.Häufige Probleme und Lösungen
PORT frei ist, oder ändern Sie ihn über eine Umgebungsvariable.uploads/.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.