Zum Hauptinhalt springen

Technical Debt & Refactoring-Plan

Systematische Erfassung von Technical Debt, Legacy-Code, Laravel-Best-Practice-Verstößen und Flux UI Pro Migrationspotenzial. Zuletzt aktualisiert: 2026-03-10.


Übersicht

DokumentInhalt
Refactoring-Plan (Phasen 1–5)Durchnummerierter Refactoring-Plan: Quick Wins, Flux UI Migration, Component-Splitting, Template-Cleanup, Code-Qualität
Bestehende Technical DebtDeprecated Code, deaktivierte Features, bekannte Einschränkungen, Architektur-Entscheidungen
Audit-Ergebnis & erledigte ItemsGesamtergebnis des Codebase-Audits über 10+ Kategorien + erledigte Items
Bekannte Test-Failures35 SQLite-Inkompatibilitäten, Rector-Erkenntnisse
Video Trends & Video ChartsErweiterungsideen für Video Trends + Video-Statistiken-Diagramme
DB-Monitoring DashboardErweiterungsideen für PostgreSQL-Monitoring
Error MonitorErweiterungsideen für Error-Monitor-Charts
Newsletter-SystemErweiterungsideen für Newsletter-Feature
Queue & Circuit BreakerNo-Release-Pattern, Monitoring-Dashboard, Alerting
Security AuditCSP, Rate Limiting, Session Cookies, HTML Purifier
Laravel Codex AuditService-Extraktion, Turnstile-Duplication, Job-Timeouts, Return-Types
Test-AuditCoverage-Lücken (Jobs, Commands, Middleware, Mail, Models) + kritische Findings
Explore-BestandsentwicklungSparklines, Wöchentlicher Vergleich, Churn-Analyse
Public ExplorerSitemap, Caching, Trending-Sektion, Country-Filter, OG-Images
Compare-ModeZeitraum-Selector, Share-Link, Export, AI Insights
Onboarding & Pipeline MonitorOnboarding-Toast, Pipeline E-Mail-Digest, Alerting
Related Channels / ProfilesBulk-Command, Prioritäts-Sortierung
Unified Feedback-WidgetFloating Button auf allen öffentlichen Seiten, Widget auf CMS-Seiten
AI-Enhancer: Manual OverrideBatch-Edit, Fine-Tuning Export, Contact-Link-Context, Tag-Propagation, Vision, Re-Evaluation, Übernahme-Dropdown
AI-Enhancer: MehrsprachigkeitKeyword-Übersetzung, Beschreibungs-Regenerierung, Frontend-Mehrsprachigkeit, Kategorie-Übersetzungen, Backfill-Monitoring
Deep Audit 2026-03-04 (inline unten)Security: CMS-XSS, CSP-Header, shell_exec. Code Quality: R2-Tests, Index-Prüfung, Config-Werte
Matomo Admin-Statistiken (Audit 2026-03-06, inline unten)E2 Echtzeit-Details, E3 Page Performance, E7 Export, E9 Workspace-Stats
R2 Metrics Langzeitspeicherung (Audit 2026-03-06, inline unten)E4 CSV-Export, E5 Vergleichs-Modus, E6 Dashboard-Widget
Video-Statistiken-Tracking (Audit 2026-03-07, inline unten)Drill-Down-Modal, QuotaGuard-Integration, Trend-Pfeile
Cloudflare AI Crawl Analytics (Audit 2026-03-07, inline unten)Bot-Blockierung-Alerts, Matomo-Vergleich, Realtime-Widget, Bot Management Config
Mehrsprachigkeit / i18n (Audit 2026-03-10, inline unten)Zahlenformatierung, Queued-Mail-Locale, weitere Sprachen
Collector Idle Bonus Scraping (Audit 2026-03-20, inline unten)Adaptive Limits, Smart-Priorisierung, TikTok, Cross-Platform, History
Collector API Fail-Statistik & Token-Schutz (Audit 2026-03-20, inline unten)Per-Collector Tageslimit, Webhook-Alarme, Geo-Analyse, Fehler-Trends-Widget
AI-Enhancer Queue System (Audit 2026-04-01, inline unten)JSONB-Indexes, ConsolidateTagChunk Queue/Unique, Forge Worker --tries, Correlated Subquery

Zusammenfassung Refactoring-Plan

PhaseItemsPrioritätGeschätzter Aufwand
Phase 1: Kritische Fixes3Hoch–Mittel~1 Stunde
Phase 2: Flux UI Migration3Mittel–Niedrig~1-2 Stunden
Phase 3: Component-Refactoring5Hoch–Mittel~8-12 Stunden
Phase 4: Template-Cleanup2Mittel–Niedrig~2-3 Stunden
Phase 5: Code-Qualität3Mittel–Niedrig~3-4 Stunden
Gesamt16 Items~15-22 Stunden

Empfohlene Reihenfolge: Phase 1 → Phase 2 → Phase 3.1 (Dashboard) → Phase 3.2 (Watchers/Index) → Rest nach Bedarf.

Erweiterungsideen: Optimierte Profilbilder (Audit 2026-02-22)

ItemBeschreibungPriorität
<picture> Element mit WebP/AVIF Fallback<x-profile-image> Component um <picture>-Tag mit <source> für AVIF/WebP und JPEG-Fallback erweiternNiedrig (96%+ Browser-Support für WebP)
Redis-Cache für LQIP Data URIsLQIP Base64-Strings in Redis cachen statt bei jedem Seitenaufruf aus DB zu ladenMittel
Queued Variant GenerationVarianten-Erzeugung als Queued Job statt synchron im Request — für Bulk-Import-Szenarien mit vielen Bildern gleichzeitigMittel
Aggressive Cache-Header für VariantenCache-Control: public, max-age=31536000, immutable für _md.webp/_sm.webp Dateien — Hash-basierte Dateinamen ermöglichen lange Cache-TTLMittel
CDN-Integration für optimierte BilderVarianten über CloudFront/Bunny CDN ausliefern statt direkt vom Storage-ServerNiedrig
Scheduled Cleanup-Jobimages:cleanup-orphaned als wöchentlichen Scheduled Task einplanenNiedrig
Imagick als Production-DefaultGD → Imagick auf Forge-Server, bessere Qualität bei gleicher Dateigröße, schnellere VerarbeitungMittel

Erweiterungsideen: Admin API Management (Audit 2026-02-22)

ItemBeschreibungPrioritaet
E3: Audit-Log fuer Token-AktionenAlle Token-Aktionen (erstellen, revozieren, loeschen, IP-Aenderung) in Audit-Tabelle protokollieren mit Admin-User, Timestamp und AktionMittel
E6: Token-Rotation"Token rotieren" Funktion: neuen Token generieren, alten automatisch revozieren. Uebergangsphase konfigurierbar (alter Token fuer X Minuten gueltig)Niedrig

