16 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
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