# Checklist odbioru — j_kedzierski Wyciąg z `wymagania-projektowe-strony.md`, zawężony i spriorytetyzowany pod ten konkretny projekt (wizytówka + generator leadów, nie e-commerce). P1 = blokuje uruchomienie. Odhaczać `[ ]` → `[x]` przy odbiorze, zgodnie z formatem źródłowego dokumentu. ## P1 — blokuje start - [ ] Realne dane firmy w globalu `Company` (adres, telefon, e-mail, WhatsApp) — zero „DO POTWIERDZENIA" ani `+49 123 456 789` na produkcji - [ ] Zdjęcie Janusza w hero i na `/o-nas` — zero pustych/placeholder obrazów - [ ] Logo b.b.h. w bloku `affiliation` i stopce - [ ] Favicon i `site-settings.logo` wgrane przez panel - [ ] Treść stron: Impressum, Polityka prywatności, Polityka cookies, Stowarzyszenie, FAQ — żadna nie zostaje z „Treść w przygotowaniu" ([06](./06-faq.md), [07](./07-stowarzyszenie.md), [09](./09-strony-prawne.md)) - [ ] System Pages role przypisane (`privacyPolicy`, `cookiePolicy`) — linki w bannerze cookies i stopce prowadzą do realnych stron, nie 404 - [ ] Baner cookies działa: pokazuje się przy pierwszej wizycie, „Odrzuć" na równi z „Akceptuj", zero cookies analitycznych przed zgodą (test w DevTools → Application) - [ ] Martwy kotwica-link `#jak-to-dziala` z hero naprawiony ([10](./10-architektura-cms.md) §2) - [ ] `servicesList.linkUrl` uzupełnione — „Zobacz więcej" prowadzi gdzieś ([10](./10-architektura-cms.md) §2) - [ ] Wszystkie 10 stron istnieją i renderują się poprawnie w PL i DE, przełącznik języka zachowuje bieżącą podstronę - [ ] Formularz (jeśli wdrożony) ma server-side walidację zgody RODO — nie tylko UI - [ ] Kontrast tekst/tło sprawdzony na ciepłym papierowym tle (WebAIM Contrast Checker) — min. 4,5:1 - [ ] `prefers-reduced-motion` respektowany na wszystkich animacjach z [01](./01-design-system-impeccable.md) §4 - [ ] Obraz hero ma `priority`, LCP < 2,5s (PageSpeed Insights, dane polowe) - [ ] Nagłówki bezpieczeństwa (CSP/HSTS/...) — Mozilla Observatory ocena A - [ ] `sitemap.xml`/`robots.txt` generowane i poprawne, zgłoszone w Search Console - [ ] Panel `/admin` zabezpieczony (silne hasło), nie indeksowany ## P2 — ważne dla jakości, nie blokuje - [ ] `/impeccable detect` bez findings „AI slop" (patrz checklista [01](./01-design-system-impeccable.md) §5) na wszystkich 10 stronach - [ ] `trustPoints` w bloku `affiliation` wypełnione ([02](./02-strona-glowna.md) §7) - [ ] FAQ pogrupowane w kategorie + `FAQPage` schema.org ([06](./06-faq.md)) - [ ] Blok `team` naprawiony (bez redundancji z `bio` przy jednej osobie — [05](./05-o-nas.md) §3) - [ ] Warianty rozmiarów obrazów (`imageSizes`) skonfigurowane w Payload - [ ] `hreflang` między `/pl` i `/de` poprawny (hreflang Tags Testing Tool) - [ ] Analytics wdrożone za zgodą, zdarzenie `whatsapp_click` mierzone - [ ] Regulamin świadczenia usług — decyzja podjęta i wdrożona lub świadomie odrzucona z uzasadnieniem ([10](./10-architektura-cms.md) §4) - [ ] Stopka linkuje do FAQ i Stowarzyszenie ([10](./10-architektura-cms.md) §5) - [ ] `styles.css` boilerplate usunięty lub potwierdzony jako nieużywany ([10](./10-architektura-cms.md) §6) - [ ] Lighthouse Accessibility ≥ 95 na kluczowych szablonach ## P3 — opcjonalne / faza 2 - [ ] Sekcja wideo „Co to jest Lohnsteuerhilfe" ([02](./02-strona-glowna.md) §11) - [ ] Formularz kontaktowy jako opcja zapasowa obok WhatsApp ([08](./08-kontakt.md) §3) - [ ] Newsletter (wzorem bbh) — tylko jeśli klient chce prowadzić komunikację cykliczną - [ ] Blog/porady podatkowe (wzorem sekcji „Steuerspar-Tipps" na bbh) — wymaga cyklicznej produkcji treści, nie wdrażać bez zobowiązania klienta do jej utrzymywania ## Weryfikacja końcowa (przed przekazaniem klientowi) 1. `pnpm build --webpack` przechodzi lokalnie bez błędów (`standardy-kodu.md` §7.3) 2. Test ręczny: każda z 10 stron w PL i DE, motyw jasny i ciemny, mobile (375px) + desktop (1440px) — patrz Responsively App / DevTools Device Mode 3. Test klawiaturą: cała strona wyłącznie Tab/Shift+Tab/Enter/Esc 4. `npx impeccable audit` jako ostatni przelot jakości wizualnej 5. Odczytanie własnego diffu przez osobę, która go nie pisała — „czy następny człowiek/agent to zrozumie za pół roku" (`standardy-kodu.md`, kompas senior)