Erweiterungsideen: Postbox Score V2 (Audit 2026-02-23)

ItemBeschreibungPriorität
Plattform-spezifische GewichtungenGrowth/Momentum/Consistency/Engagement Gewichte pro Plattform konfigurierbar (z.B. YouTube: 50% Growth + 20% Momentum + 15% Consistency + 15% Engagement). Aktuell einheitlich 40/30/20/10 für alle Plattformen.Mittel
Engagement V3 — Multi-SignalNeben Upload-Aktivität auch Engagement-Rate (Likes/Follower, Comments/Views) einbeziehen, wenn verfügbar. Aktuell nur Upload-Frequenz als Proxy.Mittel
Score-History-VergleichAdmin-Dashboard mit Plattform-Verteilung der Top-Scores über Zeit (Chart: war es schon immer IG-lastig? Wie hat sich V2 ausgewirkt?).Niedrig
Tier-spezifische Mindest-DatenpunkteMicro-Profile brauchen 14 statt 7 Datenpunkte für stable Status → weniger volatiles Scoring bei kleinen Profilen mit kurzer Historie.Niedrig
Admin Score-BoostManueller Score-Penalty reicht nicht — Admin sollte auch Score-Boost geben können (z.B. für bekannte Brands die algorithmisch untergehen). Ähnlich wie manual_penalty, aber als positiver Multiplikator.Niedrig

Erweiterungsideen: AI Detection Queue Snowball Fix (Audit 2026-02-23)

ItemBeschreibungPriorität
Prioritaets-System fuer AI-Detection QueueSeparate Queue-Prioritaeten fuer AI-Detection: HIGH (frisch importierte Profile), NORMAL (regulaerer 15-Min-Zyklus), LOW (woechentlicher Retry), BACKGROUND (Re-Detection nach Cooldown). Umsetzung ueber --queue=ai-detection-high,ai-detection,ai-detection-low oder Laravel Queue Priorities.Mittel

Erledigt: Gemini 2.5 Flash-Lite Migration — umgesetzt, Modell laeuft auf gemini-2.5-flash-lite (konfigurierbar via GEMINI_MODEL).

Erweiterungsideen: SEO & Structured Data (Audit 2026-02-23)

Hinweis (Audit 2026-02-24): E1 (Dynamische OG-Images), E2 (FAQ-Schema), E3 (VideoObject-Schema) und OG-Default-Bild wurden implementiert. Hinweis (Audit 2026-03-10): E6 (Hreflang-Tags) wurde mit Plan 33 (Mehrsprachigkeit) vollständig umgesetzt — hreflang de/en/x-default auf allen öffentlichen Seiten + Sitemap. Keine verbleibenden Items.

Erweiterungsideen: OG-Image-Generierung (Audit 2026-02-24)

ItemBeschreibungPriorität
E3: Animated OG-ImagesGIF/APNG mit Follower-Chart-Animation für Discord/Telegram (experimentell, nur wenige Plattformen unterstützen animierte Previews).Niedrig
E4: A/B-Testing OG-Image-DesignsUnterschiedliche Templates mit Conversion-Tracking (Klickrate aus GSC nach Template-Wechsel messen). Erfordert Template-Rotation und Auswertungslogik.Niedrig
E5: WebP/AVIF statt PNGAktuell noch nicht breit unterstützt von Social-Media-Crawlern (WhatsApp, Facebook, LinkedIn erwarten PNG/JPG). Sobald Support breiter wird, auf WebP umstellen für ~50% kleinere Dateien.Niedrig

Erweiterungsideen: Cloudflare R2 Storage Migration (Audit 2026-02-24)

ItemBeschreibungPriorität
E1: Cloudflare Image ResizingOn-the-fly Resize via URL-Parameter (?width=128&height=128&fit=cover). Eliminiert lokale Varianten-Generierung (ProfileImageProcessor) komplett — nur noch Originale speichern. Cloudflare Pro Plan erforderlich ($20/Monat). Spart Storage (keine _md/_sm Varianten) und Server-CPU. Umstellung: alle getUrlForSize() Aufrufe auf URL-Parameter umstellen.Mittel
E2: Cloudflare Image Transformations (Polish)Automatische WebP/AVIF-Konvertierung durch Cloudflare Polish für alle Bilder. Eliminiert lokale Bildverarbeitung komplett — nur noch Original-JPG speichern, Cloudflare liefert optimiertes Format basierend auf Browser Accept-Header. Cloudflare Pro Plan erforderlich. Kombinierbar mit E1 für komplette Eliminierung von ProfileImageProcessor.Niedrig

Erweiterungsideen: Pulse DB-Reduktion (Audit 2026-02-25)

ItemBeschreibungPriorität
E2: Admin-Metrik-ExportServer-Metriken als CSV/JSON Export für externe Monitoring-Tools.Niedrig
E3: Pulse komplett deaktivieren für Server-MetrikenEigene Recorder statt Pulse-Recorder für CPU/RAM/Swap — Pulse nur noch für CacheInteractions, SlowQueries, Exceptions.Niedrig
E4: Prometheus-Exportserver_metrics Daten als Prometheus-Endpunkt für Grafana-Integration.Niedrig

Erweiterungsideen: Auto-Discovery (Audit 2026-02-25)

ItemBeschreibungPriorität
E1: Batch-Discovery-QueueBatch-basierte Discovery statt pro-Link-Jobs. Mehrere Links in einem Job zusammenfassen für bessere API-Quota-Nutzung.Niedrig
E4: Discovery-History-TimelineChronologischer Verlauf aller Discoveries mit Vor-/Nachher-Status, gefundenen Profilen und Fehlern. Admin-UI in /admin/import-status.Niedrig
E6: Rückwärts-DiscoveryWenn ein neues Profil importiert wird, automatisch prüfen ob es als Contact-Link auf existierenden Profilen referenziert wird und diese Verknüpfungen nachholen.Mittel

Erweiterungsideen: Web Vitals V2 (Audit 2026-02-25)

ItemBeschreibungPriorität
E2: CSV/PDF-ExportWeb Vitals Report als downloadbare CSV/PDF-Datei für Stakeholder-Kommunikation.Niedrig
E5: Budget-SystemKonfigurierbare p75-Budgets pro Metrik (z.B. LCP ≤ 2000ms). Alerts wenn Budget überschritten wird.Mittel
E6: Real-User-Monitoring DashboardÖffentliches Performance-Dashboard für Transparenz (wie speedlify/calibre), read-only für alle User.Niedrig
E7: Historische VergleicheVergleich aktueller Periode gegen frei wählbare historische Periode (nicht nur vorherige Periode).Niedrig

Erweiterungsideen: Nightly Pipeline Queue-Umbau (Audit 2026-02-26)

