# Softwareentwicklungsregeln

1. **Zerlegung:** Baue ein Feature nach dem anderen, jedes einzeln testbar.
2. **DRY:** Keine doppelte Logik. Geteilte Logik, Typen und Komponenten zentralisieren. Ab der dritten Wiederholung ein wiederverwendbares Utility oder eine Komponente erstellen.
3. **Benennung:** Klare, absichtsbezogene Namen (z. B. `isUserAuthenticated` statt `auth`).
4. **Struktur:** Konsistente Ordnerstruktur, verwandten Code nach Feature gruppieren.
5. **Typensicherheit:** TypeScript strict, kein `any`. Datenstrukturen explizit definieren, Daten von außen validieren.
6. **Trennung der Zuständigkeiten:** UI, Geschäftslogik und Datenschicht strikt trennen.
7. **Fehlerbehandlung:** Verständliche Fehlermeldungen, Ladezustände für alle asynchronen Aktionen, Fallbacks bei fehlenden Daten oder Netzwerkfehlern.
8. **Sicherheit:** Sensible Logik, Validierung und API-Keys nur im Backend (Edge Functions), nie im Browser.
9. **Barrierefreiheit & Mobile-First:** Responsiv und zuerst für Mobilgeräte, semantisches HTML, ARIA-Labels, Tastaturbedienung.
10. **Logging:** API-Aufrufe, Datenbankoperationen und Login-Ereignisse nachvollziehbar protokollieren, ohne Secrets.

## Arbeitsweise
- Bei jedem neuen Feature zuerst die Oberfläche. Backend und Datenbank erst nach meiner ausdrücklichen Freigabe.
- Seite für Seite bauen und nach jeder Seite um Freigabe bitten.
- Nach jedem Modul erklären, wie ich es im Preview teste. Erst nach meiner Bestätigung weitermachen.
