Ein Lauf erzeugt sämtliche Seiten neu: Startseite, Verzeichnis, Themenseiten, Blog, Lexikon, Autorenprofile, Bestenliste, statische Seiten, Fehlerseiten, Sitemap, Feed, robots.txt und llms.txt. Aufrufbar aus dem Backend oder auf der Kommandozeile, f…
Technik und Betrieb: Build, Backend, Sicherheit, Voraussetzungen
Die Voraussetzungen sind absichtlich niedrig: PHP 8.1 oder neuer mit PDO/MySQL, MySQL 5.7 oder MariaDB 10.3 aufwärts, Apache mit mod_rewrite. Kein Composer, kein Node, kein Framework. Es gibt keine Abhängigkeiten – und damit nichts, was in zwei Jahren ein Sicherheitsupdate braucht.
Der Build
Ein Lauf erzeugt alle Seiten neu: Startseite, Verzeichnis, Themenseiten, Blog, Lexikon, Autorenprofile, Bestenliste, statische Seiten, Fehlerseiten, Sitemap, Feed, robots.txt und llms.txt. Aufrufbar aus dem Backend oder auf der Kommandozeile, einzeln oder für alle Mandanten. Eine Sperrdatei verhindert, dass zwei Läufe gleichzeitig in dasselbe Verzeichnis schreiben.
Der Indexierungsschalter
Neue Mandanten stehen auf site_indexable = 0. Solange gilt: noindex auf jeder Seite, Disallow: / in der robots.txt, keine llms.txt. Erst wenn echter Inhalt da ist, wird umgeschaltet und neu gebaut. Ein halbleeres Projekt, das früh in den Index gerät, macht einen schlechten ersten Eindruck – und der bleibt eine Weile.
Sicherheit
- Konfiguration, Vorlagen und Programmcode sind von außen nicht aufrufbar
- Passwörter als bcrypt-Hash, Sperre nach fünf Fehlversuchen
- CSRF-Token in allen Formularen, Rate-Limit je IP-Adresse
- Vorbereitete Anweisungen an jeder Datenbankschnittstelle
- Sicherheitskopfzeilen inklusive Content Security Policy und HSTS
- Mandanten aus dem Backend landen in einer Datendatei, nicht in einer beschreibbaren PHP-Datei
Zugänglichkeit
Alle Textkontraste liegen bei mindestens 4,5:1 und erfüllen damit WCAG-Stufe AA. Die Akzentfarbe eines Mandanten wird beim Bauen automatisch in zwei kontrastsichere Varianten abgeleitet – eine für Text auf Weiß, eine für Text auf der Farbfläche. Damit lässt sich die Markenfarbe frei wählen, ohne dass die Lesbarkeit davon abhängt.
Funktionen in Technik
Das Backend deckt den gesamten Alltag ab: Einträge, Beiträge, Lexikon, Autorenprofile, statische Seiten, Bestenliste und sämtliche Einstellungen. Die Einstellungen sind nach Themen gegliedert und mit Erklärungen versehen, sodass erkennbar ist, was e…
Startinhalte eines Mandanten können als Datei vorliegen: Einstellungen, Seiten, Themenseiten, Beiträge, Lexikon, Autoren, Verzeichnis und Bestenliste in einem Array. Beim Bauen werden neue Datensätze nachgezogen, vorhandene bleiben unberührt – der A…
Neue Mandanten stehen auf nicht indexierbar. Solange gilt: noindex auf jeder Seite, Disallow für alles in der robots.txt, keine llms.txt. Erst wenn echter Inhalt da ist, wird umgeschaltet und neu gebaut. Der Schalter greift an allen Stellen gleichze…
Datenbankzugriffe laufen ausschließlich über vorbereitete Anweisungen, Formulare tragen ein CSRF-Token, Passwörter liegen als bcrypt-Hash vor, und nach fünf Fehlversuchen greift eine Anmeldesperre. Konfiguration, Vorlagen und Programmcode sind von a…
Alle Textkontraste liegen bei mindestens 4,5:1 und erfüllen damit WCAG-Stufe AA. Die Akzentfarbe eines Mandanten wird beim Bauen automatisch in zwei kontrastsichere Varianten abgeleitet: eine für Text auf Weiß, eine für Text auf der Farbfläche. Dami…
Schriften werden vom eigenen Server ausgeliefert, nicht von einem Drittanbieter. Das erspart eine datenschutzrechtliche Diskussion und einen zusätzlichen Verbindungsaufbau. Die Hauptschrift wird vorgeladen, damit kein Textaustausch das Layout versch…
Jeder Mandant kann ein eigenes Vorschaubild haben; fehlt es, greift ein gemeinsames. Fehlt auch das, entfallen die Bildangaben ganz – ein Vorschaubild mit fremder Marke ist schlechter als keines. Für die Erzeugung liegt ein Hilfsskript bei, das aus …
Nach jedem Build meldet das System Verzeichnisse, die zu keiner aktuellen Adresseinstellung mehr gehören und denselben Inhalt unter einer zweiten Adresse ausliefern würden. Gelöscht wird nichts: Unter dem Ausgabeverzeichnis können auch übernommene A…
Eine Seite im Backend führt der Reihe nach über jeden Mandanten: Einstellungen abgleichen, bauen, aufräumen. Abgleich und Aufräumen laufen dabei zunächst im Trockenlauf – sie zeigen an, ohne zu ändern. Jeder Schritt läuft in einem eigenen Prozess, w…
Ein eigenständiges Skript prüft, ob die Konfiguration gefunden und geladen wird, ob das Token gesetzt ist und wo genau eine Abweichung liegt – ohne den Wert im Klartext auszugeben. Es beantwortet die Frage, die bei jeder gescheiterten Einrichtung zu…
Die drei Fehlerseiten sind gewöhnliche Inhaltsseiten und im Backend pflegbar – mit Hinweisen, die zum Projekt passen, statt einer Standardmeldung des Webservers. Sie tragen immer noindex. Wichtiger ist der Rückfall: Solange ein Mandant noch nicht ge…
Für die Auswertung ist eine Matomo-Einbindung vorgesehen, die beim Laden ausdrücklich die Cookies abschaltet. Damit entfällt der Einwilligungsbanner, und es entsteht kein wiedererkennbares Profil über Besuche hinweg. Adresse und Kennung stehen je Ma…
Alle Einstellungen sind nach Themen gegliedert und tragen je Feld eine Erklärung, was der Wert bewirkt – nicht nur, wie er heißt. Der Unterschied zeigt sich beim zweiten Projekt: Eine Liste aus achtzig Schlüsseln ohne Erläuterung ist nach drei Monat…
Automatische Zertifikate brauchen einen Prüfpfad, der jederzeit unverschlüsselt und ohne Weiterleitung erreichbar ist. In einer Installation, die jeden Aufruf auf HTTPS zwingt und in Mandantenverzeichnisse umschreibt, ist genau das die Stelle, an de…