ItemBeschreibungPriorität
E1: Adaptive Batch SizesBatch-Größe dynamisch an aktuelle DB-Last anpassen (z.B. via pg_stat_activity Connection-Count). Bei hoher Last kleinere Batches, bei niedriger Last größere. Aktuell statisch über Config.Mittel
E2: Priority Lanes (VIP-Profile zuerst)Profile mit aktiven Watchern, hoher Follower-Zahl oder Premium-Workspaces bevorzugt verarbeiten. Separate Priority-Batches am Anfang der Pipeline dispatchen.Mittel
E3: Incremental ScoresNur Profile mit neuen Metriken seit letzter Berechnung scoren statt alle ~35.000. Erfordert Tracking welche Profile neue social_profile_daily_metrics seit gestern haben. Potenzial: ~80% weniger Score-Berechnungen an ruhigen Tagen.Hoch
E5: Global Leaderboards mit aktuellen ScoresGlobal Leaderboards nach Score-Berechnung statt nach Rollups ausführen, damit die neuesten Scores einfließen. Aktuell laufen Leaderboards nach Rollups (Batch 1B → 2AB), Scores nach Batch 1A.Niedrig

Erweiterungsideen: YouTube New-Video-Detection (Audit 2026-02-28)

ItemBeschreibungPriorität
E1: Adaptive RSS-Polling-FrequenzPolling-Frequenz basierend auf Upload-Frequenz des Channels anpassen. Channels die taeglich uploaden: alle 15min. Channels die woechentlich uploaden: alle 2h. Reduziert unnoetige RSS-Requests.Mittel
E2: First-24h Stats FrequencyIn den ersten 24h nach Video-Erkennung haeufigere Stats-Abfragen (alle 2h statt taeglich). Wichtig fuer Performance-Analyse im kritischen Zeitfenster.Mittel
E4: Premiere/Scheduled Video SupportVideos mit liveBroadcastContent=upcoming oder liveStreamingDetails.scheduledStartTime erkennen und gesondert behandeln (z.B. Countdown, geplante Veroeffentlichung anzeigen).Niedrig
E5: Short DetectionYouTube Shorts erkennenErledigt: is_short + isEffectiveShort() + Admin MarkVideoAsShort-Button implementiert.Niedrig
E6: Batch-ImportMehrere Video-URLs gleichzeitig hinzufuegen (Textarea mit Zeilenumbruch-Trennung). Batch-API-Call fuer bis zu 50 Videos gleichzeitig.Niedrig
E7: Channel Adding via Workspace SelectionVideo-URL-Resolver erlaubt Channel-Hinzufuegen wenn Profil noch nicht existiert. Workspace-Selector fuer automatischen Watcher-Import.Niedrig
E8: Cross-Workspace Video SharingWenn ein Video ueber WebSub/RSS erkannt wird, allen Watchers mit demselben Channel eine Notification senden, nicht nur dem ersten.Niedrig
E9: Notifications bei neuen VideosPush-Notification/Toast an User wenn ein neues Video fuer einen beobachteten Channel erkannt wird.Mittel
E10: Immediate Score CalculationNach Video-Erkennung sofort einen initialen Video-Score berechnen statt auf den naechsten Nightly-Run zu warten.Niedrig
E11: WebSub Health DashboardDediziertes WebSub-Health-Monitoring mit Subscription-Status-Map, Notification-Latenz-Charts, Hub-Response-Zeiten.Niedrig
E12: Stats Frequency TiersUnterschiedliche Stats-Frequenzen basierend auf Video-Alter: ≤24h alle 2h, ≤7d taeglich, ≤30d alle 3 Tage, >30d woechentlich.Mittel

Erweiterungsideen: Merge Profile-Categories → Explore-Status (Audit 2026-02-28)

ItemBeschreibungPriorität
E1: Category Trend in InventarKategorisierungs-Trend als Sparkline in der 14-Tage-Bestandsentwicklungs-Tabelle.Niedrig
E2: Drill-Down per KategorieKlick auf Kategorie oeffnet Detail-Ansicht mit allen Profilen dieser Kategorie, Filtermoglichkeiten, Bulk-Aktionen.Niedrig
E3: Category Configuration on PageKategorien direkt auf der Admin-Seite konfigurieren (Labels, Icons, Reihenfolge) statt ueber Config.Niedrig
E4: Coverage Trend ChartZeitverlauf-Diagramm der Kategorie-Abdeckung (% kategorisiert ueber Zeit).Niedrig

Erweiterungsideen: Newcomer-Datenqualitaet (Audit 2026-02-28)

ItemBeschreibungPriorität
E1: "Newly Discovered" BadgeBadge in Toplists fuer Profile die erst kuerzlich importiert wurden (z.B. ≤7 Tage).Niedrig
E2: Separate Newcomer-SektionEigene "Neu entdeckt"-Sektion auf /tops-flops fuer Profile mit kurzer Historie.Mittel
E3: Percentile-Based Outlier DetectionStatistischer Ansatz: Wachstumsraten die >3 Standardabweichungen ueber dem Median liegen, als Anomalie markieren.Niedrig
E4: Admin Newcomer ReportAdmin-Dashboard-Card die Profile mit kurzem Tracking-Zeitraum und ungewoehnlich hohem Ranking anzeigt.Niedrig
E5: Configurable Threshold per MetricUnterschiedliche min_history_days pro Metrik (z.B. Follower: 3 Tage, Views: 7 Tage, Score: 14 Tage).Niedrig
ItemBeschreibungPriorität
E1: Gewichtetes Scoring nach QuelleLokale Kandidaten-Score-Gewichtung nach Quelle differenzieren: FTS-Treffer 1.0x, AI-Keyword-Match 1.2x, Parsed-Link 1.5x. Aktuell gleichgewichtet.Niedrig
E3: Candidate Quality Feedback LoopWenn ein Admin eine Related-Beziehung manuell entfernt oder bestaetigt, dieses Feedback fuer kuenftige Suchen nutzen (positive/negative Signale).Mittel
E4: Stale Local Candidates RefreshLokale Kandidaten periodisch neu berechnen wenn sich AI-Keywords oder Kategorien des Quell-Profils aendern. Aktuell nur bei manueller oder Auto-Fill-Ausloesung.Niedrig
E5: Local-Only Mode (Zero API)Config-Option um Related-Channel-Suche komplett ohne API-Zugriff zu betreiben (nur lokale Kandidaten). Fuer Quota-Engpaesse oder Dev-Umgebungen.Niedrig

Erweiterungsideen: YouTube Publishing-Analytics (Audit 2026-02-27)

