55 Commits
Author SHA1 Message Date
schakal00783andClaude Opus 5.5 371512a47d feat(scanner): Alarm erst ab Mindest-Quote je Suchagent
Neues Feld alarm_min_score (0-100 %): Alarm nur, wenn ein
Alarm-Schlagwort gefunden wurde und die Quote den Wert erreicht.
0 % = bei jedem Fund wie bisher.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 14:44:27 +02:00
schakal00783andClaude Opus 5.5 1969d0b77a feat(scanner): Ausschluss-Unternehmen je Suchagent
Neues Feld exclude_companies: steht ein Eintrag im Firmennamen der
Anzeige (z. B. "Hays"), verwirft der Agent sie. Beim Speichern werden
vorhandene Treffer dieser Firmen gelöscht (außer "in Bearbeitung").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 14:41:47 +02:00
schakal00783andClaude Opus 5.5 a24fd938a2 feat: Theme Snow aus Pulse übernommen
Eisblau auf kaltem Weiß (hell) bzw. Winternacht (dunkel), verschneite
Berg- und Waldgrafik hinter Kopfleiste und Menü. Schneefall im Canvas
(SnowWeather) sammelt sich am unteren Rand, alle 4 Minuten räumt ein
Pflug in ICON-Gold. Canvas liegt mit z-[45] unter den Dialogen (z-50).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 10:45:35 +02:00
schakal00783andClaude Opus 5.5 1e273ddd92 Scanner: Altersfenster "älter als / jünger als" (Tage)
Ersetzt die feste Auswahl bis/über 21 Tage durch zwei freie Felder,
einzeln oder kombiniert (z. B. älter 14, jünger 30). API: olderThan,
youngerThan; age=recent|old bleibt für Altaufrufe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 17:34:59 +02:00
schakal00783andClaude Opus 5.5 651ad2b954 Scanner: neue Anzeigen zuerst abfragen, Uhrzeiten korrekt anzeigen
Seit dem Wegfall der Altersgrenze lieferten BA und StepStone nur die
relevantesten Anzeigen aller Jahre - fünf Läufe lang 0 neue Treffer.
- BA: erst veroeffentlichtseit=7 (bis 200), dann ohne Grenze (bis 200)
- StepStone: sort=2 Seiten 1-2 plus Relevanz Seite 1
  (action=sort_publish hatte keine Wirkung)
- Dashboard liest DB-Zeitstempel als UTC (vorher 2 h zu früh)

Erster Lauf danach: 481 statt 298 Anzeigen, 40 neue Treffer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 17:28:04 +02:00
schakal00783andClaude Opus 5.5 0aa8f17b28 Scanner: Trefferliste per Klick auf die Spaltenüberschrift sortieren
- sort + dir serverseitig für Quote, Agent, Stelle, Unternehmen, Börse,
  Veröffentlicht, Status, Gefunden; leere Werte immer unten
- neue Spalte Veröffentlicht (Alter der Anzeige, Datum im Tooltip)
- Feld Sortierung bleibt als Schnellwahl

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 14:18:22 +02:00
schakal00783andClaude Opus 5.5 1ad774fdd2 Scanner: ohne Altersgrenze suchen, Filter Anzeigenalter, Alarm-Schlagwörter
- Suche ohne 21-Tage-Grenze (BA ohne veroeffentlichtseit, Adzuna ohne
  max_days_old); Einstellung Höchstalter entfällt
- Dashboard: Filter Anzeigenalter (bis/älter als 21 Tage), Sortierung
  älteste Anzeige, Filter nur Alarm, Zeitraum heißt jetzt Gefunden
- Suchagent: Schlagwörter mit Alarm; Treffer mit alarm = 1 melden sich
  über den AlarmWatcher (App-weit, jede Minute) mit Ton und Pop-up,
  Quittieren gilt für alle

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 13:28:29 +02:00
schakal00783andClaude Opus 5.5 b34a1968df Scanner: 0 Treffer durch Anführungszeichen in Schlagwörtern behoben
- Anführungszeichen um Begriffe beim Eingeben, Speichern und Lesen
  entfernen; der Agent vom 29.09. suchte nach "Interim" samt Zeichen
- Umlaute in Such-URLs umschreiben, karriere.at-404 = keine Treffer
- Filterleiste mit festen Breiten, bricht um statt überzulaufen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 13:19:16 +02:00
schakal00783andClaude Opus 5.5 33c9dbdb2b Suspects: Eingabezeile oben, Letzter Kontakt standardmäßig heute
- Eingabezeile über der Liste, mit Abstand und Knopf Hinzufügen;
  Liste neueste zuerst, neue Einträge erscheinen direkt darunter
- Letzter Kontakt neuer Zeilen = heute (Ortszeit), auch serverseitig,
  wenn das Feld beim Anlegen fehlt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 12:37:56 +02:00
