Roadmap 6.17. Veröffentlichungs- und Ablehnungsmails zu API-Meldungen gehen
an Pressekontakt oder Firmen-E-Mail — Empfänger ohne (bekanntes) Konto. Die
Mail sagte „in Ihrem Konto … mit Passwort oder Magic-Link“, gelesen wurde
„geht nicht“. Jetzt ein Kasten mit der Adresse und dem Knopf „Anmeldelink
anfordern“: signierter Link (30 Tage, Adresse verschlüsselt) auf /zugang,
ein Klick schickt den Anmeldelink, die Anmeldung landet auf der Meldung.
Ablehnung zu API-Meldungen: nur ansehen, neu eingereicht wird auf dem
ursprünglichen Weg. Kunden mit Konto: Knopf „Im pressekonto öffnen“.
Stufen 2 und 3 des Trichters messen die neue Seite mit.
Changelog: Verbessert
Public: Wer eine Veröffentlichungs- oder Ablehnungsmail bekommt, erhält mit einem Klick einen Anmeldelink an genau diese Adresse – ohne Konto und ohne Passwort.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Im Backend heißt der Datensatz weiter „Firma“, öffentlich ist er der
Newsroom. Kunden- und Admin-Firmenseite heißen „Firma & Newsroom“ und zeigen
unter dem Namen die Newsroom-Links je Portal oder den Hinweis, dass der
Newsroom erst mit der ersten Meldung erscheint (Company::publicNewsroomLinks).
Changelog: Verbessert
Public: Die Firmenseite im Kundenbereich verlinkt jetzt direkt auf den öffentlichen Newsroom.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Statt einer grauen Textzeile in der Profilbox derselbe Kasten wie unter jeder
Meldung (maskierte Adresse, Knopf „Anmeldelink anfordern“), jetzt als
gemeinsame Komponente. Mobil direkt unter dem Profil, am Desktop oben in der
Seitenleiste; der doppelte Kasten „Eigenen Newsroom starten“ entfällt.
Roadmap 6.17: 7 Firmen öffneten die Verwaltungsseite, eine forderte an.
Changelog: Verbessert
Public: Auf jeder Newsroom-Seite führt ein eigener Kasten zum kostenlosen Verwaltungszugang – mit der Adresse, an die der Anmeldelink geht.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Roadmap 6.1/6.16: Block 1 bis 3 mit Ist, zeitanteiligem Soll, Schwelle und
Status, Trichter seit 17.09., Transparenzseiten aus Umami. Neue Befehle
growth:report und umami:report. Zugang über UMAMI_API_* (View-only-Benutzer).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Roadmap 6.16. Bisher stand jede Einlösung ohne Firma im Trichter (Stufe
"Magic Link eingelöst" immer 0 Firmen), zwischen Mail-Klick und Einlösung
fehlten "Verwaltungsseite geöffnet" und "Anmeldelink angefordert", und
die Erstbuchung stand immer auf organic. Die Leiter hat jetzt sieben Stufen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Anschreiben mit Bitte, Vorrang, Lesereihenfolge und vollständiger
Dateiliste der Anlage 7 (nur Belege, keine Arbeitsnotizen). BN-01: doppelte
.env-Einträge bereinigt, kurzzeitig abgeschaltete Rechtebestätigung wieder
aktiv, keine Uploads in der Lücke.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
OpenAI: Zero Data Retention derzeit nicht beantragbar; DSE-Entwurf nennt die
Standardbehandlung der API (kein Training, bis zu 30 Tage
Missbrauchserkennung) und mögliche Verarbeitung in den USA auf Basis von
SCCs, keine EU-Datenresidenz. Alle Dienstleisterverträge bestehen seit vor
dem Go-Live; die Belege sind Neuausfertigungen vom 13.10.2026. Hetzner
Anlage 1 erweitert. Frage 5 um die Impressumsangabe nach § 18 Abs. 2 MStV
ergänzt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Screenshots und Verträge geprüft und in nachweise/ zusammengeführt;
Binärdateien per .gitignore ausgeschlossen (vertraulich, Kunden- und
Organisationsnummern, Größe). Vertragsübersicht mit Fassungen, Daten und
Drittlandgrundlagen. Versandfassung: DPF-Status Cloudflare vom 13.10.2026,
OpenAI-DPA unterzeichnet am 13.10.2026. Juli-Zahlen auf Live bestätigt.
Protokollzeile v1.9.0 im Git-Deploy-Dokument.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Auf 390 px Breite lag das Schild „Gebuchte Platzierung“ über dem
Bildnachweis oben rechts. Der Nachweis sitzt auf Mobil jetzt unten rechts im
freien Rand unter der Meta-Zeile (ab sm unverändert oben rechts). Die
Erklärung am Schild ist rechtsbündig und stößt nicht mehr an den Bildrand.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nachher-Liste vom 13.10.2026: ein Admin-Konto mit Passkey und TOTP,
Super-Admin, keine Editoren, Zugänge außerhalb der Anwendung nur beim
Inhaber. Versandfassung D3 und Klärung U13 nachgezogen. Tinker-Befehl für
die Juli-Kampagnen nutzt status->value (Enum).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Versandfassung mit Codeabgleich vom 13.10. korrigiert (Zugriffsprotokoll
des Beweisarchivs als Ziel, Admin-Bestand, Juli-Mails mit Zahlen und
Empfängerregel, C2PA als geplant, Gate-Dialog heute), Anlage 6 abgelegt.
Neuer Ordner rechtliches/nachweise mit Checkliste, Juli-Mailtexten,
OpenAI-Endpunkten, BN-01-Vorlage und BN-02-Ablauf inklusive Notfallzugang.
Vorfassungen, Codeauswertung, To-do-Liste und Rückfragen nach
archive/rechtliches-2026-10. Deploy-Notiz archive/betrieb/deploy-v1.9.0.md.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Admin ▸ Pressemitteilung zeigt laufende Boosts; „Boost beenden“ verlangt
einen Grund und billing:manage, beendet laufende und angeschlossene
Zeiträume, verwirft die Seiten-Caches und protokolliert „Boost beendet“.
Credits werden nicht zurückgebucht.
audit:admins listet alle Konten mit Rechten über den Kundenbereich hinaus
(Super-Admin, Rollen außer customer/api-only, direkte Permissions), auch
gesperrte und gelöschte, als Markdown mit 2FA, Passkeys, Tokens und letztem
Sitzungswiderruf. E-Mail standardmäßig nur mit Domain (Nachweis BN-02).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Label „Gebuchte Platzierung“ (en „Booked placement“) statt „Top-Platzierung“
auf Start- und Branchenseite. Die Erklärung „Das Unternehmen hat diesen Platz
gebucht …“ erscheint am Desktop beim Überfahren und auf Mobil per Tipp, ohne
den umgebenden Link zu öffnen; Screenreader lesen sie mit. Kopfzeile über dem
Aufmacher „Aktuell“ statt „Top-Auswahl“ (automatische Auswahl, keine
Redaktion). Preisseite nennt die Kennzeichnung (Rechtspaket U10).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nachtrag zu v1.8.0, beim Prüfen nach dem Deploy gefunden: Meta-Beschreibungen
und Taglines der drei Marken (config/domains.php), Tarifvorteil „Starter“ im
PlanSeeder, Platzhalter im Admin. Der Wächtertest prüft jetzt auch config/
und database/seeders/. Live steht der Tarifvorteil in der Datenbank und wird
im Admin geändert (Seeder überschreibt sonst alle Tarifdaten).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Decision-Update Bildrechte 3.6 / Plan D.6: keine Siegel- oder
Redaktionszusage. Startseiten-Meta, CTA, Veröffentlichen-Seite (DE/EN),
Preisseite, Dashboard. „Qualitätsgeprüft seit 2012“ war sachlich falsch →
„Im Archiv seit :year“. Wächtertest gegen Rückfälle (Roadmap 3.7).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Der Endpunkt legte Abos ohne Bestätigungsweg an, die Spezifikation versprach
ein Double-Opt-in; seit dem Go-Live kein Aufruf. Antwortet jetzt mit 410,
die Ability ist für neue Tokens nicht mehr wählbar (Roadmap 4.3).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Beide Tabellen hatten keine Frist; activity_events trägt Namen und Adressen
im Klartext, api_usage_logs IP und User-Agent. MassPrunable, täglich 04:05
über model:prune, Fristen in config/monitoring.php (Roadmap 4.2).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ErrorReportScrubber entfernt die Daten aller Breadcrumbs und bereinigt ihre
Nachrichten; Livewire-Breadcrumbs standardmäßig aus — das SDK hängt dort
Formularwerte und Properties an (Roadmap 4.9). Bestand in GlitchTip geprüft:
keine Formular- oder Passwortdaten.
- SessionRevocation::legacyCachedMark() entfernt (Übergang bis v1.6.0)
Changelog: Sicherheit
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Liste „Aktive Sessions“ las die sessions-Tabelle, Live speichert Sessions
in Redis — sie war immer leer. Jetzt: „Dieses Gerät“ (seit wann angemeldet)
und die letzten fünf Anmeldungen mit Anmeldeweg aus dem Aktivitätsverlauf,
ohne IP; Kachel „Anmeldungen in 30 Tagen“ (Roadmap 4.1).
Changelog: Verbessert
Public: Die Sicherheitsseite zeigt Ihre letzten Anmeldungen und wie Sie sich jeweils angemeldet haben.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- git-deploy.md Abschnitt G: Rotieren, Sichern, Umschreiben, Prüfen,
Hash-Zuordnung, Push, Server, Forgejo/NAS, lokales Aufräumen
- Protokoll: Speicherbereinigung in Forgejo und auf dem NAS erledigt,
keine weiteren Klone, Live-Schlüssel bereits rotiert
- Agenten-Regel: keine personenbezogenen Daten oder Schlüssel ins Repository
- Roadmap: 1.1 und 1.2 erledigt, Context7 und lokales MySQL-Root unter 1.3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Zuordnung alter zu neuen Commit-Hashes in dev/archive/commit-map-2026-10-09.txt
- Git-Deploy-Protokoll: Eintrag und einmaliger Server-Abgleich (Tags mit
--force holen, gc), Speicherbereinigung in Forgejo und auf dem NAS
- README und Roadmap 1.1/1.4 nachgeführt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- dev/roadmap.md neu: alle offenen Punkte aus Plänen, Audits und Protokollen,
gegen Code und Git abgeglichen (Stand v1.7.0)
- Abgeschlossenes ins Archiv: 2026-09-01 → archive/2026-09-nutzergewinnung,
2026-09-11-audit → archive/2026-09-audit, lagacy-rechnungen →
archive/legacy-rechnungen, Deploy-Protokoll v1.1.0, Umami-Snippets,
Go-Live-Roadmap vom 20.07.
- Aktiv bleiben eigene Ordner bildrechte/ (Plan Fassung 2, Decision-Update)
und changelog/ (Decision-Update Changelog)
- dev/README.md als Ordnerkarte neu, Verweise und zwei Code-Kommentare auf
die neuen Pfade
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Turnstile für Gäste und unbestätigte Konten (TurnstileVerifier,
<x-turnstile>); ist Cloudflare nicht erreichbar, wird durchgelassen und
im Verlauf, in der Kontakt-Queue und in der Betriebsüberwachung markiert
- Inhaltsfilter des Kontaktformulars (fremde Links, Floskel mit
Seitentitel, Zeichensalat, Sperrliste, Absenden unter 3 Sekunden);
Treffer landen in der Spam-Quarantäne ohne Mail, Löschung nach 30 Tagen
- Admin: Filter „Spam“, Sammelaktion, „Kein Spam“ holt die Mail nach
- Registrierung lehnt Zufallsnamen ab; users:prune-bot-registrations
(täglicher Lauf erst mit USERS_PRUNE_BOT_REGISTRATIONS=true)
- contact-messages:quarantine-spam für den Altbestand
- CSP erlaubt challenges.cloudflare.com, Log-Kanal spam
- Datenschutzerklärung: Abschnitt 6a Cloudflare Turnstile (Vorschlag)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Auf Live fehlte die PHP-Erweiterung imagick: Herkunftsprüfung und
KI-Vorab-Check der Bilder scheiterten still und ließen jedes Bild durch.
AdminSystemHealth zeigt jetzt die Zeile „PHP-Erweiterung Imagick“ (rot bei
eingeschaltetem Vorab-Check, sonst gelb).
GlitchTip server-pressekonto, Issues 38 und 39: gebaute Livewire-Anfragen
setzen gesperrte Properties (portal/language im Meldungs-Feed und in der
Suche) oder schicken Uploads an Komponenten ohne Upload. Livewire weist sie
korrekt ab; statt 500 bzw. 419 (das als „Seite abgelaufen“ gemeldet wurde)
antworten sie jetzt mit 400 und werden nicht mehr gemeldet.
Browser (Issue 18): Alpine bricht x-transition-Übergänge mit
{isFromCancelledTransition: true} ab — keine Fehlermeldung mehr.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Restliche Phase 4 aus dem Sicherheitsaudit 07.10.2026:
- Sicherheitsseite: „Andere Geräte abmelden“ rotiert remember_token und
beendet alle anderen Sessions, die aktuelle bleibt (nicht während einer
Impersonation).
- LoginIpThrottle: 20 Fehlversuche je IP in 15 Minuten über alle Konten.
Gezählt über das Failed-Event, damit Livewire-Login und Fortifys
POST /login denselben Zähler teilen; Erfolg setzt ihn nicht zurück.
- Sperrmarke für Sessions in users.sessions_revoked_at_ms statt nur im
Cache — übersteht cache:clear. Die alte Cache-Marke zählt übergangsweise
mit und kann im nächsten Release entfallen.
- Neue und geänderte Passwörter: mindestens 12 Zeichen, in Produktion
zusätzlich uncompromised() (HIBP, k-Anonymität). Bestehende bleiben gültig.
- Content-Security-Policy-Report-Only in Produktion; Meldungen über
/csp-report nach storage/logs/csp-*.log, je Meldung höchstens einmal pro
Stunde, ohne Query und tokenartige Pfadsegmente.
Migration: users.sessions_revoked_at_ms (users hat FULLTEXT, 25 MB, Sekunden).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>