ItemBeschreibungPriorität
E4: CSV-ExportCSV-Download der Publishing-Analytics-Rohdaten (Wochentag-Statistiken, VFR, Engagement) für eigene Analysen. Export-Button auf der Admin-Seite.Niedrig
E5: Push-Benachrichtigung"Heute ist dein bester Veröffentlichungstag!" — automatische Notification an User basierend auf ihren Publishing-Analytics-Daten. Erfordert Preference-Einstellung pro User.Niedrig
E7: API-EndpunktGET /api/v1/publishing-insights?tier=small&category=gaming&weeks=8 — REST-API für Publishing-Insights, nutzbar für User-Dashboard, Explore-Seite oder als Premium-Feature.Niedrig
E9: Scheduling-EmpfehlungPersonalisierte Empfehlung "Bester Veröffentlichungstag/-uhrzeit" basierend auf Channel-Kategorie und Tier. Erfordert Aggregation pro Kategorie und User-Facing Widget.Niedrig
E10: Historischer Vergleich VorwocheWoche-zu-Woche-Vergleich der Publishing-Patterns: "Diese Woche vs. letzte Woche" mit Delta-Anzeige für alle Metriken. Erfordert week_start-basierte Filterung.Niedrig
E14: Feiertage im KalenderWeltweite Feiertage in der Heatmap/Kalender-Ansicht anzeigen um saisonale Effekte auf Publishing-Patterns zu erklären. Benötigt Feiertags-Datenquelle (z.B. Nager.Date API oder statische Liste).Niedrig

Erweiterungsideen: Video-Thumbnails von R2 (Audit 2026-02-27)

ItemBeschreibungPriorität
E2: <picture> Element mit srcsetVerschiedene Größen (sm/md) per srcset anbieten, damit der Browser die optimale Größe wählt. Analog zum Profilbild-System möglich, erfordert Blade-Component-Erweiterung.Niedrig
E4: Thumbnail-QualitätsprüfungPrüfen ob YouTube das maxresdefault-Thumbnail liefert oder nur ein Default-Placeholder (graues Bild). Manche Videos haben kein HD-Thumbnail — diese könnten markiert oder mit niedrigerer Priorität behandelt werden.Niedrig

Erweiterungsideen: Sitemap Management Erweiterungen (Audit 2026-02-28)

ItemBeschreibungPriorität
E7: GSC-Cross-ReferenceIndexed Pages aus Google Search Console mit Sitemap-URLs vergleichen — Coverage-% anzeigen. Erfordert GSC API-Integration (OAuth) und periodischen Abgleich.Niedrig

Erweiterungsideen: Instagram → YouTube Research (Audit 2026-02-28)

ItemBeschreibungPriorität
E3: AI-Social-Links als PrimärquelleStatt Keyword-Suche zuerst die Social-Media-Links aus der Instagram-Bio parsen (AI-extrahiert). Wenn ein YouTube-Link vorhanden ist, direkt importieren ohne API-Suche. Spart Quota und hat höchste Trefferquote. Erfordert Zugriff auf ai_social_links oder Contact-Link-Daten.Hoch
E5: Parallel ProcessingMehrere Instagram-Profile gleichzeitig researchen (parallel Job-Dispatch statt sequentiell). Erfordert bessere Quota-Koordination zwischen parallelen Jobs und möglicherweise einen Semaphore-Mechanismus.Mittel
E7: Success Rate TrackingErfolgsrate pro Suchstrategie tracken (S1/S2/S3/E9): wie oft findet Namens-Suche vs. Handle-Suche vs. Keyword-Suche tatsächlich passende Channels? Ermöglicht datenbasierte Optimierung der Suchstrategie-Reihenfolge.Mittel
E8: Topic-ID aus Instagram-KategorieYouTube Topic-ID automatisch aus der Instagram-Kategorie ableiten (z.B. "Gaming" → /m/0bzvm2). Verbessert Suchrelevanz bei Keyword-Suchen. Erfordert Mapping-Tabelle Kategorie → Topic-ID.Niedrig
E10: Batch-ModeSammel-Import: alle gefundenen Channels eines Tages in einen einzigen WatcherImportRun zusammenfassen statt pro Profil einen Import zu erstellen. Reduziert Import-Run-Overhead und vereinfacht Admin-Übersicht.Niedrig

Erweiterungsideen: App-Monitoring / Sentry-Cron-Ersatz (Audit 2026-03-03)

ItemBeschreibungPriorität
E1: Slack/Telegram-AlertsCron-Heartbeat-Ausfälle zusätzlich über Slack oder Telegram pushen statt nur In-App-Notifications. Erfordert Webhook-Integration und Channel-Konfiguration.Mittel
E5: Custom Health-ChecksBeliebige Health-Checks registrierbar machen (z.B. "R2 erreichbar?", "Gemini API OK?"). Registry-Pattern mit Interface HealthCheck und register() Methode. Erweiterbar für externe Dienst-Überwachung.Mittel

Erweiterungsideen: AI-Agent-Integration & IndexNow (Audit 2026-03-03)

ItemBeschreibungPriorität
E2: Markdown-Versionen öffentlicher SeitenJede öffentliche Seite unter {url}.md als Markdown-Version bereitstellen (llms.txt Standard). Z.B. /explorer/category/gaming.md liefert eine Markdown-Tabelle aller Gaming-Profile. Erfordert Middleware oder Route-Suffix-Handling.Niedrig
E5: OG-Image Auto-Regeneration nach IndexNowWenn ein Profil aktualisiert wird, automatisch OG-Image neu generieren und dann IndexNow submitten — so sehen AI-Agents und Social-Media-Shares immer aktuelle Daten. Erfordert Kopplung OG-Image-Pipeline → IndexNow-Observer.Niedrig
E8: RSS/Atom Feed für neue ProfileFeed unter /explorer/feed.xml der neue/geänderte Profile listet. AI-Agents können den Feed abonnieren statt die Sitemap zu polleen. Erfordert RSS-Generator mit Pagination und lastBuildDate.Niedrig
E9: Admin-Toggle für AI-Bot-ErlaubnisPro Bot ein Toggle im Admin-Dashboard, der sowohl robots.txt als auch Cloudflare WAF Rules aktualisiert. Zentrale Steuerung ohne Dashboard-Wechsel. Erfordert Cloudflare API-Integration für WAF Rule Updates.Mittel

Erweiterungsideen: Matomo Admin-Statistiken (Audit 2026-03-06)

