docs: Umlaute auch im erklaerenden Text der Codebloecke

Der Dateibaum im README und in 05/08, die Kommentare hinter # in den
Beispielbefehlen und die Beschriftungen in Mermaid-Sequenzdiagrammen sind
Lesetext, stehen aber in Codeblöcken - die erste Runde hat sie deshalb
übersprungen.

Die Befehle selbst und alle Bezeichner bleiben unverändert: ersetzt wurde
nur hinter "# ", hinter den zwei Leerzeichen des Dateibaums und hinter
": " in Mermaid-Nachrichten. ER-Labels wie bewertet_fuer sind Bezeichner
und bleiben, "systemctl daemon-reload" ebenfalls.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sascha Wolf
2026-08-11 09:48:11 +02:00
co-authored by Claude Opus 5
parent 7973dc07b1
commit 59080019d2
7 changed files with 33 additions and 33 deletions
+15 -15
View File
@@ -104,17 +104,17 @@ src/
lib/api.ts Fetch-Wrapper + typisierte Endpunkte lib/api.ts Fetch-Wrapper + typisierte Endpunkte
lib/auth.tsx Auth-Context (JWT im localStorage) lib/auth.tsx Auth-Context (JWT im localStorage)
lib/theme.tsx Theme-Context (hell/dunkel/System) lib/theme.tsx Theme-Context (hell/dunkel/System)
lib/navigation.tsx Ansichtswechsel fuer tief liegende Komponenten lib/navigation.tsx Ansichtswechsel für tief liegende Komponenten
lib/whisper.tsx Modelleinstellungen, Worker-Lebenszyklus, Zustand lib/whisper.tsx Modelleinstellungen, Worker-Lebenszyklus, Zustand
lib/whisper.worker.ts Whisper im Web Worker (Laden und Erkennen) lib/whisper.worker.ts Whisper im Web Worker (Laden und Erkennen)
lib/audio.ts Aufnahme zu 16-kHz-Mono-PCM lib/audio.ts Aufnahme zu 16-kHz-Mono-PCM
lib/dictation.tsx Aufnahme-Hook (Mikrofon, Dauer, Abbruch) lib/dictation.tsx Aufnahme-Hook (Mikrofon, Dauer, Abbruch)
lib/imageCompress.ts Bilder im Browser auf 256 px verkleinern lib/imageCompress.ts Bilder im Browser auf 256 px verkleinern
components/ components/
Sidebar.tsx Menue links (Opportunities, Kalender, Kontakte, Sidebar.tsx Menü links (Opportunities, Kalender, Kontakte,
Scanner mit aufklappbaren Unterpunkten); Scanner mit aufklappbaren Unterpunkten);
unten Whisper (alle) und Einstellungen (admin only) unten Whisper (alle) und Einstellungen (admin only)
Header.tsx Titel, Menue-Toggle, Umschalter fuer den Dark Mode Header.tsx Titel, Menü-Toggle, Umschalter für den Dark Mode
Toast.tsx, LoginScreen.tsx Toast.tsx, LoginScreen.tsx
ui/Modal.tsx Modal + Bestaetigungsdialog ui/Modal.tsx Modal + Bestaetigungsdialog
ui/UserAvatar.tsx Benutzerfoto, sonst Initiale auf der Benutzerfarbe ui/UserAvatar.tsx Benutzerfoto, sonst Initiale auf der Benutzerfarbe
@@ -130,10 +130,10 @@ src/
OpportunityModal.tsx Formular inkl. Ansprechpartnern und Diktat OpportunityModal.tsx Formular inkl. Ansprechpartnern und Diktat
opportunityUi.tsx Phasenfarben, Aufklapptext, Chancenbalken opportunityUi.tsx Phasenfarben, Aufklapptext, Chancenbalken
calendar/ calendar/
Calendar.tsx Monat/Woche/Tag + Liste der naechsten Termine Calendar.tsx Monat/Woche/Tag + Liste der nächsten Termine
EventModal.tsx Terminformular inkl. Teilnehmerauswahl EventModal.tsx Terminformular inkl. Teilnehmerauswahl
EventDetailModal.tsx Leseansicht mit klickbaren @-Mentions EventDetailModal.tsx Leseansicht mit klickbaren @-Mentions
UserDetailModal.tsx Detailfenster fuer markierte Benutzer UserDetailModal.tsx Detailfenster für markierte Benutzer
mentions.tsx Mention-Parser, Renderer, @-Autocomplete mentions.tsx Mention-Parser, Renderer, @-Autocomplete
calendarUtils.ts Datums-, Raster- und Layoutlogik calendarUtils.ts Datums-, Raster- und Layoutlogik
leads/ leads/
@@ -147,12 +147,12 @@ src/
ScannerDashboard.tsx Kennzahlen, Filter, Match-Tabelle, Signalton ScannerDashboard.tsx Kennzahlen, Filter, Match-Tabelle, Signalton
ScannerRejected.tsx Reiter Unpassend (status = rejected) ScannerRejected.tsx Reiter Unpassend (status = rejected)
ScannerAgents.tsx Suchagenten inkl. CV-Upload ScannerAgents.tsx Suchagenten inkl. CV-Upload
ScannerPortals.tsx Boersen-Konten, Cookie-Import, Verbindungstest ScannerPortals.tsx Börsen-Konten, Cookie-Import, Verbindungstest
MatchDetailModal.tsx Detailfenster eines Treffers (beide Listen) MatchDetailModal.tsx Detailfenster eines Treffers (beide Listen)
scannerUi.tsx Prozent-Badge, Status-Pillen, Formatierung scannerUi.tsx Prozent-Badge, Status-Pillen, Formatierung
settings/ settings/
Settings.tsx Tabs Nutzerverwaltung / Mein Konto / Scanner Settings.tsx Tabs Nutzerverwaltung / Mein Konto / Scanner
UserManagement.tsx Benutzer anlegen, bearbeiten, loeschen UserManagement.tsx Benutzer anlegen, bearbeiten, löschen
ScannerSettings.tsx Alle Einstellungen des Projekt Scanners ScannerSettings.tsx Alle Einstellungen des Projekt Scanners
ColorPicker.tsx Auswahl der persoenlichen Kalenderfarbe ColorPicker.tsx Auswahl der persoenlichen Kalenderfarbe
lib/scannerApi.ts Typisierte Endpunkte unter /api/scanner lib/scannerApi.ts Typisierte Endpunkte unter /api/scanner
@@ -160,8 +160,8 @@ server/
src/server.js Express-App src/server.js Express-App
src/db.js Pool + Schema-Init + Admin-Seed src/db.js Pool + Schema-Init + Admin-Seed
src/schema.sql Idempotentes Schema src/schema.sql Idempotentes Schema
src/middleware/auth.js JWT-Pruefung, Admin-Guard src/middleware/auth.js JWT-Prüfung, Admin-Guard
src/userFields.js Pruefung von Farbe und Foto (von auth und users genutzt) src/userFields.js Prüfung von Farbe und Foto (von auth und users genutzt)
src/routes/ auth, users, leads, connections, events, opportunities, src/routes/ auth, users, leads, connections, events, opportunities,
scanner scanner
src/scanner/ Portierter Projekt Scanner: Sequelize-Modelle, src/scanner/ Portierter Projekt Scanner: Sequelize-Modelle,
@@ -313,8 +313,8 @@ ausschließlich in `perinco_scanner`:
cd /var/www/perinco_CRM/server cd /var/www/perinco_CRM/server
npm run scanner:import -- --dry-run # nur anzeigen npm run scanner:import -- --dry-run # nur anzeigen
npm run scanner:import # Einstellungen, Portale, Agenten + CVs npm run scanner:import # Einstellungen, Portale, Agenten + CVs
npm run scanner:import -- --with-matches # zusaetzlich Projekte und Treffer npm run scanner:import -- --with-matches # zusätzlich Projekte und Treffer
npm run scanner:import -- --force # vorhandene Zieldaten vorher loeschen npm run scanner:import -- --force # vorhandene Zieldaten vorher löschen
``` ```
Quelle kommt aus `LEGACY_*` in `server/.env`: Quelle kommt aus `LEGACY_*` in `server/.env`:
@@ -581,8 +581,8 @@ der Server hat wenig freien RAM und volles Swap.
```powershell ```powershell
npm run build npm run build
powershell -File deploy/deploy.ps1 # laedt dist/ und server/src hoch powershell -File deploy/deploy.ps1 # lädt dist/ und server/src hoch
powershell -File deploy/deploy.ps1 -Deps # zusaetzlich npm install auf dem Server powershell -File deploy/deploy.ps1 -Deps # zusätzlich npm install auf dem Server
``` ```
Ein Rollout mit neuen Backend-Paketen braucht `-Deps`. Ein Rollout mit neuen Backend-Paketen braucht `-Deps`.
@@ -590,11 +590,11 @@ Ein Rollout mit neuen Backend-Paketen braucht `-Deps`.
### Einmalige Scanner-Einrichtung (am 06.08.2026 erledigt) ### Einmalige Scanner-Einrichtung (am 06.08.2026 erledigt)
```bash ```bash
# 1. .env ergaenzen: erzeugt SCANNER_ENCRYPTION_KEY, holt die LEGACY_*-Werte # 1. .env ergänzen: erzeugt SCANNER_ENCRYPTION_KEY, holt die LEGACY_*-Werte
# aus "/var/www/Projekt Scanner/backend/.env", legt vorher ein .env.bak an # aus "/var/www/Projekt Scanner/backend/.env", legt vorher ein .env.bak an
bash /tmp/scanner-setup.sh # aus deploy/scanner-setup.sh bash /tmp/scanner-setup.sh # aus deploy/scanner-setup.sh
# 2. Bestand uebernehmen # 2. Bestand übernehmen
cd /var/www/perinco_CRM/server cd /var/www/perinco_CRM/server
npm run scanner:import -- --dry-run npm run scanner:import -- --dry-run
npm run scanner:import -- --with-matches npm run scanner:import -- --with-matches
+2 -2
View File
@@ -16,8 +16,8 @@ sequenceDiagram
participant AI as OpenAI gpt-4o-mini participant AI as OpenAI gpt-4o-mini
participant M as SMTP participant M as SMTP
C->>P: faellig? (Intervall, Mo-Fr, 07-22 Uhr, Sperrfrist) C->>P: fällig? (Intervall, Mo-Fr, 07-22 Uhr, Sperrfrist)
P->>P: laeuft schon einer? dann abbrechen P->>P: läuft schon einer? dann abbrechen
P->>DB: aktive Agenten laden P->>DB: aktive Agenten laden
P->>P: Keywords aller Agenten zusammenfuehren P->>P: Keywords aller Agenten zusammenfuehren
P->>DB: Portal-Sessions laden P->>DB: Portal-Sessions laden
+1 -1
View File
@@ -34,7 +34,7 @@ stateDiagram-v2
[*] --> idle : Anmeldung [*] --> idle : Anmeldung
idle --> loading : "Sprachmodell laden" oder<br/>automatisch, wenn schon im Cache idle --> loading : "Sprachmodell laden" oder<br/>automatisch, wenn schon im Cache
loading --> ready : im Worker initialisiert loading --> ready : im Worker initialisiert
loading --> error : Abbruch, Haenger, kein Speicher loading --> error : Abbruch, Hänger, kein Speicher
error --> loading : erneut versuchen error --> loading : erneut versuchen
ready --> idle : "Sprachmodell löschen" ready --> idle : "Sprachmodell löschen"
ready --> ready : Diktat benutzen ready --> ready : Diktat benutzen
+4 -4
View File
@@ -105,20 +105,20 @@ src/
mailApi.ts Endpunkte unter /api/mail, UTC-Datumshelfer mailApi.ts Endpunkte unter /api/mail, UTC-Datumshelfer
auth.tsx Anmeldung, Benutzer, Rolle auth.tsx Anmeldung, Benutzer, Rolle
theme.tsx Hell/Dunkel/System theme.tsx Hell/Dunkel/System
navigation.tsx Ansichtswechsel fuer tiefe Komponenten navigation.tsx Ansichtswechsel für tiefe Komponenten
whisper.tsx Modell, Worker-Lebenszyklus whisper.tsx Modell, Worker-Lebenszyklus
dictation.tsx Aufnahme-Hook dictation.tsx Aufnahme-Hook
audio.ts Aufnahme zu 16-kHz-Mono-PCM audio.ts Aufnahme zu 16-kHz-Mono-PCM
imageCompress.ts Bilder vor dem Upload verkleinern imageCompress.ts Bilder vor dem Upload verkleinern
components/ components/
Sidebar.tsx Menue inkl. aufklappbarer Gruppen (Kontakte, Scanner) Sidebar.tsx Menü inkl. aufklappbarer Gruppen (Kontakte, Scanner)
Header.tsx Titel, Untertitel, Dark-Mode-Schalter Header.tsx Titel, Untertitel, Dark-Mode-Schalter
opportunities/ Kachel, Liste, Pipeline (Drag & Drop), Formular opportunities/ Kachel, Liste, Pipeline (Drag & Drop), Formular
calendar/ Monat/Woche/Tag, Termine (Drag & Drop), @-Mentions calendar/ Monat/Woche/Tag, Termine (Drag & Drop), @-Mentions
leads/ Kachel, Liste, Netzwerkdiagramm (d3-force), leads/ Kachel, Liste, Netzwerkdiagramm (d3-force),
Vorbereich "Aus Mails" mit Dublettenabgleich Vorbereich "Aus Mails" mit Dublettenabgleich
mail/ Postfachliste, Detail, Zuordnung, Kontakt-Vorschlaege mail/ Postfachliste, Detail, Zuordnung, Kontakt-Vorschläge
scanner/ Dashboard, Unpassend, Suchagenten, Boersen-Konten scanner/ Dashboard, Unpassend, Suchagenten, Börsen-Konten
settings/ Reiter: Nutzerverwaltung, Konto, Postfach, Scanner, Whisper settings/ Reiter: Nutzerverwaltung, Konto, Postfach, Scanner, Whisper
whisper/ Einrichtung der Spracherkennung whisper/ Einrichtung der Spracherkennung
ui/ Modal, Avatare, Diktatfeld ui/ Modal, Avatare, Diktatfeld
+2 -2
View File
@@ -20,7 +20,7 @@ flowchart LR
```powershell ```powershell
npm run build npm run build
powershell -File deploy/deploy.ps1 # dist + Backend powershell -File deploy/deploy.ps1 # dist + Backend
powershell -File deploy/deploy.ps1 -Deps # zusaetzlich npm install powershell -File deploy/deploy.ps1 -Deps # zusätzlich npm install
powershell -File deploy/deploy.ps1 -SkipBuild # ohne neuen Build powershell -File deploy/deploy.ps1 -SkipBuild # ohne neuen Build
``` ```
@@ -95,7 +95,7 @@ cd /var/www/perinco_CRM/server && npx playwright install chromium
## Erststart des Scanners ## Erststart des Scanners
```bash ```bash
bash /var/www/perinco_CRM/deploy/scanner-setup.sh # .env ergaenzen, Schluessel erzeugen bash /var/www/perinco_CRM/deploy/scanner-setup.sh # .env ergänzen, Schlüssel erzeugen
cd /var/www/perinco_CRM/server cd /var/www/perinco_CRM/server
npm run scanner:import -- --dry-run npm run scanner:import -- --dry-run
npm run scanner:import -- --with-matches npm run scanner:import -- --with-matches
+5 -5
View File
@@ -53,7 +53,7 @@ ansehen - siehe *Oberfläche prüfen ohne Datenbank* weiter unten.
```bash ```bash
npm run lint # = tsc --noEmit, das ist die Wahrheit npm run lint # = tsc --noEmit, das ist die Wahrheit
npm run build # muss ohne Fehler durchlaufen npm run build # muss ohne Fehler durchlaufen
cd server && npm test # Pruefungen der Postfachanbindung cd server && npm test # Prüfungen der Postfachanbindung
``` ```
Automatische Tests gibt es nur für **einen** Bereich: `server/test/mail.test.mjs` Automatische Tests gibt es nur für **einen** Bereich: `server/test/mail.test.mjs`
@@ -79,8 +79,8 @@ server/src/ Backend
db.js Verbindungspool, Schema-Init, Admin-Seed db.js Verbindungspool, Schema-Init, Admin-Seed
settings.js crm_settings lesen und schreiben (ohne Geheimnisse) settings.js crm_settings lesen und schreiben (ohne Geheimnisse)
routes/ ein Router je Ressource routes/ ein Router je Ressource
middleware/auth.js JWT pruefen, Adminrechte middleware/auth.js JWT prüfen, Adminrechte
mail/ Postfach crm@perinco.de ueber Microsoft Graph mail/ Postfach crm@perinco.de über Microsoft Graph
scanner/ portierter Projekt Scanner (Sequelize, Playwright, OpenAI) scanner/ portierter Projekt Scanner (Sequelize, Playwright, OpenAI)
docs/ diese Dokumentation docs/ diese Dokumentation
deploy/ Apache-Vhosts, systemd-Unit, Deployskript deploy/ Apache-Vhosts, systemd-Unit, Deployskript
@@ -98,12 +98,12 @@ sequenceDiagram
participant D as MariaDB participant D as MariaDB
K->>A: leadsApi.update(7, { status: 'Gewonnen' }) K->>A: leadsApi.update(7, { status: 'Gewonnen' })
A->>A: Token anhaengen, Content-Type setzen A->>A: Token anhängen, Content-Type setzen
A->>E: PATCH /api/leads/7 A->>E: PATCH /api/leads/7
E->>M: requireAuth E->>M: requireAuth
M->>D: Benutzer laden, aktiv? M->>D: Benutzer laden, aktiv?
M->>R: req.user gesetzt M->>R: req.user gesetzt
R->>R: Eingaben pruefen und normalisieren R->>R: Eingaben prüfen und normalisieren
R->>D: UPDATE ... ; SELECT (angereichert) R->>D: UPDATE ... ; SELECT (angereichert)
R-->>A: 200 JSON R-->>A: 200 JSON
A-->>K: typisiertes Objekt A-->>K: typisiertes Objekt
+4 -4
View File
@@ -114,7 +114,7 @@ sequenceDiagram
participant D as MariaDB participant D as MariaDB
S->>D: last_run_at, has_more S->>D: last_run_at, has_more
Note over S: faellig? sonst nichts tun Note over S: fällig? sonst nichts tun
S->>Y: runMailSync() S->>Y: runMailSync()
Y->>D: delta_link lesen Y->>D: delta_link lesen
alt erster Lauf alt erster Lauf
@@ -125,15 +125,15 @@ sequenceDiagram
G-->>Y: Seite mit Metadaten + nextLink/deltaLink G-->>Y: Seite mit Metadaten + nextLink/deltaLink
loop je Nachricht loop je Nachricht
Y->>D: bekannt? Text vorhanden? Y->>D: bekannt? Text vorhanden?
Note over Y: unbekannt und aelter als die Grenze? dann weiter Note over Y: unbekannt und älter als die Grenze? dann weiter
opt Text fehlt opt Text fehlt
Y->>G: /messages/{id}?$select=body Y->>G: /messages/{id}?$select=body
end end
Y->>D: upsert crm_mail_messages Y->>D: upsert crm_mail_messages
opt neue Mail opt neue Mail
Y->>D: Kontakt-Vorschlaege anlegen Y->>D: Kontakt-Vorschläge anlegen
opt gesichert und Automatik an opt gesichert und Automatik an
Y->>D: Kontakt anlegen bzw. ergaenzen Y->>D: Kontakt anlegen bzw. ergänzen
end end
end end
end end