4.1 KiB
4.1 KiB
Zwingende Regeln für jede Code-Interaktion
- Respektiere und fördere die Verwendung von Alpine.js und Tailwind CSS
- Vor Änderungen analysiere den umliegenden Code um Kontext und Muster zu verstehen
Technologie-Stack
| Komponente | Vorschrift |
|---|---|
| Static Site Generator | Hugo (Extended) – ausschließlich im Docker-Build-Image verfügbar; nicht auf dem Host installiert. Alle Hugo-Projektdateien müssen im Ordner hugo/ abgelegt werden (z.B. hugo/content/, hugo/layouts/, hugo/data/). |
| Interaktivität | Alpine.js 3.x + Alpine AJAX (0.x). |
| Styling | Tailwind CSS für alle UI-Klassen. Direktes CSS ausschließlich in hugo/input.css. |
| Fließkomma-Arithmetik | decimal.js-light ist die verbindliche Bibliothek. Keine native JavaScript-Float-Arithmetik für Berechnungen. |
Ordner- & Datei-Struktur
- Hugo-Konventionen sind zwingend. Erlaubt unter
hugo/:hugo/content/,hugo/data/,hugo/layouts/,hugo/assets/,hugo/static/. - Verboten: Dateien außerhalb dieser Konventionen zu erstellen oder Hugo-Dateien außerhalb von
hugo/abzulegen. - Einheiten-Daten gehören nach
hugo/data/{slug}.json. - Direktes CSS nur in
input.css. Keine zusätzlichen.css-Dateien für Komponenten-Styles.
Code-Formatierung
- Einrücken mit einem Tab
- Ausnahme: YAML. Dort wird mit 2 Leerzeichen eingerückt.
- Öffnende geschweifte Klammern am Ende der Block-Definitions-Zeile z.B. bei
ifoderwhileund Funktionsdefinitionen - Schließende geschweifte Klammern in einer eigenen Zeile am Ende des Blocks
- Variablennamen und Funktionsnamen in camelCase
- Maximale Zeilenlänge: 80 Zeichen; danach manueller oder automatischer Umbruch.
- Einfache Anführungszeichen
'in JavaScript und Go; doppelte Anführungszeichen"in HTML-Attributen, JSON und YAML. - Keine trailing spaces am Zeilenende.
- Jede Datei endet mit genau einer Leerzeile (POSIX-Konvention), aber keinem weiteren Whitespace in dieser Leerzeile.
- Keine mehrfachen Leerzeilen hintereinander (maximal eine Leerzeile zur Trennung von Blöcken).
- Kein Leerzeichen vor Komma, Semikolon oder Doppelpunkt; immer ein Leerzeichen danach.
- JavaScript: Keine
var-Deklarationen;constals Standard,letnur bei tatsächlicher Re-Assignation. - JavaScript: Asynchrone Operationen mit
async/await; keine verschachtelten.then()-Ketten (Callback Hell). - JavaScript: Keine verschachtelten ternären Operatoren.
- JavaScript: Arrow-Funktionen mit implizitem Return nur bei Einzeilern; mehrzeilige Arrow-Funktionen benötigen geschweifte Klammern und explizites
return. - Hugo Templates / Go: Keine verschachtelten Template-Logiken über 3 Ebenen hinaus (z. B.
{{ if }}in{{ range }}in{{ if }}); komplexere Logik muss in ein Partial ausgelagert werden.
Verbotene Techniken & Anti-Patterns
- Keine Änderungen im
appOrdner Der Ordner ist die Vorlage für die Migration und ist für Änderungen tabu. - Keine leeren
catch-Blöcke. Ein leerercatchmuss mit einem erklärenden Kommentar versehen sein. - Keine überlangen Funktionen. > 40 Zeilen signalisieren, dass eine Funktion aufgeteilt werden sollte.
- Keine tiefen Verschachtelungen. > 3 Einrückungsebenen (z. B.
if-in-if-in-if) sind zu refactoren. - Keine magischen Zahlen oder String-Literale. Werte mit semantischer Bedeutung müssen als benannte Konstanten definiert werden.
- Keine ungenutzten Imports, Variablen oder Funktionen. Sie müssen entfernt werden.
- Keine
console.log,alertoderdebuggerim Committeten Code. - Keine doppelten Negationen. Verwende explizite Boolean-Casts statt
!!. - Keine globalen Variablen. Daten müssen im jeweiligen Scope oder per explizitem State-Management (z. B. Alpine
x-data) gehalten werden.
Automatisierte Tests
- Vor Abschluss eines Features oder einer Änderung muss der Docker-Build-Test erfolgreich durchlaufen:
./tests/test-docker-build.sh - Der Test prüft drei Ebenen: erfolgreicher
docker build, existenz wichtiger Artefakte (index.html,css/main.min.css,robots.txt) und ein HTTP-Smoke-Test gegen den laufenden Container.