ItemBeschreibungPriorität
E2: Echtzeit-Besucher-ListeLive.getLastVisitsDetails mit erweiterten Details (besuchte Seiten, Verweildauer pro Seite). Aktuell nur Basis-Daten (Land, Aktionen, Dauer). countVisitorsToFetch=20 begrenzen.Niedrig
E3: Seiten-PerformancePagePerformance.get für DOM/Network/Server/Transfer Ladezeiten. Kombination mit Web Vitals-Daten. Nur verfügbar wenn Matomo JS-Tracker Performance-Plugin aktiviert hat.Niedrig
E7: CSV/PDF-ExportKPI-Daten als CSV exportierbar für Reports. PDF-Snapshot des Dashboards für wöchentliche Team-Reports.Niedrig
E9: Dashboard-Widgets für Workspace-OwnerWorkspace-spezifische Stats via Matomo Segment-API. Erfordert User-spezifisches Tracking (customVariable).Niedrig

Erweiterungsideen: R2 Metrics Langzeitspeicherung (Audit 2026-03-06)

ItemBeschreibungPriorität
E4: CSV/JSON-ExportDownload-Button für die Rohdaten der R2-Metriken (Hourly/Daily Snapshots). Analogie zum Cloudflare Dashboard "Download"-Button.Niedrig
E5: Vergleichs-ModusZwei Zeiträume im Chart überlagert darstellen (z.B. diese Woche vs. letzte Woche). Erfordert doppelte Datenabfrage und überlappende Serien.Niedrig
E6: Dashboard-WidgetKleines Storage-Sparkline-Chart auf der Admin-Hauptseite als Quick-Glance. Erfordert Mini-Component mit reduzierten Daten.Niedrig

Erweiterungsideen: Cloudflare R2 Dashboard Refactor (Audit 2026-03-04)

ItemBeschreibungPriorität
E6: Operations-HeatmapRequests pro Stunde/Wochentag als Heatmap — zeigt Lastmuster (z.B. Scraping-Peaks). Erfordert stündliche Granularität in GraphQL-Abfrage und Heatmap-Rendering (z.B. via Chart.js Matrix).Niedrig
E7: Public-Explorer CDN-PerformanceCloudflare CDN Cache-Hit-Rate für den Public Explorer messen (separate Cloudflare Zone Analytics API). Zeigt wie effektiv der CDN-Cache arbeitet und wo Cache-Misses auftreten.Niedrig
E8: Grafana/Prometheus ExportR2-Metriken als Prometheus-Endpunkt exportieren für externe Monitoring-Tools (Grafana). Erfordert /metrics-Route mit Prometheus-Format und Authentication.Niedrig

Deep Audit: Security & Code Quality (2026-03-04)

Security Findings

ItemBeschreibungPriorität
HTML-Sanitization für CMS-PagesPage->content wird mit {!! !!} unescaped gerendert (show.blade.php, legal-consent.blade.php, register.blade.php). Bei kompromittiertem Admin-Konto XSS-Risiko. Lösung: mews/purifier auf Page-Model integrieren oder Content beim Speichern sanitizen.Mittel
Content-Security-Policy (CSP) HeaderImplementiert (2026-03-05). Vollständige CSP mit dynamischen Origins. jsdelivr.net für ApexCharts, Sentry CDN, Matomo, Reverb WebSocket, Turnstile, CDN — alles dynamisch aus Config.✅ Erledigt
shell_exec() durch PHP-Alternativen ersetzen7 Stellen nutzen shell_exec() für du, git log, find. Alle mit internen Pfaden (kein User-Input), aber PHP-native Alternativen (scandir(), DirectoryIterator) wären sicherer.Niedrig

Code Quality Findings

ItemBeschreibungPriorität
CloudflareR2Service Unit-TestsKritischer Service (API-Calls, Kostenberechnung, Anomalie-Erkennung) hat keine dedizierten Unit-Tests. Mock-Tests für fetchAccountMetrics(), calculateMonthlyCost(), detectAnomalies() erstellen.Hoch
Index-Prüfung social_profile_linksNach Widening von value/display_url auf varchar(2048) prüfen ob bestehende Indexes noch effizient sind. Ggf. Partial-Index oder Functional-Index auf LOWER(value) für Lookups.Mittel
YouTube Research Limit als ConfigHardcoded $limit = 1000 in ProcessYouTubeResearchBatch (Line 185) sollte als Config-Wert oder Klassenkonstante mit Begründung definiert werden.Niedrig
env() in AppServiceProviderenv('SENTRY_RELEASE') in AppServiceProvider::boot()Erledigt (2026-03-06): Sentry wurde vollständig entfernt und durch Flare + Nightwatch ersetzt. env('SENTRY_RELEASE') existiert nicht mehr.✅ Erledigt

Erweiterungsideen: Sentry-Feedback-Replacement (Audit 2026-03-05)

ItemBeschreibungPriorität
Kontext-Erkennung im globalen Feedback (E2)Wenn der User auf einer Watcher-Seite ist, automatisch den Watcher-Kontext erkennen per Route-Parameter oder Meta-Tag. Würde separate kontextspezifische Buttons überflüssig machen. Erfordert Livewire-Routing-Kontext im global eingebundenen Component.Mittel
Keyboard-Shortcut für Feedback (E3)Ctrl+Shift+F oder ähnlich zum schnellen Öffnen des Feedback-Modals. Alpine.js @keydown.window Listener im Floating-Button.Niedrig
Screenshot-via-API (E4)Browser-Screenshot automatisch als Anhang mitschicken (html2canvas oder ähnlich). Erhöht die Qualität der Bug-Reports deutlich. ~2h Aufwand.Niedrig
Feedback-Admin-Panel (E5)Admin-Seite zum Verwalten eingegangener Feedbacks (aus contact_submissions). Status-Tracking (offen, in Bearbeitung, erledigt), Antwort-Funktion direkt aus der App. Erfordert neue Admin-Route, Livewire-Component und Status-Spalte in contact_submissions.Niedrig
Toast statt Modal-Wechsel (E6)Nach erfolgreichem Feedback-Versand: Toast statt Erfolgsmeldung im Modal. Modal schließt sich automatisch, Toast bestätigt. ~15 min Aufwand.Niedrig

Erweiterungsideen: Profilbild-Varianten / Image Pipeline (Audit 2026-03-05)

