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
| Dokument | Inhalt |
|---|---|
| Refactoring-Plan (Phasen 1–5) | Durchnummerierter Refactoring-Plan: Quick Wins, Flux UI Migration, Component-Splitting, Template-Cleanup, Code-Qualität |
| Bestehende Technical Debt | Deprecated Code, deaktivierte Features, bekannte Einschränkungen, Architektur-Entscheidungen |
| Audit-Ergebnis & erledigte Items | Gesamtergebnis des Codebase-Audits über 10+ Kategorien + erledigte Items |
| Bekannte Test-Failures | 35 SQLite-Inkompatibilitäten, Rector-Erkenntnisse |
| Video Trends & Video Charts | Erweiterungsideen für Video Trends + Video-Statistiken-Diagramme |
| DB-Monitoring Dashboard | Erweiterungsideen für PostgreSQL-Monitoring |
| Error Monitor | Erweiterungsideen für Error-Monitor-Charts |
| Newsletter-System | Erweiterungsideen für Newsletter-Feature |
| Queue & Circuit Breaker | No-Release-Pattern, Monitoring-Dashboard, Alerting |
| Security Audit | CSP, Rate Limiting, Session Cookies, HTML Purifier |
| Laravel Codex Audit | Service-Extraktion, Turnstile-Duplication, Job-Timeouts, Return-Types |
| Test-Audit | Coverage-Lücken (Jobs, Commands, Middleware, Mail, Models) + kritische Findings |
| Explore-Bestandsentwicklung | Sparklines, Wöchentlicher Vergleich, Churn-Analyse |
| Public Explorer | Sitemap, Caching, Trending-Sektion, Country-Filter, OG-Images |
| Compare-Mode | Zeitraum-Selector, Share-Link, Export, AI Insights |
| Onboarding & Pipeline Monitor | Onboarding-Toast, Pipeline E-Mail-Digest, Alerting |
| Related Channels / Profiles | Bulk-Command, Prioritäts-Sortierung |
| Unified Feedback-Widget | Floating Button auf allen öffentlichen Seiten, Widget auf CMS-Seiten |
| AI-Enhancer: Manual Override | Batch-Edit, Fine-Tuning Export, Contact-Link-Context, Tag-Propagation, Vision, Re-Evaluation, Übernahme-Dropdown |
| AI-Enhancer: Mehrsprachigkeit | Keyword-Ü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
| Phase | Items | Priorität | Geschätzter Aufwand |
|---|---|---|---|
| Phase 1: Kritische Fixes | 3 | Hoch–Mittel | ~1 Stunde |
| Phase 2: Flux UI Migration | 3 | Mittel–Niedrig | ~1-2 Stunden |
| Phase 3: Component-Refactoring | 5 | Hoch–Mittel | ~8-12 Stunden |
| Phase 4: Template-Cleanup | 2 | Mittel–Niedrig | ~2-3 Stunden |
| Phase 5: Code-Qualität | 3 | Mittel–Niedrig | ~3-4 Stunden |
| Gesamt | 16 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)
| Item | Beschreibung | Priorität |
|---|---|---|
<picture> Element mit WebP/AVIF Fallback | <x-profile-image> Component um <picture>-Tag mit <source> für AVIF/WebP und JPEG-Fallback erweitern | Niedrig (96%+ Browser-Support für WebP) |
| Redis-Cache für LQIP Data URIs | LQIP Base64-Strings in Redis cachen statt bei jedem Seitenaufruf aus DB zu laden | Mittel |
| Queued Variant Generation | Varianten-Erzeugung als Queued Job statt synchron im Request — für Bulk-Import-Szenarien mit vielen Bildern gleichzeitig | Mittel |
| Aggressive Cache-Header für Varianten | Cache-Control: public, max-age=31536000, immutable für _md.webp/_sm.webp Dateien — Hash-basierte Dateinamen ermöglichen lange Cache-TTL | Mittel |
| CDN-Integration für optimierte Bilder | Varianten über CloudFront/Bunny CDN ausliefern statt direkt vom Storage-Server | Niedrig |
| Scheduled Cleanup-Job | images:cleanup-orphaned als wöchentlichen Scheduled Task einplanen | Niedrig |
| Imagick als Production-Default | GD → Imagick auf Forge-Server, bessere Qualität bei gleicher Dateigröße, schnellere Verarbeitung | Mittel |
Erweiterungsideen: Admin API Management (Audit 2026-02-22)
| Item | Beschreibung | Prioritaet |
|---|---|---|
| E3: Audit-Log fuer Token-Aktionen | Alle Token-Aktionen (erstellen, revozieren, loeschen, IP-Aenderung) in Audit-Tabelle protokollieren mit Admin-User, Timestamp und Aktion | Mittel |
| 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| Plattform-spezifische Gewichtungen | Growth/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-Signal | Neben Upload-Aktivität auch Engagement-Rate (Likes/Follower, Comments/Views) einbeziehen, wenn verfügbar. Aktuell nur Upload-Frequenz als Proxy. | Mittel |
| Score-History-Vergleich | Admin-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-Datenpunkte | Micro-Profile brauchen 14 statt 7 Datenpunkte für stable Status → weniger volatiles Scoring bei kleinen Profilen mit kurzer Historie. | Niedrig |
| Admin Score-Boost | Manueller 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| Prioritaets-System fuer AI-Detection Queue | Separate 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 viaGEMINI_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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E3: Animated OG-Images | GIF/APNG mit Follower-Chart-Animation für Discord/Telegram (experimentell, nur wenige Plattformen unterstützen animierte Previews). | Niedrig |
| E4: A/B-Testing OG-Image-Designs | Unterschiedliche Templates mit Conversion-Tracking (Klickrate aus GSC nach Template-Wechsel messen). Erfordert Template-Rotation und Auswertungslogik. | Niedrig |
| E5: WebP/AVIF statt PNG | Aktuell 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E1: Cloudflare Image Resizing | On-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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E2: Admin-Metrik-Export | Server-Metriken als CSV/JSON Export für externe Monitoring-Tools. | Niedrig |
| E3: Pulse komplett deaktivieren für Server-Metriken | Eigene Recorder statt Pulse-Recorder für CPU/RAM/Swap — Pulse nur noch für CacheInteractions, SlowQueries, Exceptions. | Niedrig |
| E4: Prometheus-Export | server_metrics Daten als Prometheus-Endpunkt für Grafana-Integration. | Niedrig |
Erweiterungsideen: Auto-Discovery (Audit 2026-02-25)
| Item | Beschreibung | Priorität |
|---|---|---|
| E1: Batch-Discovery-Queue | Batch-basierte Discovery statt pro-Link-Jobs. Mehrere Links in einem Job zusammenfassen für bessere API-Quota-Nutzung. | Niedrig |
| E4: Discovery-History-Timeline | Chronologischer Verlauf aller Discoveries mit Vor-/Nachher-Status, gefundenen Profilen und Fehlern. Admin-UI in /admin/import-status. | Niedrig |
| E6: Rückwärts-Discovery | Wenn 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E2: CSV/PDF-Export | Web Vitals Report als downloadbare CSV/PDF-Datei für Stakeholder-Kommunikation. | Niedrig |
| E5: Budget-System | Konfigurierbare 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 Vergleiche | Vergleich aktueller Periode gegen frei wählbare historische Periode (nicht nur vorherige Periode). | Niedrig |
Erweiterungsideen: Nightly Pipeline Queue-Umbau (Audit 2026-02-26)
| Item | Beschreibung | Priorität |
|---|---|---|
| E1: Adaptive Batch Sizes | Batch-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 Scores | Nur 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 Scores | Global 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E1: Adaptive RSS-Polling-Frequenz | Polling-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 Frequency | In 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 Support | Videos mit liveBroadcastContent=upcoming oder liveStreamingDetails.scheduledStartTime erkennen und gesondert behandeln (z.B. Countdown, geplante Veroeffentlichung anzeigen). | Niedrig |
is_short + isEffectiveShort() + Admin MarkVideoAsShort-Button implementiert. | ||
| E6: Batch-Import | Mehrere Video-URLs gleichzeitig hinzufuegen (Textarea mit Zeilenumbruch-Trennung). Batch-API-Call fuer bis zu 50 Videos gleichzeitig. | Niedrig |
| E7: Channel Adding via Workspace Selection | Video-URL-Resolver erlaubt Channel-Hinzufuegen wenn Profil noch nicht existiert. Workspace-Selector fuer automatischen Watcher-Import. | Niedrig |
| E8: Cross-Workspace Video Sharing | Wenn ein Video ueber WebSub/RSS erkannt wird, allen Watchers mit demselben Channel eine Notification senden, nicht nur dem ersten. | Niedrig |
| E9: Notifications bei neuen Videos | Push-Notification/Toast an User wenn ein neues Video fuer einen beobachteten Channel erkannt wird. | Mittel |
| E10: Immediate Score Calculation | Nach Video-Erkennung sofort einen initialen Video-Score berechnen statt auf den naechsten Nightly-Run zu warten. | Niedrig |
| E11: WebSub Health Dashboard | Dediziertes WebSub-Health-Monitoring mit Subscription-Status-Map, Notification-Latenz-Charts, Hub-Response-Zeiten. | Niedrig |
| E12: Stats Frequency Tiers | Unterschiedliche 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E1: Category Trend in Inventar | Kategorisierungs-Trend als Sparkline in der 14-Tage-Bestandsentwicklungs-Tabelle. | Niedrig |
| E2: Drill-Down per Kategorie | Klick auf Kategorie oeffnet Detail-Ansicht mit allen Profilen dieser Kategorie, Filtermoglichkeiten, Bulk-Aktionen. | Niedrig |
| E3: Category Configuration on Page | Kategorien direkt auf der Admin-Seite konfigurieren (Labels, Icons, Reihenfolge) statt ueber Config. | Niedrig |
| E4: Coverage Trend Chart | Zeitverlauf-Diagramm der Kategorie-Abdeckung (% kategorisiert ueber Zeit). | Niedrig |
Erweiterungsideen: Newcomer-Datenqualitaet (Audit 2026-02-28)
| Item | Beschreibung | Priorität |
|---|---|---|
| E1: "Newly Discovered" Badge | Badge in Toplists fuer Profile die erst kuerzlich importiert wurden (z.B. ≤7 Tage). | Niedrig |
| E2: Separate Newcomer-Sektion | Eigene "Neu entdeckt"-Sektion auf /tops-flops fuer Profile mit kurzer Historie. | Mittel |
| E3: Percentile-Based Outlier Detection | Statistischer Ansatz: Wachstumsraten die >3 Standardabweichungen ueber dem Median liegen, als Anomalie markieren. | Niedrig |
| E4: Admin Newcomer Report | Admin-Dashboard-Card die Profile mit kurzem Tracking-Zeitraum und ungewoehnlich hohem Ranking anzeigt. | Niedrig |
| E5: Configurable Threshold per Metric | Unterschiedliche min_history_days pro Metrik (z.B. Follower: 3 Tage, Views: 7 Tage, Score: 14 Tage). | Niedrig |
Erweiterungsideen: Lokale Kandidaten-Phase YouTube Related (Audit 2026-02-27)
| Item | Beschreibung | Priorität |
|---|---|---|
| E1: Gewichtetes Scoring nach Quelle | Lokale 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 Loop | Wenn ein Admin eine Related-Beziehung manuell entfernt oder bestaetigt, dieses Feedback fuer kuenftige Suchen nutzen (positive/negative Signale). | Mittel |
| E4: Stale Local Candidates Refresh | Lokale 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E4: CSV-Export | CSV-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-Endpunkt | GET /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-Empfehlung | Personalisierte Empfehlung "Bester Veröffentlichungstag/-uhrzeit" basierend auf Channel-Kategorie und Tier. Erfordert Aggregation pro Kategorie und User-Facing Widget. | Niedrig |
| E10: Historischer Vergleich Vorwoche | Woche-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 Kalender | Weltweite 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)
| Item | Beschreibung | Priorität |
|---|---|---|
E2: <picture> Element mit srcset | Verschiedene 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üfung | Prü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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E7: GSC-Cross-Reference | Indexed 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E3: AI-Social-Links als Primärquelle | Statt 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 Processing | Mehrere 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 Tracking | Erfolgsrate 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-Kategorie | YouTube 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-Mode | Sammel-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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E1: Slack/Telegram-Alerts | Cron-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-Checks | Beliebige 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E2: Markdown-Versionen öffentlicher Seiten | Jede ö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 IndexNow | Wenn 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 Profile | Feed 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-Erlaubnis | Pro 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E2: Echtzeit-Besucher-Liste | Live.getLastVisitsDetails mit erweiterten Details (besuchte Seiten, Verweildauer pro Seite). Aktuell nur Basis-Daten (Land, Aktionen, Dauer). countVisitorsToFetch=20 begrenzen. | Niedrig |
| E3: Seiten-Performance | PagePerformance.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-Export | KPI-Daten als CSV exportierbar für Reports. PDF-Snapshot des Dashboards für wöchentliche Team-Reports. | Niedrig |
| E9: Dashboard-Widgets für Workspace-Owner | Workspace-spezifische Stats via Matomo Segment-API. Erfordert User-spezifisches Tracking (customVariable). | Niedrig |
Erweiterungsideen: R2 Metrics Langzeitspeicherung (Audit 2026-03-06)
| Item | Beschreibung | Priorität |
|---|---|---|
| E4: CSV/JSON-Export | Download-Button für die Rohdaten der R2-Metriken (Hourly/Daily Snapshots). Analogie zum Cloudflare Dashboard "Download"-Button. | Niedrig |
| E5: Vergleichs-Modus | Zwei Zeiträume im Chart überlagert darstellen (z.B. diese Woche vs. letzte Woche). Erfordert doppelte Datenabfrage und überlappende Serien. | Niedrig |
| E6: Dashboard-Widget | Kleines 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E6: Operations-Heatmap | Requests 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-Performance | Cloudflare 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 Export | R2-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
| Item | Beschreibung | Priorität |
|---|---|---|
| HTML-Sanitization für CMS-Pages | Page->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 |
| ✅ Erledigt | ||
shell_exec() durch PHP-Alternativen ersetzen | 7 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
| Item | Beschreibung | Priorität |
|---|---|---|
| CloudflareR2Service Unit-Tests | Kritischer 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_links | Nach 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 Config | Hardcoded $limit = 1000 in ProcessYouTubeResearchBatch (Line 185) sollte als Config-Wert oder Klassenkonstante mit Begründung definiert werden. | Niedrig |
env() in AppServiceProvider | env('SENTRY_RELEASE') in AppServiceProvider::boot()env('SENTRY_RELEASE') existiert nicht mehr. | ✅ Erledigt |
Erweiterungsideen: Sentry-Feedback-Replacement (Audit 2026-03-05)
| Item | Beschreibung | Prioritä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)
| Item | Beschreibung | Prioritä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 Observer | JavaScript-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 Backfill | Nach 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 Dashboard | Admin-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)
| Item | Beschreibung | Priorität |
|---|---|---|
getProfileDrillDown() ist implementiert, aber noch kein UI-Modal./admin/youtube-management. Klick auf Tag öffnet Modal mit Profil-Liste. | ||
| QuotaGuard-Integration für präzise Quota-Daten | Quota-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-Kacheln | Coverage und Health Score mit Vortags-Vergleich (↑/↓ mit Delta). Erfordert Laden des Vortags-Aggregations-Datensatzes. | Niedrig |
| Historische Baseline für Health Score | Der 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E7: Webhook/Alert bei Bot-Blockierung | Wenn 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-Daten | Cross-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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E2: UptimeRobot API-Integration | Historische 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-Gruppe | Statt 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-Alerts | Statt 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E1: Explore API-Endpoint für SPA-Feeling | Lightweight 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 Pagination | ProfileGrid: 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-Seiten | ContentFreshness-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)
| Item | Beschreibung | Priorität |
|---|---|---|
R1: exists() vor Landing-Page-Bilder | CloudflareR2Service::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-Tracking | r2: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)
| Item | Beschreibung | Prioritä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-Tabelle | Checkbox-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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E1: Locale-spezifische Zahlenformatierung | DE: 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E3: Varianten-Regenerierung mit neuem Format | Alle 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-Dashboard | Eigenes Dashboard für Storage-Übersicht: Speicherverbrauch pro Variante, Wachstumstrend, Cleanup-Optionen. Ergänzung zum bestehenden R2-Dashboard. | Niedrig |
| E5: Auto-Varianten bei Upload-Fehler | Automatische Varianten-Generierung als Fallback wenn der reguläre Upload-Prozess fehlschlägt. Retry-Queue für fehlgeschlagene Varianten. | Niedrig |
| E6: Bulk-Actions in Profil-Tabelle | Mehrfachauswahl 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E2: Adaptive Bonus-Limits | Bonus-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-Priorisierung | Profile 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 TikTok | TikTok-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-Sharing | Intelligente 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 & Reporting | Historische 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)
| Item | Beschreibung | Priorität |
|---|---|---|
| E5: Per-Collector Tageslimit | Maximal 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-Alarme | Neben 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-Analyse | Wenn 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-Trends | Live-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)
| Item | Beschreibung | Priorität |
|---|---|---|
| Carousel-Slide-Metriken | Wenn 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)
| Item | Beschreibung | Prioritä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 Annotations | Fü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)
| Item | Beschreibung | Prioritaet |
|---|---|---|
| Admin-UI fuer Auto-Aktivierungen | Uebersicht 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 Flag | Manuelles "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 PRO | Verschiedene 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 Aktivierung | Zusaetzlich 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 Aktivierung | Admin-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)
| Item | Beschreibung | Prioritaet |
|---|---|---|
| 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-Reset | Job 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-History | Neue Tabelle youtube_research_query_retries mit Timestamp + Fehler pro Versuch. Ermoeglicht Analyse welche Keywords/Topics systematisch fehlschlagen und warum. | Niedrig |
| Smart Retry Scheduling | Nur 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 Queries | Button 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)
| Item | Beschreibung | Prioritaet |
|---|---|---|
| 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)
| Item | Beschreibung | Prioritaet |
|---|---|---|
| JSONB-Indexes auf ai_detection_logs | Indexes 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 Queue | ConsolidateTagChunk 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 ShouldBeUnique | ConsolidateTagChunk implementiert ShouldBeUnique nicht — doppelte Dispatches koennen doppelte Tag-Merges ausfuehren. Braucht ShouldBeUnique, uniqueId() (basierend auf $batchId) und uniqueFor(). | Mittel |
| Correlated Subquery in DetectChannelLanguages | DetectChannelLanguages::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 |