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>
This commit is contained in:
schakal00783
2026-09-29 13:28:29 +02:00
co-authored by Claude Opus 5.5
parent b34a1968df
commit 1ad774fdd2
16 changed files with 978 additions and 625 deletions
+5 -12
View File
@@ -7,8 +7,8 @@ import { WEEKDAY_LABELS } from '../scanner/scannerUi';
/*
* Reiter "Scanner" in den Einstellungen (nur Administratoren).
*
* Wann und wie oft der Scanner selbst sucht, wie alt Anzeigen höchstens sein
* dürfen, und der kostenlose API-Schlüssel für Adzuna. Die
* Wann und wie oft der Scanner selbst sucht, und der kostenlose API-Schlüssel
* für Adzuna. Die
* Schlüssel kommen - wie der OpenAI-Schlüssel - nie zurück zum Browser.
*/
@@ -108,17 +108,10 @@ export const ScannerSettings: React.FC = () => {
))}
</select>
</Field>
<Field label="Höchstes Alter einer Anzeige" hint="In Tagen. Älteres wird verworfen.">
<input
type="number"
min={1}
max={90}
value={schedule.maxAge}
onChange={(event) => set({ maxAge: Number(event.target.value) || 21 })}
className={inputClass}
/>
</Field>
</div>
<p className="mt-3 text-xs text-ink-400">
Gesucht wird ohne Altersgrenze – das Alter der Anzeigen filtert das Dashboard („Anzeigenalter“).
</p>
<PrimaryButton
type="button"