ItemBeschreibungPriorität
AVIF Dual-Format (E2)WebP + AVIF parallel generieren, <picture> Element mit AVIF-Preference. Bessere Kompression (~30% kleiner als WebP). Erfordert Intervention Image AVIF-Support und Template-Anpassung.Mittel
BlurHash JS-Decoder (E3)Dedizierter JavaScript BlurHash-Decoder für animiertes Blur-to-Sharp Fade-In statt statischem CSS-Background. Aktuell ist BlurHash als CSS background-image data-URL implementiert.Niedrig
CDN-Layer vor R2 (E4)Cloudflare CDN (oder Bunny CDN) vor R2 schalten. Cache-Hit-Rate für Slider-Bilder wäre >90%. Reduziert R2-Egress und Latenz. ~4h Aufwand.Mittel
On-Demand Resize via Cloudflare (E5)Statt Varianten vorab zu generieren: Cloudflare Image Resizing. URL-basiert: /cdn-cgi/image/width=512,quality=80/original.jpg. Kein Backfill nötig, beliebige Größen jederzeit. Kosten: $0.50/1000 Transformations.Mittel
Adaptive Qualität (E6)Save-Data HTTP-Header auswerten. Bei langsamer Verbindung: kleinere Variante (medium statt large). ~2h Aufwand.Niedrig
Explore-spezifische Variante (E8)Explore-Grid hat andere Card-Größen als der Slider. Ggf. eigene Variante für das Explore-Grid (z.B. 300×300). ~1h Aufwand.Niedrig
Lazy Loading mit Intersection ObserverJavaScript-basiertes Lazy Loading mit Intersection Observer statt loading="lazy" — ermöglicht animiertes Blurhash-to-Image Fade-In. Erfordert kleines JS-Modul und Integration in profile-image Component.Niedrig
CDN Cache-Warming nach BackfillNach images:generate-variants automatisch die generierten URLs über Cloudflare API pre-warmen, damit der erste Seitenaufruf keine Cold-Cache-Latenz hat. Erfordert Cloudflare API Integration und ggf. Queue-Job.Niedrig
Admin Image-Stats DashboardAdmin-Seite mit Statistiken zu Bildvarianten: Anzahl Bilder mit/ohne Varianten, Speicherverbrauch pro Variante, Format-Verteilung (WebP/AVIF), Backfill-Fortschritt. Erfordert neue Admin-Route und Livewire-Component.Niedrig

Erweiterungsideen: Video-Statistiken-Tracking (Audit 2026-03-07)

ItemBeschreibungPriorität
Drill-Down-Modal im UIgetProfileDrillDown() ist implementiert, aber noch kein UI-Modal.Erledigt: Profil-Drill-Down UI implementiert auf /admin/youtube-management. Klick auf Tag öffnet Modal mit Profil-Liste.Niedrig
QuotaGuard-Integration für präzise Quota-DatenQuota-Units werden aktuell aus der Metrik-Anzahl geschätzt (ceil(videosWithMetrics/50)). Für präzisere Daten die tatsächlichen QuotaGuard-Metriken aus Redis (job_blocked, circuit_opened) in die Aggregation aufnehmen.Niedrig
Trend-Pfeile in KPI-KachelnCoverage und Health Score mit Vortags-Vergleich (↑/↓ mit Delta). Erfordert Laden des Vortags-Aggregations-Datensatzes.Niedrig
Historische Baseline für Health ScoreDer Sync-Anteil im Health Score verwendet den aktuellen Stand der auto_sync_enabled Profile. Für historische Tage (Backfill) wäre ein Snapshot des Profil-Status zum jeweiligen Zeitpunkt präziser.Niedrig

Erweiterungsideen: Cloudflare AI Crawl Analytics (Audit 2026-03-07)

ItemBeschreibungPriorität
E7: Webhook/Alert bei Bot-BlockierungWenn plötzlich viele 403er für einen Bot auftauchen (z.B. durch Cloudflare WAF Rule), Admin automatisch benachrichtigen. Schwellwert-basiert (z.B. >50% 4xx-Rate für einen Bot). Erfordert Scheduled Check oder Integration in bestehenden Cron.Mittel
E8: Vergleich mit Matomo Bot-DatenCross-Reference: Cloudflare sieht ALLE Requests (inkl. blockierte), Matomo sieht nur durchgelassene. Differenz zeigt wie viel Cloudflare blockt. Erfordert Matomo API-Abfrage für Bot-Traffic und Vergleichslogik.Niedrig
E10: Realtime-Widget (Polling)Live-Counter "Aktuell aktive AI-Bots" mit 60s Auto-Refresh. Zeigt letzte 5 Minuten AI-Bot-Requests. Erfordert kurze Cache-TTL oder WebSocket-Push und spezielle Short-Range GraphQL Query.Niedrig
E11: Bot Management Config (REST API)Cloudflare GET/PUT /zones/{zone_id}/bot_management API nutzen um AI-Bot-Schutz (ai_bots_protection), Crawler-Schutz (crawler_protection) und Bot Fight Mode direkt aus dem Admin-Dashboard zu steuern. Erfordert erweiterte API-Token-Permissions.Mittel

Erweiterungsideen: Health-Check-Kalibrierung (Audit 2026-03-09)

ItemBeschreibungPriorität
E2: UptimeRobot API-IntegrationHistorische UptimeRobot-Daten (Uptime-Prozent, Response-Zeiten, Downtime-Perioden) in die App-Monitoring-Seite einbinden. Erfordert UptimeRobot API-Key (UPTIMEROBOT_API_KEY) und neuen Service + Livewire-Computed-Property.Niedrig
E5: Separate UptimeRobot-Monitore pro Check-GruppeStatt einem /up_system-Endpoint: separate Endpoints /up_system/cron, /up_system/services, /up_system/queue für granulareres UptimeRobot-Monitoring. Erfordert neue Controller-Methoden und UptimeRobot-Monitor-Konfiguration.Mittel
E8: Notification-Digest statt Einzel-AlertsStatt einzelner In-App-Benachrichtigungen pro Heartbeat-Ausfall: Sammlung aller Ausfälle in einer täglichen/stündlichen Digest-Nachricht. Reduziert Alert-Noise bei kaskadierten Pipeline-Ausfällen. Erfordert Anpassung des CronHeartbeatMonitorService.Mittel

Erweiterungsideen: Explore Performance-Optimierung (Audit 2026-03-09)

ItemBeschreibungPriorität
E1: Explore API-Endpoint für SPA-FeelingLightweight JSON-API (GET /api/explore/sections?section=trending&platform=all) statt Livewire-Fullpage-Rerender. Alpine.js fetcht Sektionen asynchron, Seite lädt sofort. Ermöglicht Infinite Scroll und granulares Caching pro Sektion. Erfordert API-Route, Controller und Alpine.js Integration.Mittel
E6: Cursor-basierte PaginationProfileGrid: Infinite Scroll mit cursorPaginate(49) statt OFFSET. Schneller bei hohen Page-Nummern. Erfordert Livewire Cursor-Pagination und Frontend-Anpassung.Niedrig
E9: ETag/304 für authentifizierte Explore-SeitenContentFreshness-Middleware auf /explore-Routen anwenden. Komplex weil authentifizierte Seiten unterschiedliche Watcher-Maps pro User haben. Ggf. ETag pro User+Filter-Kombination.Niedrig

Erweiterungsideen: Deep Audit Plan 34 — R2 Storage (Audit 2026-03-11)

