Fix FAQFull: Use isDraft boolean for draft filtering, fix Kontakt ID override

This commit is contained in:
MichalC
2026-09-16 12:31:19 +02:00
parent 437e1e4823
commit 9043301da6
140 changed files with 23337 additions and 724 deletions
+156
View File
@@ -0,0 +1,156 @@
# 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: "[email protected]"`, `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.