schakal00783andClaude Opus 5.5 78d6bef52c Suspects: Spalte Mail und Löschen direkt in der Tabelle
- email als Symbol mit Adresse im Tooltip, Klick öffnet mailto:
  (Spalte per migrateColumns nachgezogen)
- Löschen-Knopf am Zeilenende; Server erlaubt Löschen jetzt auch
  ohne vorheriges Archivieren

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 12:33:32 +02:00
schakal00783andClaude Opus 5.5 6a452f1510 Suspects: Vorstufe der Leads als Tabelle
Neuer Menüpunkt über Leads mit Unterpunkt Archiv.

- Tabelle Name, Funktion, Unternehmen, LinkedIn, Website, Notiz,
  Letzter Kontakt, Nächster Impuls; leere Zeile unten, speichert beim
  Verlassen. Links als Symbol mit URL im Tooltip.
- Nächster Impuls: Tage eingeben, Erinnerung über den ReminderWatcher
- Archivieren, Zurückholen, endgültig löschen (nur aus dem Archiv)
- Lead erstellen öffnet die Lead-Karte vorbelegt (LeadModal.initial),
  danach wandert der Suspect mit lead_id ins Archiv

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 12:11:36 +02:00
schakal00783andClaude Opus 5.5 e0f6ef06cd Scanner: Jooble entfernt
Quelle, Schlüsselfeld in Einstellungen -> Scanner und Doku raus.
Agenten, die jooble noch gespeichert haben, bekommen es nicht mehr
angezeigt; die Pipeline überspringt unbekannte Quellen ohnehin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 11:24:05 +02:00
schakal00783andClaude Opus 5.5 a85daf01da Scanner: Parser nach Live-Test korrigiert
- BA-API v6: firma, stellenlokationen, datumErsteVeroeffentlichung,
  vertragsdauer; Land kommt als OESTERREICH ohne Umlaut
- StepStone: eingebettete <style>-Blöcke vor dem Auslesen entfernen
- karriere.at: Ort ohne Komma, Art nur aus passender Pille
- Firmenabgleich: GesmbH als Rechtsform

Live auf icrm.icon-experts.de getestet: 109 Anzeigen, 71 Treffer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 10:55:27 +02:00
schakal00783andClaude Opus 5.5 1b82f580db Scanner: Stellenanzeigen aus Jobbörsen (DACH, max. 21 Tage)
Neuer Menüpunkt Scanner mit Dashboard und Suchagenten, Zeitplan und
API-Schlüssel unter Einstellungen -> Scanner.

- Quellen: Agentur für Arbeit (API), StepStone, karriere.at,
  freelancermap (HTML) sowie Adzuna und Jooble (kostenlose Schlüssel)
- Quote = gefundene Schlagwörter, Titel zählt doppelt; keine KI
- Abgleich mit icon_companies, bekannte Firmen oben mit Abzeichen
- Zeitplan Vorgabe stündlich Mo-Fr 06-20 Uhr, einstellbar
- Sperre gegen parallele Läufe wie im perinco-Scanner

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 10:49:44 +02:00
schakal00783andClaude Opus 5.5 6fe5b18c11 KI: Vorgabemodell auf gpt-6-luna umgestellt
gpt-6-luna kostet rund 50 % weniger als gpt-5.6-luna. Das Modell in
icon_settings (Einstellungen -> KI) hat weiter Vorrang vor der Vorgabe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 10:10:41 +02:00
SaschaandClaude Opus 5.5 4adf48f336 Anmeldung gilt 7 Tage statt 12 Stunden
JWT-Laufzeit (JWT_EXPIRES_IN) standardmaessig auf 7d gesetzt, damit
Benutzer nicht mehr taeglich neu anmelden muessen. Doku (Betrieb,
Benutzeranleitung, Glossar) und .env.example angepasst.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 22:10:46 +02:00
schakal00783andClaude Opus 5.5 cbac02a96a KI: Modellauswahl als Dropdown + Abgleich mit Produktionsstand
Einstellungen -> KI: statt freiem Modellnamen ein Dropdown mit den
Chat-Modellen, die der hinterlegte OpenAI-Schluessel nutzen darf.

- Backend: listAiModels() fragt OpenAI GET /v1/models, filtert auf
  Chat-Modelle (gpt-*, o*, chatgpt-*; ohne Embedding/Audio/Bild/Instruct
  usw.), neueste zuerst, 10 min im Speicher (Schluesselwechsel laedt neu)
- Neuer Endpunkt GET /api/ai/models (admin)
- Frontend: aktives Modell bleibt waehlbar, auch wenn nicht mehr gelistet;
  Rueckfall auf Textfeld, wenn die Liste nicht abrufbar ist