ItemBeschreibungPriorität
R1: exists() vor Landing-Page-BilderCloudflareR2Service::getPublicImageUrl() ruft exists() vor jeder URL-Generierung auf Landing Pages auf. Bei vielen Bildern pro Seite (Explorer, Toplists) unnötige API-Calls. Lösung: Batch-exists() oder URL direkt generieren und 404-Fallback im Frontend.Mittel
R4: Backup State-Trackingr2:sync-backup hat kein State-Tracking (welche Dateien schon synchronisiert). Bei Wiederanlauf wird allFiles() erneut aufgerufen und alle Dateien verglichen. Lösung: Cursor-/Marker-basiertes Tracking oder Manifest-Datei.Niedrig

Erweiterungsideen: Plan 35 — Admin Social Profiles Image-Management (Audit 2026-03-20)

ItemBeschreibungPriorität
E3: Varianten-Regenerierung mit neuem Format (AVIF)Button/Command zum Regenerieren aller Varianten in einem neuen Format (z.B. AVIF statt WebP). Erfordert --force --format=avif Option im images:generate-variants Command und UI-Trigger im Admin. Sinnvoll wenn AVIF-Support flächendeckend ist und Bandbreite gespart werden soll.Niedrig
E6: Bulk-Actions in Profil-TabelleCheckbox-Auswahl in der Admin-Profil-Tabelle für Batch-Operationen: Bilder neu laden, Varianten regenerieren, Profile deaktivieren. Erfordert Livewire-Checkbox-State, Bulk-Action-Dropdown und entsprechende Backend-Methoden.Mittel

Erweiterungsideen: Mehrsprachigkeit / i18n (Audit 2026-03-10)

ItemBeschreibungPriorität
E1: Locale-spezifische ZahlenformatierungDE: 1.234,56 vs EN: 1,234.56. Aktuell überall deutsches Format (number_format($n, 0, ',', '.')). Erfordert Helper oder NumberFormatter Wrapper der app()->getLocale() berücksichtigt.Mittel
E2: Locale auf queued Mailables$this->locale($user->locale) auf allen Mailables setzen, damit queued Mails in der Sprache des Empfängers gerendert werden. Aktuell werden Mails in der Server-Default-Locale (DE) gerendert.Mittel
E3: Weitere Sprachen (ES, FR, IT, PT)AI-Beschreibungen existieren bereits in 6 Sprachen — UI-Strings wären der Hauptaufwand (~500 Keys pro Sprache). Erfordert User::SUPPORTED_LOCALES Erweiterung, neue JSON-Files, Sitemap-Erweiterung.Niedrig

Erweiterungsideen: Admin Social Profiles Image-Management (Audit 2026-03-21)

ItemBeschreibungPriorität
E3: Varianten-Regenerierung mit neuem FormatAlle bestehenden Varianten mit neuem Format (z.B. AVIF) regenerieren. "Alle neu generieren"-Button im Admin. Erfordert Format-Konfiguration und Bulk-Regenerierungs-Job.Niedrig
E4: Storage-DashboardEigenes Dashboard für Storage-Übersicht: Speicherverbrauch pro Variante, Wachstumstrend, Cleanup-Optionen. Ergänzung zum bestehenden R2-Dashboard.Niedrig
E5: Auto-Varianten bei Upload-FehlerAutomatische Varianten-Generierung als Fallback wenn der reguläre Upload-Prozess fehlschlägt. Retry-Queue für fehlgeschlagene Varianten.Niedrig
E6: Bulk-Actions in Profil-TabelleMehrfachauswahl in der Admin-Profiltabelle mit Bulk-Aktionen (z.B. Bilder neu laden, Varianten regenerieren, Status ändern). Erfordert Checkbox-Spalte und Action-Dropdown.Mittel

Erweiterungsideen: Collector Idle Bonus Scraping (Audit 2026-03-20)

ItemBeschreibungPriorität
E2: Adaptive Bonus-LimitsBonus-Limit dynamisch an die verfügbare Collector-Kapazität anpassen statt festes max_daily_jobs. Basierend auf historischer Completion-Rate, Tageszeit und aktiver Collector-Anzahl automatisch hochfahren wenn Kapazität vorhanden ist.Mittel
E4: Smart Bonus-PriorisierungProfile mit höherem "Wert" (mehr Watcher, schnelleres Wachstum, PRO-Profile) bei Bonus-Scrapes bevorzugen. Aktuell wird nur nach Bucket-Proximity und Follower-Count sortiert. Erfordert einen Scoring-Algorithmus für Bonus-Priorität.Mittel
E6: Bonus-Scraping für TikTokTikTok-Plattform in das Bonus-Scraping-System integrieren sobald TikTok-Scraping über Collector-Jobs läuft. Erfordert TikTok-spezifische Rotation-Konfiguration und Idle-Detection.Niedrig
E7: Cross-Platform Bonus-Budget-SharingIntelligente Verteilung des Bonus-Budgets zwischen Instagram und YouTube basierend auf verbleibender Kapazität und Quota. Aktuell teilen sich beide ein globales max_daily_jobs Limit — dedizierte per-Platform-Budgets könnten effizienter sein.Niedrig
E8: Bonus-Scrape-History & ReportingHistorische Daten über Bonus-Scraping-Aktivität speichern (täglich: dispatched, completed, failed, quota_used). Ermöglicht Trend-Analyse und Optimierung der Konfiguration über Zeit.Niedrig

Erweiterungsideen: Collector API Fail-Statistik & Token-Schutz (Audit 2026-03-20)

ItemBeschreibungPriorität
E5: Per-Collector TageslimitMaximal X Jobs pro Token pro Tag. Wenn ein Token sein Limit erreicht hat, bekommt er keine neuen Jobs. Nützlich um Last gleichmäßig auf Collectors zu verteilen. Erfordert täglichen Counter pro Client und Konfiguration in config/collector.php.Mittel
E7: Webhook-AlarmeNeben E-Mail auch Webhook-Support (z.B. Slack, Discord, Telegram) für CRITICAL-Alarme. Config-basiert mit URL + Secret. Erfordert CollectorTokenWebhookAlarm-Notification und Config-Einträge für Webhook-URLs.Mittel
E8: Geo-basierte Fehler-AnalyseWenn Collectors in verschiedenen Regionen laufen: Erkennung ob bestimmte Regionen mehr Fehler haben (z.B. IP-Range-Blocking durch Instagram). Erfordert GeoIP-Zuordnung der Collector-Clients und regionale Fehlerrate-Aggregation.Niedrig
E9: Dashboard-Widget für Fehler-TrendsLive-Widget auf der Admin-Startseite das die Top-3-Fehler der letzten Stunde zeigt mit Trend-Pfeil (↑ steigend, → stabil, ↓ sinkend). Erfordert Vergleich aktueller Stunde vs. vorherige Stunde aus Cache-Countern.Niedrig

