From 98bce1b0da675715b2e5482c0ad61ba21135f62f Mon Sep 17 00:00:00 2001
From: Server-Bibliothek <server-bibliothek@lokal>
Date: Di, 04 Aug 2026 07:00:04 +0200
Subject: [PATCH] Add a desktop client that knows what is installed locally

---
 README.md |  211 ++++++++++++++++++++++++++++------------------------
 1 files changed, 112 insertions(+), 99 deletions(-)

diff --git a/README.md b/README.md
index 7d74d6d..f78e87f 100644
--- a/README.md
+++ b/README.md
@@ -1,127 +1,140 @@
-# Server-Bibliothek – Prototyp
+# Software-Bibliothek
 
-> **Für eine technische Übergabe (z. B. Git-Repository):** Diese Datei ist
-> die Bedienungsanleitung. Die technische Architektur (Datenbankschema,
-> Kernkonzepte, bekannte Grenzen) steht in `ARCHITEKTUR.md`, die
-> Entwicklungshistorie in `CHANGELOG.md`.
+Zentrale Softwareverteilung für den Betrieb: Ein Server hält Installer und interne
+Werkzeuge auf dem aktuellsten Stand, alle anderen laden sie über den Browser herunter.
 
-Ein einfaches internes Web-Tool für euren Windows-11-Server:
-- Katalog aller Software-Tools mit Version, Installer-Pfad und Dokumentation
-- Status-Anzeige: **Aktuell / Bitte prüfen / Nie geprüft** (Warnung ab 30 Tagen ohne Prüfung)
-- Protokoll: welcher Mitarbeiter hat welche Software auf welchem Rechner bekommen
+Die Bibliothek holt sich die Dateien selbst — aus GitHub-Releases, über winget, aus SVN,
+von einem Direktlink oder indem sie ein Git-Repository klont und baut. Es wird nichts von
+Hand hochgeladen, und niemand muss mehr suchen, ob eine Version noch aktuell ist.
 
-Läuft komplett lokal auf eurem Server, keine Cloud, keine Installation von Zusatzsoftware
-außer Python. Die Daten liegen in einer einzigen Datei (`data/bibliothek.db`).
+Die technische Innensicht steht in [ARCHITEKTUR.md](ARCHITEKTUR.md).
 
 ---
 
-## 1. Einmalige Einrichtung auf dem Server
+## Betrieb
 
-### Schritt 1 – Ordner kopieren
-Kopiert den kompletten Ordner `server-bibliothek` auf den Windows-11-Server,
-z. B. nach `C:\server-bibliothek`.
+### Die fertige Programmdatei
 
-### Schritt 2 – Python installieren (falls noch nicht vorhanden)
-1. Öffnet im Browser: https://www.python.org/downloads/
-2. Ladet die neueste Version für Windows herunter und startet die Installation.
-3. **Wichtig:** Auf der ersten Seite des Installers unten das Kästchen
-   **"Add python.exe to PATH"** anhaken, bevor ihr auf "Install Now" klickt.
+Der Auslieferungsstand ist eine einzelne `software-bibliothek.exe`. Sie braucht kein
+installiertes Node, keine Laufzeitumgebung und keine Installation — ablegen, starten,
+fertig. Beim ersten Start legt sie ihren Datenordner an und meldet im Fenster, wo er liegt.
 
-### Schritt 3 – Einrichtung starten
-Im Ordner `C:\server-bibliothek` die Datei **`install.bat`** doppelklicken.
-Es öffnet sich ein schwarzes Fenster, das die benötigte Bibliothek installiert.
-Am Ende steht "Fertig!" – das Fenster kann dann geschlossen werden.
-(Falls Python noch fehlt, sagt dir das Fenster das und verlinkt die Download-Seite.)
-
-## 2. Programm starten
-
-Im Ordner `C:\server-bibliothek` die Datei **`start.bat`** doppelklicken.
-
-Es öffnet sich ein Fenster mit der Meldung, dass der Server läuft.
-Dieses Fenster muss offen bleiben, solange das Tool genutzt werden soll –
-es ist quasi der "Motor", der die Web-Seite im Hintergrund am Laufen hält.
-
-Jetzt im Browser öffnen:
 ```
-http://localhost:5000
+Software-Bibliothek läuft auf http://localhost:3000
+Daten:         C:\ProgramData\Software-Bibliothek\data
+Einstellungen: C:\ProgramData\Software-Bibliothek\konfiguration.json
 ```
 
-Von **anderen Rechnern im selben Netzwerk** erreicht ihr es über die IP-Adresse
-des Servers, z. B. `http://192.168.1.50:5000` (steht auch direkt im
-Konsolenfenster von `start.bat`, in der Zeile die NICHT mit `127.0.0.1`
-beginnt).
+### Wo die Daten liegen
 