- Doku: 05-ki (Modellauswahl mit Ablaufdiagramm), 10-api, 08-anleitung

Zieht ausserdem den bereits live laufenden, bisher nicht eingecheckten
Stand nach (perinco-Kontaktabgleich/MergeDialog, Projektmargen,
Whisper-Anpassungen u. a.). Repo entspricht damit icrm.icon-experts.de.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 10:26:30 +02:00
Sascha 3f25355a6d crm.icon-experts.de zeigt auf das neue CRM 2026-09-14 16:56:39 +02:00
Sascha bd810fa608 Quellcode des ICON CRM (6) 2026-09-14 16:55:40 +02:00
Sascha 4fcb34f324 Quellcode des ICON CRM (5) 2026-09-14 16:55:38 +02:00
Sascha e383400d7c Quellcode des ICON CRM (4) 2026-09-14 16:55:36 +02:00
Sascha 28763fed6d Quellcode des ICON CRM (3) 2026-09-14 16:55:34 +02:00
Sascha 0a597ae527 Quellcode des ICON CRM (2) 2026-09-14 16:55:32 +02:00
Sascha c8db64af7e Quellcode des ICON CRM (1) 2026-09-14 16:55:29 +02:00
Sascha 3d09653630 CV-Import: laufende Station mit Datum aus dem Lebenslauf 2026-09-14 16:42:03 +02:00
Sascha a3f0057c09 Werdegang bearbeitbar, Stationen im CV-Import zuverlaessiger 2026-09-14 16:33:56 +02:00
Sascha c19bfd75b1 Werdegang bearbeitbar, Stationen im CV-Import zuverlaessiger 2026-09-14 16:33:54 +02:00
Sascha 5114dfca40 Werdegang bearbeitbar, Stationen im CV-Import zuverlaessiger 2026-09-14 16:33:52 +02:00
Sascha ea3601c219 Werdegang bearbeitbar, Stationen im CV-Import zuverlaessiger 2026-09-14 16:33:51 +02:00
Sascha 71b2c2211b Werdegang bearbeitbar, Stationen im CV-Import zuverlaessiger 2026-09-14 16:33:49 +02:00
Sascha 9cc038e451 CV-Import: Bewerbungsfoto uebernehmen 2026-09-14 16:24:18 +02:00
Sascha 270b61ec2e CV-Import: Bewerbungsfoto uebernehmen 2026-09-14 16:24:16 +02:00
Sascha b8da5c684b CV-Import: Bewerbungsfoto uebernehmen 2026-09-14 16:24:15 +02:00
Sascha 0276e5621e CV-Import: Bewerbungsfoto uebernehmen 2026-09-14 16:24:13 +02:00
Sascha 41ef90076c CV-Import: Bewerbungsfoto uebernehmen 2026-09-14 16:24:11 +02:00
Sascha 6928bdd540 KI-Einstellungen: Schluessel und Modell in der Oberflaeche 2026-09-14 16:06:43 +02:00
Sascha e9f8ac3a92 KI-Einstellungen: Schluessel und Modell in der Oberflaeche 2026-09-14 16:06:41 +02:00
Sascha 09e2d353a1 KI-Einstellungen: Schluessel und Modell in der Oberflaeche 2026-09-14 16:06:39 +02:00
Sascha 96ab707bfc KI-Einstellungen: Schluessel und Modell in der Oberflaeche 2026-09-14 16:06:37 +02:00
Sascha 91fc8d1819 KI-Einstellungen: Schluessel und Modell in der Oberflaeche 2026-09-14 16:06:36 +02:00
Sascha 3371b8874e Diktat: kein automatisches Laden mehr (docs/04-diktat.md) 2026-09-14 15:49:24 +02:00
Sascha 96fd8a0459 Diktat: kein automatisches Laden mehr (README.md) 2026-09-14 15:49:22 +02:00
Sascha f0ec313d0f Dokumentation: docs/README.md 2026-09-14 15:34:23 +02:00
Sascha 941dfa3181 Dokumentation: docs/11-glossar.md 2026-09-14 15:34:21 +02:00
Sascha cf1e9f0343 Dokumentation: docs/10-api.md 2026-09-14 15:34:20 +02:00
Sascha 721a17d720 Dokumentation: docs/09-anleitung-entwickler.md 2026-09-14 15:34:18 +02:00
Sascha cf67f446ea Dokumentation: docs/08-anleitung-benutzer.md 2026-09-14 15:34:17 +02:00
Sascha e3a5140d83 Dokumentation: docs/07-betrieb.md 2026-09-14 15:34:16 +02:00
Sascha 19cc1ac9f6 Dokumentation: docs/06-schnittstellen.md 2026-09-14 15:34:14 +02:00
Sascha 9dc96ca220 Dokumentation: docs/05-ki.md 2026-09-14 15:34:13 +02:00