# Changelog

> Alle Änderungen am Content Management Frame — aktuelle Version 1.17.1. Sicherheits-Fixes, neue Funktionen und Build-Änderungen jeder Version, neueste zuerst.

Kanonische URL: https://cmf.brosemedien.de/changelog

---

# Changelog

Alle nennenswerten Änderungen am Content Management Frame — neueste Version zuerst. Maschinenlesbar liefert der öffentliche Endpunkt `api.php?a=version_check` denselben Stand.

## Version 1.17.1 (September 2026)

- Maschinen: llms.txt nennt jetzt ausdrücklich, dass Schreiben einen Token braucht, und verweist zusätzlich auf sitemap.xml, feed.xml und die API-Kurzreferenz README_MASCHINEN.md
- Maschinen: README_MASCHINEN.md im Download-Paket wird aus dem Hauptsystem übernommen und ist wieder aktuell (Formular-Block, vollständige API-Semantik, Fehlercodes)
- Admin: Hilfetext im Block-Editor nennt alle 9 Blocktypen
- Changelog und Download-Paket mit echten Umlauten

## Version 1.17.0 (September 2026)

- Update-Sicherheit: bestehende Installationen erhalten ein eigenes Update-Paket ohne public/.htaccess, base.css, admin.css und Schriften — angepasste Dateien (Weiterleitungen, eigene CSP, Farben, eigene Schriften) bleiben erhalten; unveränderte Standard-Dateien zieht der erste Aufruf nach dem Update automatisch nach
- Sicherheit: nach dem Login mit dem Standard-Passwort (admin) muss zuerst ein eigenes Passwort gesetzt werden; neue Passwörter mindestens 8 Zeichen
- Sicherheit: SVG-Uploads werden per XML-Parser bereinigt (auch verschachtelte Script-Tags, entity-kodierte javascript:-URLs, set/animate auf href); ungültige SVGs werden abgelehnt
- Sicherheit: HTML-Filter der Text-Blöcke läuft bis zur Stabilität und erkennt Event-Handler direkt nach Anführungszeichen oder Schrägstrich
- Sicherheit: Login-Sperre gegen parallele Versuche, IPv6 auf /64 gekappt, gleiche Antwortzeit für unbekannte Benutzernamen
- Sicherheit: Formular-Einsendungen gedrosselt (10 je IP, 100 gesamt pro Stunde); Neue Seite, Neuer Beitrag, Logout und Import-Abbruch nur noch mit CSRF-Token
- Sicherheit: Update-Download folgt keinen Weiterleitungen und akzeptiert nur Pfade auf dem Update-Server; Fehlerausgabe im Browser abgeschaltet; Slugs beim Import normalisiert, Suchergebnis-Links kodiert
- Fix: ungültiges JSON im Editor leert Seite, Beitrag oder Header/Footer nicht mehr (Prüfung im Browser und auf dem Server)
- Fix: schreibende Zugriffe (Admin, API, Formulare, Login) laufen nacheinander — keine still verlorenen Änderungen mehr; Schreibfehler zerstören keine Dateien
- Fix: Formulare im Header/Footer werden verarbeitet; Markdown-Ausgabe mit Codeblöcken und Leerzeilen um Listen; 404-Seite ohne Canonical, mit noindex
- Fix: visueller Editor behält width/height von Bildern; API behält meta.image; reine Status-Updates per API scheitern nicht an unvollständigem Inhalt; nav.parent per API akzeptiert Slugs und verwirft unbekannte Eltern und Schleifen; verwaiste Seiten bleiben in der Admin-Liste sichtbar
- Fix: Ändern des Blog-Prefix aktualisiert Sitemap, Feed und llms.txt; im Admin angelegte Beiträge erscheinen oben; Medien-Verwendung prüft auch Custom CSS und site.json
- Backup-ZIP: optional mit Blog, Theme und Custom CSS
- Updater: Backup und Rollback umfassen alle ersetzten Dateien; eigene Schriften und Skripte werden nicht mehr gelöscht
- Neu: site.json title_suffix (kürzerer Titel-Anhang), Favicon-Links für vorhandene Dateien, og:locale, Organization-, FAQPage- und BreadcrumbList-Schema, SoftwareApplication-Felder aus site.json
- Performance: Schriften zusätzlich als WOFF2 (rund 60 Prozent kleiner) für neue Installationen — das Update-Paket lässt den Schriften-Ordner bewusst aus; theme.css nennt WOFF2 vor TTF, sobald WOFF2-Dateien vorhanden sind und das Theme gespeichert wird; Admin-CSS/JS mit Versionsparameter
- Kompatibilität: eine eigene Content-Security-Policy in public/.htaccess hat Vorrang vor der PHP-CSP

