Files
perinco-CRM/docs
Sascha WolfandClaude Opus 5 0a2cf52e8a feat(kontakte): Zustaendigkeit, LinkedIn-Foto, Netzwerkauswahl
Drei Verbesserungen an den Kontakten:

* Beim Anlegen ist der angemeldete Benutzer voreingestellt zustaendig.
  Bisher stand dort der erste Benutzer der Liste - fast immer falsch.
* Wird eine LinkedIn-Adresse hinterlegt, holt das CRM das oeffentliche
  Profilfoto und setzt es als Kontaktfoto: beim Verlassen des Feldes
  einmal je Adresse, solange kein Foto gesetzt ist, und auf Klick ueber
  den Knopf daneben. Der Abruf laeuft ueber das Backend
  (server/src/linkedinPhoto.js, POST /api/leads/linkedin-photo), weil
  ihn die Same-Origin-Policy im Browser verhindert. Gelesen wird die
  Open-Graph-Vorschau der Profilseite; Herkunft, Groesse und Antwortzeit
  des Bildes werden geprueft, Platzhalter-Silhouetten abgewiesen.
  Schlaegt der Abruf fehl, steht der Grund unter dem Feld.
* In der Netzwerkansicht hebt ein Klick auf freie Flaeche die Auswahl
  auf - das Diagramm sieht danach aus wie beim Wechsel in die Ansicht.
  Ein Ziehen des Hintergrunds (ab 4 px) laesst die Auswahl stehen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 23:25:37 +02:00
..

Dokumentation perinco CRM

Technische Dokumentation mit Funktionszeichnungen. Die Diagramme sind Mermaid und werden von Gitea direkt gerendert.

Neu hier? Wer die Anwendung benutzen will, fängt bei 07 Anleitung für Benutzer an. Wer daran entwickeln will, bei 08 Anleitung für Entwickler. Beide setzen keine Vorkenntnisse voraus.

Kapitel Inhalt
01 Architektur Topologie, Prozesse, Ports, Anfrageweg, Rollen
02 Datenmodell Tabellen beider Datenbanken als ER-Diagramme
03 Projekt Scanner Suchlauf von der Börse bis zum Treffer, Rückbau der alten App
04 Diktat Spracherkennung im Browser, Modell-Lebenszyklus
05 Frontend Ansichten, Menü, Komponentenkarte, Zustand
06 Betrieb Deployment, Umgebungsvariablen, Dienste, Störungssuche
07 Anleitung für Benutzer Bedienung aller Bereiche, Schritt für Schritt
08 Anleitung für Entwickler Einrichten, erweitern, bekannte Fallen
09 Quellcode-Referenz jede Datei, ihre Exporte und Zusagen
10 Glossar Agent, Match, Lead, Opportunity, Status- und Portalwerte
11 Postfachanbindung crm@perinco.de über Microsoft Graph, Kontakte aus Mails

Die Designentscheidungen und die Messwerte zur Spracherkennung stehen im README des Projekts.

Das Ganze in einem Bild

flowchart TB
    subgraph Browser
        SPA["React-SPA<br/>Vite-Build"]
        WSP["Whisper im Web Worker<br/>WebGPU / WASM"]
    end

    subgraph Server["Server 212.227.135.41"]
        AP["Apache<br/>:443"]
        API["Express-Backend<br/>127.0.0.1:5006"]
        SCH["Scanner-Scheduler<br/>node-cron"]
        MSCH["Mail-Scheduler<br/>node-cron"]
        PW["Playwright<br/>Chromium"]
        DB1[("MariaDB<br/>perinco_CRM")]
        DB2[("MariaDB<br/>perinco_scanner")]
    end

    OAI["OpenAI<br/>gpt-4o-mini"]
    BOERSE["Projektbörsen<br/>freelancermap, hays, ..."]
    GRAPH["Microsoft Graph<br/>crm@perinco.de"]

    SPA -->|"HTTPS /api"| AP
    AP --> API
    API --> DB1
    API --> DB2
    SCH --> PW
    PW --> BOERSE
    SCH --> OAI
    SCH --> DB2
    API -.-> SCH
    API -.-> MSCH
    MSCH -->|"Delta Query, nur lesend"| GRAPH
    MSCH --> DB1
    SPA -.->|"Audio bleibt im Browser"| WSP

Die ursprüngliche Scanner-App unter scanner.perinco.de ist am 09.09.2026 zurückgebaut worden; das CRM ist seither die einzige Instanz.