# Przegląd, strategia i workflow — poprawa strony j_kedzierski **Klient:** Dipl.-Ing. Janusz Kędzierski, Finanz- & Lohnbuchhaltung — Beratungsstelle b.b.h. Lohnsteuerhilfeverein e.V. (§4 Nr. 11 StBerG) **Cel biznesowy:** wizytówka + pozyskiwanie klientów (Polacy pracujący w Niemczech, rozliczenie po polsku) — nie e-commerce, nie SaaS. Konwersja = kontakt na WhatsApp. **Stack:** Payload CMS 3 + Next.js 16.3.3 + React 19 + Tailwind 4 + Framer Motion + `@intecion/ipal-kit`. Repo: `j_kedzierski` (folder `kedzierski_website` na Macu). Ten plik spina wszystkie pozostałe. Przeczytaj go pierwszy — reszta plików zakłada, że decyzje z sekcji 2 i 4 są już podjęte. --- ## 1. Co faktycznie jest w zipie (audyt, nie domysły) Rozpakowałem `j_kedzierski.zip` i przeczytałem `scripts/content-snapshot.json` (pełny zrzut wszystkich 10 stron PL+DE + globali) zamiast zakładać stan projektu. Stan faktyczny: ### 1.1 Co jest zrobione dobrze (Antigravity, faza „kod i logika") - Payload 3 + Next 16 + ipal-kit poprawnie zszyte: i18n PL/DE, `proxy.ts` (nie middleware), kolekcje `Pages`/`Media`/`Users`, globale `Header`/`Footer`/`Company` + `site-settings` z pluginu. - **17 bloków** już zbudowanych i podłączonych do `RenderBlocks`: Hero, TrustBar, UniqueValue, Stats, ServicesList, Process, Affiliation, Testimonials, FAQTeaser, FinalCTA, PageHeader, ServicesDetailed, Eligibility, ContactInfo, Bio, Team, TextSection. - Hero ma już realną robotę: Framer Motion stagger na tekst, 3D-parallax na zdjęcie (`useParallax3D`, pointer-tracked rotateX/rotateY), floating stat card. To nie jest szkielet — to działający, dopracowany komponent. - Motyw jasny/ciemny (`next-themes`, `data-theme`) działa, przełącznik jest. - **Design tokeny już wybrane i wdrożone** w `globals.css` (Tailwind 4 `@theme`): ciepłe tło papieru `#F7F5F1`, atrament `#1C1B1A`, akcent pieczęć-czerwień `#A13D2C` (hover `#8A3324`), karta biała, border `#E2DDD3`, radius przycisku 6px (nie „pill"). Ciemny motyw: tło `#17140F`, akcent `#D4634A`. Fonty: **Fraunces** (nagłówki, serif) + **Public Sans** (body). - Treść tekstowa homepage, usług, procesu i „o nas" jest już napisana — dobrej jakości, konkretna, PL i DE, nie jest to placeholder AI-lorem. ### 1.2 Realne braki (to jest do zrobienia, nie do zgadywania) | Obszar | Stan faktyczny w zipie | |---|---| | Zdjęcia | Każdy blok ma `"image": 1` — czyli wskazuje na media ID 1, ale w paczce **nie ma żadnego pliku graficznego**. Zero zdjęć, zero logo, zero favicon. | | Dane firmy | `address: "DO POTWIERDZENIA PRZEZ KLIENTA"`, `phone: "+49 123 456 789"`, `email: "kontakt@example.com"`, `whatsappNumber: "49123456789"` — wszystko placeholder. | | Strony prawne | Impressum, Polityka prywatności, Polityka cookies, Stowarzyszenie: treść = `"Treść w przygotowaniu"` / `"Inhalt in Vorbereitung"`. Puste. | | FAQ (strona) | Też `TextSection` placeholder — mimo że homepage ma już `faqTeaser` z 8 pytaniami. Brak pełnej listy/kategoryzacji. | | System Pages | `privacyPolicy`, `cookiePolicy`, `termsOfService` w `site-settings` = `null`. Role nieprzypisane → `getSystemPagePath` nie zadziała, linki w stopce/bannerze cookies będą martwe. | | Baner cookies | Brak w kodzie `ConsentProvider`/`CookieBanner` w przejrzanych plikach — do potwierdzenia przy realizacji, patrz [11](./11-integracje-seo-wydajnosc.md). | | Wygląd (Impeccable) | **Nie uruchomiony ani razu.** `styles.css` w `(frontend)` to nadal domyślny boilerplate Payloada (czarne tło, `font-family: system-ui`) — nieużywany, ale zostawiony w repo (do usunięcia, patrz [10](./10-architektura-cms.md)). Realny design system żyje w `globals.css`, ale nikt jeszcze nie przepuścił żadnej strony przez `/impeccable polish`/`audit`/`document`. | | Formularz kontaktowy | Nie istnieje — jest tylko `contactInfo` (statyczne dane: adres/telefon/email/godziny). Cała konwersja opiera się o link do WhatsApp w `finalCta`/`hero`. | **Wniosek:** to NIE jest projekt od zera. Faza „Antigravity" (funkcjonalność, edytowalność, treść) jest w ~80% zrobiona i solidna. Brakuje: (a) prawdziwych danych i zdjęć klienta, (b) treści na stronach prawnych/FAQ/stowarzyszenie, (c) całej fazy „Impeccable" — wizualnego dopracowania, animacji scrollowania, efektów — którą ten plan rozpisuje sekcja po sekcji. --- ## 2. Rozstrzygnięcie: bbh-lohnsteuerhilfe.de jako wzorzec — czego dokładnie Sprawdziłem aktualną `bbh-lohnsteuerhilfe.de` (live). To generyczna strona na Astro, wizualnie przeciętna: header z dużym menu, slider-hero ze zdjęciem stockowym, sekcja usług jako tekst z listą, blok wideo, teaser porad podatkowych („Steuerspar-Tipps"), jeden cytat-pull-quote, newsletter, stopka z adresem i linkami Impressum/Datenschutz/Satzung/Beitragsordnung, plakietki zaufania („Verschlüsselte Verbindung", „Server in Deutschland"). **Decyzja (przyjmuję jako założenie — popraw mnie, jeśli chodziło o coś innego):** biorę z bbh **strukturę i sygnały zaufania branży**, nie warstwę wizualną. Wizualnie bbh wygląda dokładnie jak to, czego już raz się pozbyliśmy w tym projekcie („AI slop"/generic — patrz historia ustaleń w `.agents/context`) — kopiowanie 1:1 jego stylu byłoby krokiem wstecz względem tokenów, które już są w `globals.css` i które są dobrym, nietuzinkowym kierunkiem dla biura podatkowego (ciepły papier + pieczęć = metafora „dokumentu urzędowego", a nie kolejny SaaS). Zamiast przepisywać paletę bbh, **przenoszę z niego wzorce, które faktycznie konwertują w tej branży**: | Z bbh bierzemy (treść/UX) | Z bbh NIE bierzemy (wizualnie) | |---|---| | „Znajdź doradcę" / silny, jeden CTA nad zgięciem | Generyczny header z rozwijanym mega-menu | | Sekcja „co to jest Lohnsteuerhilfe" (edukacja + wideo) | Stockowe zdjęcie slidera na cały ekran | | Teaser porad podatkowych jako sygnał eksperckości | Płaska siatka kart bez hierarchii | | Pull-quote klienta jako emocjonalny dowód społeczny | Domyślna typografia (system sans, brak charakteru) | | Plakietki zaufania w stopce (szyfrowanie, serwery w UE) | Newsletter jako główny CTA (u nas to WhatsApp) | | Linki Satzung/Beitragsordnung jako PDF w stopce | Brak spójnego motion/scroll storytellingu | | Adres, telefon, godziny zawsze widoczne | — | Kierunek wizualny: **ciepły „dokument urzędowy", nie SaaS** — już potwierdzony w kodzie (papier/pieczęć/Fraunces). Ten plan go **dociąga do poziomu „petarda"**: teksturę papieru, subtelne linie jak w formularzu podatkowym, akcenty pieczęci/ stempla, mikro-interakcje przy scrollowaniu, sekcję wideo i realne social proof — wszystko przepuszczone przez Impeccable, żeby nie zjechać w stronę żadnego z 61 wzorców AI-slop (pełna lista w [01](./01-design-system-impeccable.md)). Jeśli w istocie chodziło o dosłowne przejęcie wyglądu bbh (kolory, font, układ) — to jest jedyne założenie w tym planie, które warto zweryfikować przed startem budowy; reszta dokumentu nie zależy od tej decyzji. --- ## 3. Kolejność plików w tym planie | Plik | Zawartość | |---|---| | `00-przeglad-strategia-i-workflow.md` | Ten plik. Audyt, decyzja stylu, workflow. | | `01-design-system-impeccable.md` | PRODUCT.md, DESIGN.md, paleta/typografia/motion, kolejność komend Impeccable, checklista anty-slop. | | `02-strona-glowna.md` | Home — sekcja po sekcji: treść, zdjęcia, animacje, tło, scroll. | | `03-uslugi.md` | Usługi / Leistungen. | | `04-jak-sie-umowic.md` | Jak się umówić / Terminvereinbarung. | | `05-o-nas.md` | O nas / Über uns. | | `06-faq.md` | FAQ — pełna strona (obecnie placeholder). | | `07-stowarzyszenie.md` | Stowarzyszenie / Verein — pełna treść (obecnie placeholder). | | `08-kontakt.md` | Kontakt. | | `09-strony-prawne.md` | Impressum, Datenschutz, Cookie-Richtlinie — treść robocza + granica odpowiedzialności. | | `10-architektura-cms.md` | Zmiany w kolekcjach/blokach/globalach, media, System Pages, sitemapa URL. | | `11-integracje-seo-wydajnosc.md` | WhatsApp, formularz, SEO/schema.org, analytics za zgodą, bezpieczeństwo, wydajność. | | `12-checklist-odbioru.md` | Skrócona, spriorytetyzowana checklista odbioru pod ten konkretny projekt. | --- ## 4. Workflow realizacji (Antigravity + Impeccable, w tej kolejności) Zgodnie z `architektura-tresci.md`: **Antigravity najpierw (funkcjonalność), Impeccable potem (wygląd)**. Tu funkcjonalność w ~80% już jest, więc kolejność: 1. **Dane wejściowe od klienta** (blokujące wszystko inne — patrz [10](./10-architektura-cms.md) §1): realny adres, telefon, e-mail, numer WhatsApp, logo/zdjęcie Janusza, ew. zdjęcia biura. Bez tego część sekcji zostaje na placeholderach. 2. **Antigravity — uzupełnienia funkcjonalne**: nowe pola/bloki wymagane przez ten plan (FAQ accordion, treść Stowarzyszenie, System Pages role, WhatsApp floating button, ew. formularz kontaktowy) — patrz [10](./10-architektura-cms.md) i [11](./11-integracje-seo-wydajnosc.md). Zero stylowania ad hoc na tym etapie (zgodnie z A6.8 w `antigravity-zasady-agent.md`). 3. **Impeccable `/impeccable init`** → wygeneruj `PRODUCT.md` (gotowa treść w [01](./01-design-system-impeccable.md) §1 — do wklejenia/potwierdzenia). 4. **Impeccable `/impeccable document`** → wygeneruj `DESIGN.md` z istniejących tokenów w `globals.css` (Impeccable powinien je wykryć automatycznie — zweryfikuj wynik względem tabeli w [01](./01-design-system-impeccable.md) §2). 5. Dla każdej podstrony, w kolejności home → usługi → jak się umówić → o nas → FAQ → stowarzyszenie → kontakt → prawne: `/impeccable polish` z konkretnym promptem sekcja-po-sekcji z odpowiedniego pliku (`02`–`09`) → `npx impeccable detect` na zbudowanej stronie → popraw findings → `/impeccable audit` jako ostateczna kontrola jakości. 6. **`/impeccable animate`** na sekcjach, które w planie mają oznaczone efekty scrollowania (hero, proces, statystyki, sekcja zaufania) — pojedynczo, nie hurtowo, żeby nie przesadzić z ruchem (patrz zasada „Motion" w [01](./01-design-system-impeccable.md) §4). 7. Po wszystkich stronach: jeden przelot `/impeccable critique` na całości, potem checklista z [12](./12-checklist-odbioru.md). **Zasada obowiązująca cały czas:** żadna treść, obraz ani link nie ląduje na sztywno w JSX — wszystko przez panel Payload (pole `localized`, `upload→media`, `relationship→pages`), zgodnie z `architektura-tresci.md` i twardymi zakazami w `antigravity-zasady-agent.md` (A1–A4). Ten plan opisuje TREŚĆ i WYGLĄD, które mają trafić do pól CMS — nie jest to specyfikacja tekstu zaszytego w komponencie.