Erweiterungsideen: Instagram Post Tracking (Plan 39, 2026-03-22)

ItemBeschreibungPriorität
Carousel-Slide-MetrikenWenn Instagram jemals Engagement pro Carousel-Slide liefert (Likes/Comments pro einzelnem Slide), könnte man diese granularer tracken. Erfordert Erweiterung der instagram_post_metrics Tabelle um Slide-Index und separate Metriken pro Slide. Aktuell liefert der Collector nur aggregierte Werte pro Post.Niedrig

Erweiterungsideen: PHPStan Baseline-Reduktion (Audit 2026-03-24)

ItemBeschreibungPriorität
Weitere Baseline-Reduktion (~3693 Fehler)Die verbleibenden ~3693 Baseline-Fehler enthalten viele wiederkehrende Patterns (Cannot cast mixed to int/string, Cannot access property on mixed). Die meisten erfordern tiefere Refactorings (typed DTOs statt arrays, generische Model-Methoden) die über reine Annotations hinausgehen. Opportunistisch bei ohnehin angefassten Dateien abbauen.Mittel
Rector-resistente AnnotationsFür künftige PHPStan-Arbeit assert() oder @phpstan-var statt @var verwenden, da Rector @var-Annotations aggressiv als redundant entfernt. Pattern: assert($x instanceof Foo) inline oder /** @phpstan-var Type $var */ statt /** @var Type $var */. In CLAUDE.md oder docs-agents/ als Best Practice dokumentieren.Mittel

Erweiterungsideen: YouTube PRO Auto-Activation (Audit 2026-03-28)

ItemBeschreibungPrioritaet
Admin-UI fuer Auto-AktivierungenUebersicht aller automatisch aktivierten PRO-Profile mit Datum, Follower-Stand, Sync-Status und Related-Channel-Status. Zeigt wann/warum ein Profil automatisch PRO wurde.Mittel
pro_auto_disabled FlagManuelles "Nie automatisch PRO aktivieren"-Flag pro Profil, damit Admins einzelne Profile dauerhaft von der Auto-Aktivierung ausschliessen koennen. Nuetzlich wenn ein Profil aus bestimmten Gruenden nicht PRO sein soll (z.B. Spam, Content-Policy).Niedrig
Threshold-Stufen / Mehrstufiges PROVerschiedene Schwellen fuer verschiedene PRO-Level (z.B. 100K = Light-PRO mit 50 Videos, 1M = Full-PRO mit 1000 Videos). Erfordert Erweiterung des PRO-Modells und der Video-Sync-Logik.Niedrig
Score-basierte AktivierungZusaetzlich zum Follower-Threshold auch den Postbox-Score als Kriterium nutzen (analog zu Tinker-Variante A). Profile mit hohem Score aber weniger Followern koennten ebenfalls PRO erhalten.Niedrig
Admin-Benachrichtigung bei AktivierungAdmin-Toast oder E-Mail wenn neue Profile automatisch aktiviert wurden, damit Admins die Aktivierungen im Blick behalten.Niedrig

Erweiterungsideen: YouTube Research Retry-Buttons (Plan 49, 2026-03-29)

ItemBeschreibungPrioritaet
Retry-Limit pro Query (max 3)Max 3 Retries pro Query, danach permanent als "Nicht loesbar" markieren. Erfordert retry_count Counter auf youtube_research_queries Tabelle. Verhindert endlose Retry-Schleifen bei dauerhaft fehlschlagenden Queries.Mittel
Automatischer Retry nach Quota-ResetJob der genau zum YouTube-Quota-Reset-Zeitpunkt (Mitternacht PT + 5 Min) dispatcht wird und alle offenen Failed-Queries automatisch wiederholt. Nutzt YouTubeQuotaGuard::secondsUntilQuotaReset() fuer praezises Timing.Mittel
Retry-HistoryNeue Tabelle youtube_research_query_retries mit Timestamp + Fehler pro Versuch. Ermoeglicht Analyse welche Keywords/Topics systematisch fehlschlagen und warum.Niedrig
Smart Retry SchedulingNur retrien wenn genuegend Quota fuer den gesamten Batch vorhanden ist (geschaetzt: 1 Unit pro Keyword × 10 Seiten). Verhindert Partial-Retries die erneut mid-batch abbrechen.Niedrig
Bulk-Delete fuer fehlgeschlagene QueriesButton um alle fehlgeschlagenen Queries eines Batches endgueltig zu entfernen. Nuetzlich fuer Cleanup nach bekannten API-Ausfaellen wo die Ergebnisse nicht mehr relevant sind.Niedrig

Erweiterungsideen: Storage-Migration R2 → Hetzner (Plan 51, 2026-03-30)

ItemBeschreibungPrioritaet
Auto Image-Backup (E2)Automatisches Backup der Bilder via Hetzner-Mechanismus einrichten. Hetzner Object Storage bietet keine native Replikation — muesste ueber rclone Cronjob oder Hetzner Snapshot-Feature geloest werden.Mittel
Multi-Region Hetzner (E10)Object Storage in zweiter Hetzner-Region (z.B. NBG1 Nuernberg) fuer Redundanz. Erfordert Cross-Region-Sync und ggf. GeoDNS fuer Routing. Aktuell bewusst auf FSN1 Single-Region beschraenkt.Niedrig

Erweiterungsideen: AI-Enhancer Queue System (Audit 2026-04-01)

ItemBeschreibungPrioritaet
JSONB-Indexes auf ai_detection_logsIndexes auf output_data->>'language', output_data->>'country', output_data->>'category_confidence' fuer die Admin-AI-Enhancements-Seite. Die Filter-Queries scannen aktuell die volle Tabelle ohne Index. Mit Cache (1h) entschaerft, aber bei wachsender Tabelle trotzdem sinnvoll.Mittel
ConsolidateTagChunk auf ai-detection QueueConsolidateTagChunk nutzt die Default-Queue statt der dedizierten ai-detection Queue. Sollte $this->onQueue('ai-detection') im Constructor setzen, analog zu den anderen 3 Gemini-Jobs.Mittel
ConsolidateTagChunk ShouldBeUniqueConsolidateTagChunk implementiert ShouldBeUnique nicht — doppelte Dispatches koennen doppelte Tag-Merges ausfuehren. Braucht ShouldBeUnique, uniqueId() (basierend auf $batchId) und uniqueFor().Mittel
Correlated Subquery in DetectChannelLanguagesDetectChannelLanguages::queueProfiles() Zeile 140-143 nutzt correlated Subquery (SELECT MAX(date) FROM social_profile_daily_metrics WHERE ...) im LEFT JOIN. Durch limit() begrenzt und aktuell kein Problem, aber bei wachsenden Tabellen koennte ein DISTINCT ON-basierter Subquery effizienter sein.Niedrig