-**Klappt der Zugriff von einem anderen Rechner nicht?** Das liegt fast immer
-an der Windows-Firewall, die eingehende Verbindungen auf Port 5000
-standardmäßig blockiert. Einmalig `firewall-freigabe-einrichten.bat`
-doppelklicken – richtet die nötige Firewall-Regel automatisch ein.
+Standard ist `%ProgramData%\Software-Bibliothek` — bewusst außerhalb des Programmordners,
+damit ein Austausch der Programmdatei nichts mitreißt. Ein anderer Ort lässt sich in den
+Einstellungen hinterlegen (Zahnrad oben rechts, nur direkt am Server erreichbar).
 
-Zum Beenden: das Konsolenfenster einfach schließen (oder `STRG+C` drücken).
+| Unterordner | Inhalt |
+|---|---|
+| `files/<id>/` | Die bereitgestellten Programmdateien — das, was heruntergeladen wird |
+| `sources/<id>/` | Arbeitskopien der Git-Repositories, die selbst gebaut werden |
+| `secrets/<id>.json` | Hinterlegte API-Schlüssel; Zugriff auf SYSTEM, Administratoren und das Dienstkonto beschränkt |
+| `bibliothek.db` | Katalog und Zugriffsprotokoll (SQLite) |
+
+Für die Datensicherung genügt dieser Ordner.
+
+### Wer was darf
+
+Die Grenze verläuft an der Netzwerkschnittstelle, nicht an einer Anmeldung:
+
+- **Direkt am Server** (`localhost`) — vollständige Verwaltung: Einträge anlegen, ändern,
+  löschen, Quellen prüfen, Schlüssel hinterlegen, Einstellungen, Zugriffsprotokoll.
+- **Aus dem Netzwerk** — Katalog ansehen und herunterladen. Jede verwaltende Route
+  antwortet mit 403.
+
+Jeder Download wird protokolliert: Zeitpunkt, IP, aufgelöster Rechnername, Programm.
+
+### Aktualität
+
+Einmal täglich prüft die Bibliothek alle Quellen selbsttätig; „Alle prüfen" stößt es von
+Hand an. Liefert eine Quelle nichts Brauchbares — Seite tot, HTML statt Programmdatei,
+plötzlich winzige Datei — bleibt die zuletzt bereitgestellte Datei unangetastet und der
+Eintrag meldet das Problem. Ein kaputter Link führt nie dazu, dass ein funktionierender
+Download verschwindet.
 
 ---
 
-## 3. Bedienung
+## Entwicklung
 
-- **Software-Katalog** (Startseite): alle Tools mit Status auf einen Blick.
-  Über "+ Neues Tool anlegen" ein neues Tool mit Installer-Pfad, Silent-Parametern
-  und Doku-Text hinterlegen.
-- Auf einem Tool auf **Details** klicken → dort steht die komplette Anleitung,
-  außerdem der Button **"Jetzt als geprüft markieren"** – das solltet ihr klicken,
-  wann immer ihr den Installer manuell aktualisiert habt. Danach zählt der
-  30-Tage-Timer wieder von vorn.
-- **Zuweisungen**: Protokolliert dort jede Installation (Mitarbeiter, Rechnername,
-  installierte Version, Datum). Über die Filterfelder lässt sich nach Mitarbeiter
-  oder Rechnername suchen.
+Node 22 oder neuer (die eingebaute SQLite-Schnittstelle wird gebraucht), npm-Workspaces.
+
+```bash
+npm install
+```
+
+Server und Oberfläche laufen getrennt:
+
+```bash
+npm run dev:server
+```
+
+```bash
+npm run dev:client
+```
+
+Der Server bedient `http://localhost:3000` und liefert dort auch die gebaute Oberfläche
+aus. Der Entwicklungsserver auf `http://localhost:5000` bringt Hot Reload mit und leitet
+`/api` an Port 3000 weiter — Änderungen an der Oberfläche sind dort sofort sichtbar, auf
+Port 3000 erst nach einem Bau.
+
+### Aufteilung
+
+| Paket | Inhalt |
+|---|---|
+| `packages/bibliothek-types` | Gemeinsame Typen — der Vertrag zwischen Server und Oberfläche |
+| `packages/bibliothek-server` | Express, SQLite, Bezugsquellen, Zugriffsgrenze |
+| `packages/bibliothek-client` | Oberfläche aus dh-components (Lit) |
+
+### Bauen
+
+```bash
+npm run build
+```
+
+```bash
+npm run build:exe
+```
+
+Der zweite Befehl erzeugt die eigenständige Programmdatei: TypeScript übersetzen, den
+Server mit esbuild bündeln, die Oberfläche als Ressourcen einbetten und beides über Nodes
+Single-Executable-Verfahren in eine `.exe` schreiben.
 
 ---
 
