Erstes Commit

This commit is contained in:
2026-05-27 20:04:58 +02:00
commit e16e9e36fd
218 changed files with 2307 additions and 0 deletions

56
AGENTS.md Normal file
View File

@@ -0,0 +1,56 @@
# 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 `if` oder `while` und 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; `const` als Standard, `let` nur 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 `app` Ordner** Der Ordner ist die Vorlage für die Migration und ist für Änderungen tabu.
- **Keine leeren `catch`-Blöcke.** Ein leerer `catch` muss 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`, `alert` oder `debugger` im 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.