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:
co-authored by
Claude Opus 5
parent
7973dc07b1
commit
59080019d2
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user