-## 4. Automatische Aktualisierung
+## Ein internes Werkzeug anbinden
 
-Bei jedem Tool kann beim Anlegen/Bearbeiten "Automatische Aktualisierung
-aktivieren" angehakt werden. Dann sucht das Tool selbst nach neuen Versionen
-und **ersetzt die Installer-Datei automatisch, ohne Rückfrage**. Dabei:
+Werkzeuge, die selbst gebaut werden, beschreiben ihren Bau im eigenen Repository — die
+Bibliothek muss nichts über sie wissen. Dafür liegt eine `software-bibliothek.json` im
+Wurzelverzeichnis:
 
-- wird die alte Datei vorher immer in einen Unterordner `_sicherungen`
-  kopiert (Sicherheitsnetz, falls mal etwas schiefgeht)
-- wird jeder Check protokolliert (sichtbar auf der Detailseite des Tools
-  unter "Update-Protokoll")
-- bleibt ein Tool bei "Bitte prüfen" stehen, wenn eine Prüfung fehlschlägt
-  (z. B. Server nicht erreichbar) – Fehler werden nie stillschweigend
-  übergangen
+```json
+{
+  "buildCommand": "npm install && npm run build-win",
+  "artifact": "dist/MeinWerkzeug.exe"
+}
+```
 
-Als Quelle stehen drei Möglichkeiten zur Wahl: **winget** (für die meisten
-bekannten Programme, siehe `Update-Quellen-Uebersicht.md`), **GitHub-Projekt**
-(für Open-Source-Tools) oder ein **direkter Download-Link**. Tools ohne
-Häkchen bleiben komplett unangetastet – ideal für interne oder bewusst
-fest angepinnte Software.
+Braucht der Bau einen API-Schlüssel, wird er dort deklariert und sein Wert in der
+Bibliothek hinterlegt; beim Bau steht er als Umgebungsvariable bereit. Das vollständige
+Verfahren beschreibt der Skill `build-secrets` im Repository `dh-claude-rules`.
 
-**Update jetzt manuell auslösen:**
-- Für ein einzelnes Tool: auf der Detailseite "Jetzt automatisch prüfen & aktualisieren"
-- Für alle Tools auf einmal: Button oben im Software-Katalog, oder Doppelklick auf `pruefe_updates.bat`
+Im Katalog wird als Quelle **nur die Repository-URL ohne Benutzernamen** eingetragen — die
+Kennung kommt aus den Einstellungen der Bibliothek, damit ein Kontowechsel nicht jeden
+Eintrag berührt.
 
-**Täglich automatisch im Hintergrund laufen lassen (empfohlen):**
-Einmalig `automatisierung_einrichten.bat` doppelklicken. Das richtet in der
-Windows-Aufgabenplanung einen täglichen Lauf um 03:00 Uhr nachts ein – dann
-kümmert sich das Tool von selbst darum, auch wenn niemand die Weboberfläche
-geöffnet hat. Falls eine Fehlermeldung kommt: Rechtsklick auf die Datei →
-"Als Administrator ausführen".
+---
 
-⚠� **Hinweis zum winget-Pfad:** Dieser Teil konnte in meiner Entwicklungsumgebung
-nicht direkt getestet werden, da winget nur unter Windows existiert (der
-GitHub-Pfad wurde dagegen live gegen die echte GitHub-Schnittstelle getestet).
-Probiert den winget-Weg daher am besten zuerst an einem unkritischen Tool aus,
-bevor ihr euch vollständig darauf verlasst.
+## Offen
 
-## 5. Dauerhafter Betrieb der Weboberfläche
-
-Aktuell müsst ihr `start.bat` manuell starten, wenn ihr den Katalog im Browser
-ansehen wollt – die automatische Update-Prüfung (siehe oben) läuft davon
-unabhängig auch ohne offene Weboberfläche. Falls gewünscht, kann auch die
-Weboberfläche selbst automatisch mit dem Server starten – dafür einfach
-melden, wenn ihr so weit seid.
-
-## 6. Datensicherung
-
-Alle Daten liegen in der Datei `data\bibliothek.db`. Diese Datei ab und zu zu
-sichern (z. B. in euer normales Backup einschließen) reicht als Absicherung
-gegen Datenverlust vollständig aus.
+- HTTPS; solange die Verbindung unverschlüsselt ist, bleiben dem Browser die Schnittstellen
+  für Dateizugriff verwehrt
+- Betrieb als Windows-Dienst mit Autostart
+- Automatisierte Tests
+- Rollen und Rechte (im Ticket bewusst zurückgestellt)

--
Gitblit v1.9.3