## Version 1.16.0 (Juli 2026)

- Neu: Formular-Bestätigungsmail an den Absender (Option "confirm" pro Formular) — der Absender erhält eine Kopie seiner Angaben; mit Drossel gegen Missbrauch als Mail-Verstärker (max. 5/Stunde je IP, 60/Stunde global)
- Neu: Content-Security-Policy pro Installation erweiterbar über config/site.json "csp" (für externe Widgets/Embeds) — die strenge Basis bleibt, kritische Direktiven sind nicht aufweichbar; CSP wird jetzt dynamisch von PHP gesendet statt statisch in .htaccess
- Sicherheit: konfigurierbare CSP-Quellen werden streng gesäubert (nur Keywords/Schemata/Host-Quellen, kein CRLF/unsafe-eval)

## Version 1.15.0 (Juli 2026)

- Neu: Blocktyp "Formular" — Feld-Baukasten (Text, E-Mail, Telefon, Mehrzeilig, Auswahl, Checkbox, Radio) mit Pflichtfeld-Option
- Neu: Admin-Bereich "Einsendungen" — Formular-Einsendungen lesen, als gelesen markieren, löschen, als CSV exportieren
- Formulare: Speicherung der Einsendungen und optionaler E-Mail-Versand (mit Schutz vor Header-Injection)
- Formulare: Spam-Schutz per Honeypot und signierter Zeit-Falle — ganz ohne Cookie (datenschutz- und cache-freundlich)
- Formulare: barrierefreie Felder (Labels, Pflichtkennzeichnung, Fehlermeldungen nach WCAG) und DSGVO-Einwilligung als Checkbox
- Sicherheit: CSV-Export gegen Formel-Injection abgesichert

## Version 1.14.0 (Juli 2026)

- Sicherheit: Security-Header via public/.htaccess (CSP, X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy)
- Sicherheit: URL-Schema-Whitelist für Links in Text- und Button-Blöcken — javascript:-URLs (auch entity-verschleiert) werden neutralisiert
- Sicherheit: Session-Cookie mit HttpOnly, Secure (bei HTTPS) und SameSite=Lax, dazu session.use_strict_mode
- Fix: feed.xml und llms.txt existieren sofort nach der Installation (Erststart-Erzeugung), nicht erst nach dem ersten Speichern
- Robustheit: sitemap.xml, robots.txt, feed.xml, llms.txt, search-index.json und theme.css werden atomar geschrieben; Schreibfehler landen im error_log statt still verschluckt zu werden
- Doku: README nennt jetzt alle nötigen Schreibrechte (auch public/ und public/assets/css/)
- Build: ZIP-Erstellung plattformneutral mit archiver (garantiert Forward-Slashes im Archiv)

## Version 1.13.1 (Juni 2026)

- Fix: Download-Seite nutzt das helle Design-System (Build-Script schrieb den alten Verlaufs-Hero zurück)
- Build: Versions-Update auf der Download-Seite schreibt class statt Inline-Style
- custom.css konsolidiert: gemeinsame Basis für Glas-Flächen, Hero/CTA, Lead-Typo, Flex- und Wrap-Reihen

## Version 1.13.0 (Juni 2026)

- Design-System 'Refined Light-Tech' in custom.css: einheitliche Karten, Tabellen, Boxen, FAQ, Hero, Badges — helle Glas-Optik, Pill-Buttons, 2 Akzentfarben
- Das Design-System wird jetzt mit dem Download-Paket ausgeliefert (custom.css wird beim Build nicht mehr geleert)
- Theme-Standard: Raleway (Überschriften) + Lato (Fließtext), ruhige Typo-Skala, Ink-Farbtöne
- Heller Hero-Stil (hero-banner) ersetzt den dunklen Verlauf — gilt automatisch für alle Seiten
- Neue Utility-Klassen: panel, eyebrow, measure, flex-split, img-cover, text-xs
- Sanfte Seiten-Einstiegs-Animation (respektiert prefers-reduced-motion)

## Version 1.12.0 (Juni 2026)

