431 lines
11 KiB
Markdown
431 lines
11 KiB
Markdown
# Definition of Done
|
||
|
||
Harte Abnahmekriterien. Eine Aufgabe gilt erst als abgeschlossen, wenn alle Kriterien erfüllt sind.
|
||
|
||
---
|
||
|
||
## Scope
|
||
|
||
Diese Datei definiert **verbindliche Abnahmekriterien** für:
|
||
- Build und Deployment
|
||
- Code-Qualität
|
||
- Responsive Design
|
||
- Accessibility
|
||
- SEO
|
||
- Projektspezifikation
|
||
- **9 Parameter-Kategorien (A–J)**
|
||
|
||
**Geltungsbereich:** Gilt global für jedes Projekt. Keine Aufgabe ist fertig, bis diese Checkliste erfüllt ist.
|
||
|
||
---
|
||
|
||
## Read Order
|
||
|
||
Diese Datei wird nach den anderen Skills gelesen:
|
||
|
||
1. `skills/SYSTEM_SKILLS.md`
|
||
2. `skills/UI_GUIDELINES.md`
|
||
3. `skills/DEFINITION_OF_DONE.md` (diese Datei)
|
||
4. `skills/CLIENT_OVERRIDES.md`
|
||
|
||
Die Definition of Done ist die finale Prüfinstanz vor Abschluss einer Aufgabe.
|
||
|
||
---
|
||
|
||
## Non-Goals
|
||
|
||
Diese Datei definiert **NICHT**:
|
||
- Wie das Design aussehen soll
|
||
- Welche Farben oder Layouts verwendet werden
|
||
- Konkrete UI-Vorgaben
|
||
- Wie Code strukturiert sein soll (siehe SYSTEM_SKILLS.md)
|
||
|
||
Diese Datei prüft nur, ob Qualitätsstandards eingehalten wurden.
|
||
|
||
---
|
||
|
||
## Kategorie A — Unternehmensidentität
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Client-Name erscheint im Seitentitel
|
||
- [ ] Client-Name erscheint im Footer
|
||
- [ ] Client-Name erscheint im Impressum
|
||
- [ ] `lang`-Attribut entspricht dem definierten Locale (z.B. `de`, `de-AT`, `en`)
|
||
- [ ] Standort korrekt im Footer/Kontaktbereich dargestellt (falls definiert)
|
||
- [ ] Kontaktdaten korrekt dargestellt (falls definiert)
|
||
|
||
---
|
||
|
||
## Kategorie B — Zielgruppe
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Content ist auf das Wissensniveau der Zielgruppe abgestimmt
|
||
- [ ] Typische Einwände werden auf Überzeugungsseiten adressiert (falls definiert)
|
||
- [ ] Hauptprobleme der Zielgruppe werden in Hero/Intro angesprochen (falls definiert)
|
||
- [ ] Sprachniveau passt zum definierten Entscheidertyp
|
||
|
||
### Bei Zielgruppen-spezifischen Inhalten
|
||
|
||
- [ ] Fachbegriffe erklärt (wenn Zielgruppe = Laien)
|
||
- [ ] Fachbegriffe verwendet (wenn Zielgruppe = Experten)
|
||
|
||
---
|
||
|
||
## Kategorie C — Kommunikation
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Ansprache (du/sie) ist konsistent auf ALLEN Seiten
|
||
- [ ] Ansprache ist konsistent in ALLEN UI-Elementen (Buttons, Labels, Microcopy)
|
||
- [ ] Tonalität entspricht den definierten `baseTone`-Werten
|
||
- [ ] Schreibstil entspricht den definierten `writingStyle`-Werten
|
||
- [ ] Emotionales Gefühl spiegelt sich im Gesamtdesign wider
|
||
|
||
### Konsistenz-Check
|
||
|
||
```
|
||
[ ] Alle Buttons mit korrekter Ansprache?
|
||
[ ] Alle Formular-Labels mit korrekter Ansprache?
|
||
[ ] Alle Microcopy-Elemente mit korrekter Ansprache?
|
||
[ ] Keine Mischung von Du und Sie?
|
||
```
|
||
|
||
---
|
||
|
||
## Kategorie D — Angebot
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Alle definierten Leistungen sind auf der Website dargestellt
|
||
- [ ] Jede Leistung hat Titel
|
||
- [ ] Jede Leistung hat Beschreibung
|
||
- [ ] Jede Leistung hat Nutzen-Kommunikation (falls definiert)
|
||
- [ ] Angebotstyp bestimmt das Layout:
|
||
- Dienstleistung → Services-Grid oder Liste
|
||
- Produkt → Produkt-Karten
|
||
- Beratung → Prozess-Darstellung
|
||
|
||
---
|
||
|
||
## Kategorie E — Seitenarchitektur
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Alle definierten Seiten existieren als Routes unter `app/`
|
||
- [ ] Jede Seite erfüllt ihren definierten Zweck:
|
||
- `informieren`: Fakten-First, klare Struktur, CTAs dezent
|
||
- `ueberzeugen`: USPs prominent, Social Proof, Argumentation
|
||
- `konvertieren`: CTAs above-the-fold, Trust-Elemente, Einwand-Behandlung
|
||
- [ ] Seiten mit Priorität `hoch` sind am detailliertesten umgesetzt
|
||
- [ ] Navigation enthält alle Seiten in logischer Reihenfolge
|
||
- [ ] Interne Verlinkungswünsche umgesetzt (falls definiert)
|
||
|
||
### Seiten-Zweck-Check
|
||
|
||
| Seite | Purpose | Priority | Umgesetzt |
|
||
|-------|---------|----------|-----------|
|
||
| (aus Spec) | (aus Spec) | (aus Spec) | [ ] |
|
||
|
||
---
|
||
|
||
## Kategorie F — Marke & Stil
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Alle Farben kommen aus Design-Tokens (`globals.css`)
|
||
- [ ] Keine hardcodierten Hex/RGB-Werte im Code
|
||
- [ ] Heading-Font entspricht `brand.fonts.heading.family`
|
||
- [ ] Body-Font entspricht `brand.fonts.body.family`
|
||
- [ ] Visueller Stil entspricht den Stil-Adjektiven
|
||
- [ ] **Keines der Stil-Verbote wurde verletzt**
|
||
|
||
### Stil-Check
|
||
|
||
```
|
||
[ ] Passt jedes UI-Element zu den Stil-Adjektiven?
|
||
[ ] Verstößt kein Element gegen die Stil-Verbote?
|
||
[ ] Logo korrekt eingebunden (falls vorhanden)?
|
||
```
|
||
|
||
---
|
||
|
||
## Kategorie G — UX & Interaktion
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Interaktionsniveau entspricht dem definierten Level (`ruhig`/`moderat`/`dynamisch`)
|
||
- [ ] Animations-Level ist korrekt (`keine`/`dezent`/`praesent`)
|
||
- [ ] Scroll-Verhalten ist korrekt konfiguriert (`normal`/`smooth`)
|
||
|
||
### Level-spezifische Checks
|
||
|
||
**Bei `ruhig`:**
|
||
- [ ] Keine framer-motion Animationen vorhanden
|
||
- [ ] Kein Parallax
|
||
- [ ] Maximal 1 CTA pro Viewport
|
||
- [ ] Große Whitespace-Blöcke
|
||
|
||
**Bei `moderat`:**
|
||
- [ ] Nur dezente Fade-In Animationen
|
||
- [ ] Subtile Hover-Effekte
|
||
- [ ] framer-motion sparsam eingesetzt
|
||
|
||
**Bei `dynamisch`:**
|
||
- [ ] Scroll-Animationen vorhanden
|
||
- [ ] Micro-Interactions implementiert
|
||
- [ ] framer-motion aktiv eingesetzt
|
||
|
||
---
|
||
|
||
## Kategorie H — Conversion
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Primärer CTA-Text korrekt implementiert
|
||
- [ ] Primärer CTA-Ziel korrekt verlinkt
|
||
- [ ] Sekundärer CTA-Text korrekt implementiert (falls definiert)
|
||
- [ ] Sekundärer CTA-Ziel korrekt verlinkt (falls definiert)
|
||
|
||
### Kontaktmethoden
|
||
|
||
- [ ] `formular`: Kontaktformular auf Kontaktseite vorhanden
|
||
- [ ] `telefon`: Telefonnummer im Header sichtbar
|
||
- [ ] `buchung`: Buchungstool-Embed vorhanden (oder Platzhalter)
|
||
|
||
### Vertrauenselemente
|
||
|
||
- [ ] `bewertungen`: Bewertungs-Widgets oder Zitat-Karten platziert
|
||
- [ ] `zertifikate`: Logo-Leiste mit Zertifizierungen vorhanden
|
||
- [ ] `referenzen`: Kundenlogos oder Case-Studies eingebunden
|
||
- [ ] `community`: Mitglieder-Zahlen oder Social-Feeds vorhanden
|
||
|
||
### Conversion-Seiten-Check
|
||
|
||
- [ ] Konvertierungsseiten haben prominente CTAs above-the-fold
|
||
- [ ] Trust-Section direkt unter Hero auf Conversion-Seiten
|
||
- [ ] Einwand-Entkräftung vor Kontaktformular
|
||
|
||
---
|
||
|
||
## Kategorie I — Technik & Recht
|
||
|
||
### Impressum
|
||
|
||
- [ ] Impressum-Seite unter `/impressum` vorhanden
|
||
- [ ] `companyName` korrekt
|
||
- [ ] `street` korrekt
|
||
- [ ] `postalCode` + `city` korrekt
|
||
- [ ] `country` korrekt
|
||
- [ ] `email` korrekt
|
||
- [ ] `phone` korrekt (falls definiert)
|
||
- [ ] `vatId` korrekt (falls definiert)
|
||
- [ ] `register` korrekt (falls definiert)
|
||
|
||
### Datenschutz
|
||
|
||
- [ ] Datenschutz-Seite unter `/datenschutz` vorhanden
|
||
- [ ] Cookie-Hinweis enthalten
|
||
- [ ] Hosting-Info enthalten (aus `spec.technical.hosting`)
|
||
- [ ] Analytics-Angabe enthalten (aus `spec.technical.tracking`)
|
||
|
||
### Integrationen
|
||
|
||
- [ ] Newsletter-Integration vorhanden (wenn `newsletter: true`)
|
||
- [ ] Newsletter-Signup im Footer
|
||
- [ ] Buchungstool-Embed vorhanden (wenn `bookingTool` definiert)
|
||
- [ ] Externe Integrationen als TODO-Kommentare markiert
|
||
|
||
---
|
||
|
||
## Kategorie J — KI-Kontext
|
||
|
||
### Pflicht
|
||
|
||
- [ ] `whatIsImportant` wurde bei JEDER Designentscheidung berücksichtigt
|
||
- [ ] `whatToAvoid` wurde nirgendwo verletzt
|
||
- [ ] Positive Referenzen wurden als Inspiration erkennbar einbezogen (falls definiert)
|
||
- [ ] Negative Referenzen wurden bewusst vermieden (falls definiert)
|
||
|
||
### KI-Kontext-Check
|
||
|
||
```
|
||
[ ] Was ist besonders wichtig? → Umgesetzt?
|
||
[ ] Was darf auf keinen Fall passieren? → Vermieden?
|
||
[ ] Bei Konflikten: Kat. J priorisiert?
|
||
```
|
||
|
||
---
|
||
|
||
## Build & Deployment
|
||
|
||
### Pflicht
|
||
|
||
- [ ] `npm run build` erfolgreich ohne Fehler
|
||
- [ ] Keine TypeScript-Fehler
|
||
- [ ] Keine ESLint-Fehler (Warnungen dokumentieren falls unvermeidbar)
|
||
- [ ] Keine Runtime-Errors in der Console
|
||
|
||
### Bei Fehlern
|
||
|
||
Build-Fehler müssen vor Abschluss behoben werden. Keine Ausnahmen.
|
||
|
||
---
|
||
|
||
## Code-Qualität
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Keine `any` Types in TypeScript
|
||
- [ ] Keine auskommentierten Code-Blöcke
|
||
- [ ] Keine `console.log` im Production-Code
|
||
- [ ] Konsistente Namenskonventionen
|
||
- [ ] Keine ungenutzten Imports oder Variablen
|
||
- [ ] Keine Dead Code (ungenutzte Funktionen/Komponenten)
|
||
|
||
### Abhängigkeiten
|
||
|
||
- [ ] Keine ungenutzten Dependencies in `package.json`
|
||
- [ ] Keine Sicherheitslücken in Dependencies (soweit bekannt)
|
||
|
||
---
|
||
|
||
## Responsive Design
|
||
|
||
### Pflichtprüfung
|
||
|
||
| Viewport | Bereich | Status |
|
||
|----------|---------|--------|
|
||
| Mobile | 320px - 767px | [ ] geprüft |
|
||
| Tablet | 768px - 1023px | [ ] geprüft |
|
||
| Desktop | 1024px+ | [ ] geprüft |
|
||
|
||
### Kriterien
|
||
|
||
- [ ] Keine horizontalen Scrollbars auf keinem Viewport
|
||
- [ ] Keine abgeschnittenen oder überlagernden Inhalte
|
||
- [ ] Touch-Targets mindestens 44x44px auf Touch-Geräten
|
||
- [ ] Lesbare Schriftgrößen ohne Zoom
|
||
|
||
---
|
||
|
||
## Accessibility
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Kontrast WCAG AA erfüllt (4.5:1 Text, 3:1 UI-Elemente)
|
||
- [ ] Tastatur-Navigation funktioniert vollständig
|
||
- [ ] Fokus-Indikatoren sind sichtbar
|
||
- [ ] Semantisches HTML verwendet (keine `<div>` statt `<button>`)
|
||
- [ ] Alt-Texte für alle informativen Bilder
|
||
- [ ] Formular-Labels vorhanden und verknüpft
|
||
|
||
### Bei Ausnahmen
|
||
|
||
Kontrast-Ausnahmen müssen dokumentiert und begründet werden. Es muss ein Plan zur Behebung existieren.
|
||
|
||
---
|
||
|
||
## SEO Mindeststandard
|
||
|
||
### Pflicht pro Seite
|
||
|
||
- [ ] Eindeutiger `<title>` vorhanden
|
||
- [ ] Meta-Description vorhanden
|
||
- [ ] Korrekte Heading-Hierarchie (nur ein `h1`, dann `h2` > `h3`)
|
||
- [ ] Open Graph Tags gesetzt
|
||
- [ ] Alt-Texte für Bilder
|
||
|
||
### Pflicht global
|
||
|
||
- [ ] `robots.txt` vorhanden
|
||
- [ ] Canonical URLs gesetzt (falls relevant)
|
||
- [ ] Keine Blocking-Resources für Crawler
|
||
|
||
---
|
||
|
||
## Performance
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Bilder optimiert (WebP/AVIF, responsive srcset)
|
||
- [ ] Lazy Loading für Below-the-fold-Inhalte
|
||
- [ ] Keine unnötigen Dependencies
|
||
- [ ] Bundle-Größe im Budget (JS < 100kb gzip, CSS < 30kb gzip)
|
||
|
||
### Empfohlen
|
||
|
||
- [ ] Core Web Vitals im grünen Bereich (LCP < 2.5s, CLS < 0.1, INP < 200ms)
|
||
|
||
---
|
||
|
||
## Browser-Kompatibilität
|
||
|
||
Unterstützte Browser (letzte 2 Major-Versionen):
|
||
|
||
- [ ] Chrome
|
||
- [ ] Firefox
|
||
- [ ] Safari
|
||
- [ ] Edge
|
||
|
||
Bei bekannten Inkompatibilitäten: dokumentieren und Workaround bereitstellen.
|
||
|
||
---
|
||
|
||
## Projektspezifikation
|
||
|
||
### Pflicht
|
||
|
||
- [ ] Alle Anforderungen aus `ProjectSpec.json` umgesetzt
|
||
- [ ] Design entspricht `design_tokens.json` und `stylesheet.css`
|
||
- [ ] Keine eigenmächtigen Design-Entscheidungen
|
||
- [ ] CLIENT_OVERRIDES.md berücksichtigt (falls vorhanden)
|
||
|
||
### Dokumentation
|
||
|
||
- [ ] Änderungen in `generation_log.json` maschinell dokumentiert
|
||
|
||
---
|
||
|
||
## Schnell-Checkliste
|
||
|
||
Vor Abschluss jeder Aufgabe durchgehen:
|
||
|
||
```
|
||
[ ] 1. npm run build erfolgreich?
|
||
[ ] 2. Mobile (320px) geprüft?
|
||
[ ] 3. Tablet (768px) geprüft?
|
||
[ ] 4. Desktop (1024px+) geprüft?
|
||
[ ] 5. Kontrast WCAG AA erfüllt?
|
||
[ ] 6. Tastatur-Navigation funktioniert?
|
||
[ ] 7. SEO-Basics vorhanden (title, description, h1)?
|
||
[ ] 8. Anforderungen aus ProjectSpec erfüllt?
|
||
[ ] 9. Kein Dead Code oder ungenutzte Dependencies?
|
||
[ ] 10. generation_log.json aktualisiert?
|
||
```
|
||
|
||
### Kategorie-Schnellcheck
|
||
|
||
```
|
||
[ ] A. Unternehmensidentität korrekt?
|
||
[ ] B. Zielgruppe berücksichtigt?
|
||
[ ] C. Ansprache konsistent?
|
||
[ ] D. Alle Leistungen dargestellt?
|
||
[ ] E. Alle Seiten mit richtigem Purpose?
|
||
[ ] F. Stil-Adjektive eingehalten, Verbote vermieden?
|
||
[ ] G. Interaktionsniveau korrekt?
|
||
[ ] H. CTAs und Trust-Elemente platziert?
|
||
[ ] I. Impressum und Datenschutz vollständig?
|
||
[ ] J. KI-Kontext beachtet?
|
||
```
|
||
|
||
---
|
||
|
||
## Zusammenfassung
|
||
|
||
> Erst wenn alle Checkboxen erfüllt sind, gilt eine Aufgabe als erledigt.
|
||
> Keine Ausnahmen ohne explizite Dokumentation und Begründung.
|
||
> Build-Fehler sind Blocker. Accessibility-Verstöße sind Blocker.
|
||
> KI-Kontext-Verstöße (Kat. J `whatToAvoid`) sind Blocker.
|