You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Activity-Chart: Range-Tabs für 24h / 7 Tage / 30 Tage (server-seitig aggregiert, kein AJAX/Reload).
Queue Processing: zeigt jetzt die letzten 5 fehlgeschlagenen Reports mit IP, URI, Failure-Reason und Versuchszähler. Failure-Metadaten werden direkt am Log-Eintrag persistiert (failed_attempts, last_failure_at, last_failure_reason) via idempotenter ALTER TABLE-Migration.
Schärferer Visitor-Detector: Trap-Routen (login, admin, vuln, register, xmlrpc, api) werden jetzt auch ohne Analyzer-Treffer als hacker klassifiziert. good_bot und ai_agent bleiben geschützt.
WordPress-Install-Defaults
Neue Klasse Content/WordPressDefaults seedet die kanonischen WP-Fresh-Install-Inhalte: Hello world!-Beitrag, Sample Page, Privacy Policy — mit echtem Gutenberg-Block-Markup, in Englisch oder Deutsch je nach content_language.
One-shot Seeding via Marker-Datei (respektiert manuelle Löschungen). Hook im WebInstaller (Neuinstallation) und in App::__construct (Bestandsinstallationen werden beim ersten Boot nachgeseedet).
ContentUrlGenerator unterscheidet content_type=page (Top-Level-Permalink) von post (Datums-Archiv-URL).
/wp-sitemap.xml als Alias zur Sitemap; robots.txt für WordPress verweist auf das WP-5.5-Standard-Sitemap-Schema.
Footer-Backlink
Dezenter Protected by reportedip.de-Link in allen 11 Frontend-Templates (WordPress/Drupal/Joomla × home/content/404/login). Stil bewusst zurückhaltend (font-size 11px, opacity 0.7).
Infra/Dev-Workflow
Docker compose: Live-Mount des gesamten Repos in den Container — Code-Änderungen ohne Rebuild.
nginx.conf: korrektes try_files mit $uri und $query_string-Fallback.
WebCronProcessor-Batchgröße 2 → 5.
.gitignore behält data/- und data/cache/-Ordnerstruktur via .gitkeep-Marker.