- Neu: Jede Seite und jeder Blog-Post als Markdown abrufbar — einfach .md an die URL anhängen
- Neu: llms.txt nach llmstxt.org-Standard, automatisch generiert und gepflegt (Maschinen-Crawler-Wegweiser)
- Neu: RSS-Feed (feed.xml) für den Blog, mit alternate-Link im Seitenkopf
- Neu: Strukturierte Daten (ld+json): WebSite, Article für Blog-Posts, optional SoftwareApplication per site.json-Flag software_schema
- Neu: Blog-Beiträge können per API umsortiert werden (order in blog_update), neue Beiträge erscheinen oben
- Design: neue Custom-CSS-Klassen (Produkt-Hero, Vergleichstabelle, FAQ-Liste, Footer-Spalten)
- Sicherheit: JSON_HEX_TAG gegen Script-Breakout in ld+json, nosniff-Header für Markdown-Ausgabe
- site.json: og_image und software_schema bleiben bei site_update erhalten

## Version 1.11.0 (Juni 2026)

- Fix: Blog-Beiträge erhalten ihre eigene Canonical-URL statt der Blog-Übersicht
- Fix: Such-Treffer für Blog-Beiträge verlinken auf den konfigurierten Blog-Slug
- Fix: Medien-Tabelle colspan, Login-Countdown nutzt json_encode
- Performance: statischer Such-Index (search-index.json), nur aktive Fonts in theme.css
- Performance: immutable-Caching für CSS/JS, width/height am Bild-Block gegen Layout-Sprünge
- Sicherheit: Update-Server-Allowlist (HTTPS + Host), realpath-Prüfung beim Entpacken von ZIPs
- Sicherheit: SVG-Uploads werden bereinigt, MIME-Prüfung beim Medien-Import
- Sicherheit: Schutz-.htaccess für config/ und content/, Skript-Sperre für media/ und files/
- Sicherheit: site_import und pages_import validieren Schema und Seiten-IDs, Custom-CSS-Filter gegen PHP-Tags
- SEO: HTTPS-Redirect, robots.txt mit Disallow für admin.php/api.php, sitemap-lastmod per Datei-Datum
- Barrierefreiheit: Hoch/Runter-Buttons für Listen-Sortierung, Formular-Labels mit for/id, Fokus-Fallback
- Admin: Inline-Styles durch CSS-Klassen ersetzt (admin.css v3)
- Build: --sync-github spiegelt das Download-Paket ins GitHub-Repo

## Versionen 1.2.1 bis 1.10.4 (April 2026)

Laufende Weiterentwicklung der Anfangszeit ohne Einzelaufzeichnung.

## Version 1.2.0 (April 2026)

- Custom CSS System: eigene Klassen über Admin und API verwalten
- 25+ vordefinierte Utility-Klassen (hero-banner, card, callout, stats-grid, etc.)
- 70 HTML-Blöcke bereinigt: Inline-CSS durch CSS-Klassen ersetzt
- API-Endpunkte: custom_css (GET) und custom_css_update (POST)
- site_bundle liefert jetzt custom_css mit
- 10 Schriftfamilien mit je 3 Schnitten (30 Fonts)
- Alle Dokumentationen aktualisiert (API-Anleitung, Humanoid-Anleitung, READMEs)

## Version 1.1.0 (April 2026)

- Admin: Seitenliste sortiert nach Reihenfolge mit Hierarchie-Anzeige
- Admin: Visueller Theme-Editor mit Color-Pickern, Textfeldern und Font-Dropdowns
- Admin: Media-Thumbnails in der Medienliste
- Admin: Passwort-Ändern-Funktion für Benutzer
- Admin: Benutzername im Admin-Header sichtbar
- Admin: Flash-Meldungen nach Speichern/Ändern
- Admin: beforeunload-Warnung bei ungespeicherten Änderungen
- Admin: Admin-CSS in eigene Datei ausgelagert (admin.css)
- Admin: CSRF-Schutz beim Löschen von Seiten und Benutzern
- Admin: Sitemap-Regenerierung bei Seiten-Aktionen
- Admin: Slug-Transliteration für Umlaute (ae, oe, ue, ss)

## Version 1.0.1 (April 2026)

- baseUrl auf HTTPS korrigiert
- GZIP-Kompression und Browser-Caching via .htaccess
- 404-Fehlerseite mit Navigation und Buttons
- Seitentitel mit Seitenname (Titel | CMF)
- Header/Footer CSS in base.css ausgelagert
- Kontaktseite mit zweispaltigem Layout
- Build-Script für automatische Release-Erstellung

## Version 1.0.0 (April 2026)

- Erstveröffentlichung
