Fix FAQFull: Use isDraft boolean for draft filtering, fix Kontakt ID override
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
# Architektura i zmiany w CMS
|
||||
|
||||
Zgodnie z `fundamenty-projektu.md` i `standardy-kodu.md` — zmiany warstwowo:
|
||||
co jest treścią (panel), co strukturą (Payload config), co kodem projektu.
|
||||
Zero hardkodu — każda wartość poniżej ląduje w polu `localized`/`upload`/env,
|
||||
zgodnie z `antigravity-zasady-agent.md` A1–A4.
|
||||
|
||||
---
|
||||
|
||||
## 1. Dane wejściowe od klienta (blokujące, zebrać przed dalszą pracą)
|
||||
|
||||
To jedyna sekcja tego planu, która nie jest decyzją projektową — to lista
|
||||
pytań do Michała/klienta. Bez tego część planu z plików `02`–`09` zostaje na
|
||||
placeholderach niezależnie od tego, jak dobrze zbudowany będzie kod.
|
||||
|
||||
| # | Dane | Gdzie trafia | Status w zipie |
|
||||
|---|---|---|---|
|
||||
| 1 | Realny adres biura | global `Company` | `"DO POTWIERDZENIA PRZEZ KLIENTA"` — dwie sprzeczne wersje w poprzednich ustaleniach (Böhlstraße 2 vs Bismarckstr. 112, Ludwigshafen), **wymaga jednoznacznej odpowiedzi klienta** |
|
||||
| 2 | Realny telefon | global `Company` | placeholder `+49 123 456 789` |
|
||||
| 3 | Realny e-mail | global `Company` | placeholder `[email protected]` |
|
||||
| 4 | Numer WhatsApp (format `49XXXXXXXXX`, bez `+`/spacji) | global `Company.whatsappNumber` | placeholder `49123456789` |
|
||||
| 5 | Zdjęcie Janusza (portret + kontekst pracy) | media, użyte w `hero`, `bio` | brak w paczce |
|
||||
| 6 | Logo b.b.h. Lohnsteuerhilfeverein e.V. | media, użyte w `affiliation.logo`, `Footer.association.logo` | klient wg wcześniejszych ustaleń je posiada — brak w paczce, dostarczyć w wersji wektorowej/PNG na przezroczystym tle |
|
||||
| 7 | Logo/marka własnej firmy Janusza (jeśli istnieje osobne od b.b.h.) | `site-settings.logo`, favicon | brak potwierdzenia czy istnieje |
|
||||
| 8 | Forma prawna działalności, ew. Steuernummer/USt-IdNr. | strony prawne (Impressum) | nieustalone, patrz [09-strony-prawne.md](./09-strony-prawne.md) §1 |
|
||||
| 9 | Czy istnieje formularz członkostwa/składka w ramach b.b.h. (dla treści strony Stowarzyszenie) | `/stowarzyszenie` | nieustalone, patrz [07-stowarzyszenie.md](./07-stowarzyszenie.md) §2 Sekcja D |
|
||||
| 10 | Skala firmy: czy to tylko Janusz, czy zespół | blok `team` na `/o-nas` | dane pokazują 1 osobę — potwierdzić, nie zgadywać (patrz [05-o-nas.md](./05-o-nas.md)) |
|
||||
| 11 | Aktualność progów `18 000 € / 36 000 €` i `§4 Nr. 11 StBerG` na bieżący rok podatkowy | blok `eligibility` | treść już jest, wymaga tylko potwierdzenia aktualności, nie przepisywania |
|
||||
| 12 | Teksty bannera cookies PL/DE | global `Cookie Settings` w panelu | puste w bazie — renderuje się angielski fallback z pluginu, wymaga uzupełnienia |
|
||||
|
||||
---
|
||||
|
||||
## 2. Zmiany w blokach (Payload config + Component)
|
||||
|
||||
| Blok | Zmiana | Powód | Priorytet |
|
||||
|---|---|---|---|
|
||||
| `faqTeaser` → nowy `faqFull` (lub rozszerzenie configu istniejącego) | dodać pole grupowania `category` (opcjonalny text) w `questions[]`, wykorzystywane na `/faq`; `faqTeaser` na home zostaje bez zmian strukturalnych, tylko dodać `ctaText`/`ctaUrl` (wzorem `process`) do linkowania na pełne FAQ | patrz [06-faq.md](./06-faq.md) | P1 |
|
||||
| `servicesList` | dodać pole `linkUrl` per usługa (obecnie tylko `linkText` bez celu linku) | naprawia martwe „Zobacz więcej" na home, patrz [02-strona-glowna.md](./02-strona-glowna.md) §5 | P1 |
|
||||
| `affiliation` | wypełnić `trustPoints[]` (pole już istnieje w schemacie, obecnie puste `[]`) i `logo` | patrz [02-strona-glowna.md](./02-strona-glowna.md) §7 | P1 |
|
||||
| `Team/Component.tsx` | dodać warunek: gdy `members.length === 1`, renderować pojedynczą kartę bez siatki grid (albo pominąć render bloku całkowicie — decyzja klienta, patrz [05-o-nas.md](./05-o-nas.md) §3) | unika redundancji z `bio` | P2 |
|
||||
| `hero` | dodać `id` do sekcji `process` na home (`id="jak-to-dziala"`), żeby `secondaryCta.url` z hero (`#jak-to-dziala`) faktycznie trafiał gdzieś | martwy kotwica-link, błąd funkcjonalny | P1 |
|
||||
| `TextSection` (Impressum/Datenschutz/Cookies/Stowarzyszenie/FAQ dziś) | upewnić się, że pole `text` to `richText`, nie zwykły `textarea` — długie strony prawne potrzebują list, nagłówków, linków w treści, nie jednego bloku tekstu | wymóg funkcjonalny dla treści z [07](./07-stowarzyszenie.md) i [09](./09-strony-prawne.md) | P1 |
|
||||
|
||||
**Nowy blok do rozważenia (faza 2, nie blokuje startu):** `VideoSection`
|
||||
— patrz [02-strona-glowna.md](./02-strona-glowna.md) §11.
|
||||
|
||||
**Nowy element UI (nie blok CMS, komponent globalny):** floating WhatsApp
|
||||
button — patrz [02-strona-glowna.md](./02-strona-glowna.md) §0. Dane
|
||||
(`whatsappNumber`) już istnieją w globalu `Company` — tylko brakuje
|
||||
komponentu w `layout.tsx`.
|
||||
|
||||
---
|
||||
|
||||
## 3. Media — kolekcja i pipeline
|
||||
|
||||
- `Media.ts` ma już `normalizeFilenameHook` (zgodnie ze standardem) — bez zmian.
|
||||
- **Brak wariantów rozmiarów (`imageSizes`)** w przejrzanym configu —
|
||||
do dodania zgodnie z `wymagania-projektowe-strony.md` §6 (P1: „Warianty
|
||||
rozmiarowe generowane przy uploadzie w Payload (sharp)"). Bez tego każde
|
||||
zdjęcie (hero, bio, process) ląduje w pełnej rozdzielczości na każdym
|
||||
urządzeniu — bezpośrednio uderza w LCP (cel < 2,5s), patrz
|
||||
[11-integracje-seo-wydajnosc.md](./11-integracje-seo-wydajnosc.md) §5.
|
||||
- Format: AVIF/WebP w `next.config` (`formats: ['image/avif','image/webp']`)
|
||||
— sprawdzić, czy już ustawione.
|
||||
- Favicon: **brak w danych** (`site-settings.favicon: null`) — wgrać przez
|
||||
panel, renderować przez `buildIconsMetadata` z pluginu (NIGDY ręcznie w
|
||||
`<head>`, zgodnie z antywzorcem #favicon w `standardy-kodu.md` §6).
|
||||
|
||||
---
|
||||
|
||||
## 4. System Pages — role nieprzypisane
|
||||
|
||||
`site-settings.privacyPolicy`, `.cookiePolicy`, `.termsOfService` = `null` dla
|
||||
obu języków. Bez tego `getSystemPagePath` (używane przez baner cookies,
|
||||
stopkę, formularze) nie ma czego zwrócić — linki do polityk będą albo martwe,
|
||||
albo (gorzej) zahardkodowane jako `/pl/polityka-prywatnosci` w obejściu, co
|
||||
łamie zasadę A3 z `antigravity-zasady-agent.md`.
|
||||
|
||||
**Do zrobienia w panelu (nie w kodzie):** Site Settings → System Pages →
|
||||
przypisać:
|
||||
- `homepage` → już ustawione (page 1) ✓
|
||||
- `privacyPolicy` → page 8 (Polityka prywatności / Datenschutzerklärung)
|
||||
- `cookiePolicy` → page 9 (Polityka cookies / Cookie-Richtlinie)
|
||||
- `termsOfService` → **brak strony regulaminu w ogóle w obecnej mapie stron**
|
||||
— do decyzji: czy przy modelu „wizytówka + WhatsApp" (bez zamawiania usług
|
||||
online, bez kont użytkowników) regulamin jest w ogóle wymagany. Wg
|
||||
`wymagania-prawne.md` checklist: „Regulamin — jeśli strona świadczy usługi
|
||||
/ sprzedaż / konta" — tu formalnie świadczona jest usługa doradztwa, więc
|
||||
**rekomendacja: dodać krótki regulamin świadczenia usługi drogą
|
||||
elektroniczną (zakres: korzystanie z formularza kontaktowego/WhatsApp,
|
||||
nie regulamin sklepu)**, konsultowany z prawnikiem klienta, jako 11. strona.
|
||||
Impressum ma częściowo tę rolę po stronie niemieckiej, ale nie zastępuje
|
||||
polskiego wymogu regulaminu usług elektronicznych po stronie PL.
|
||||
|
||||
Satzung/Beitragsordnung (statut i regulamin składek b.b.h., wzorem bbh) — **nie
|
||||
dotyczą tej strony**: to dokumenty SAMEGO stowarzyszenia b.b.h., nie firmy
|
||||
Janusza. Jeśli mają się pojawić, to jako link zewnętrzny do
|
||||
`bbh-lohnsteuerhilfe.de/satzung` w obrębie strony Stowarzyszenie ([07](./07-stowarzyszenie.md)),
|
||||
nie jako własne strony w tym repo.
|
||||
|
||||
---
|
||||
|
||||
## 5. Nawigacja — Header/Footer
|
||||
|
||||
Obecna nawigacja header (5 pozycji: Usługi, Jak się umówić, O nas, kotwica
|
||||
FAQ, Kontakt) pomija bezpośredni link do `/stowarzyszenie` — do rozważenia,
|
||||
czy dodać do głównego menu, czy zostawić jako link wtórny (z bloku
|
||||
`affiliation` + stopki, gdzie już jest). Rekomendacja: **zostawić poza
|
||||
głównym menu** — to strona uzupełniająca, nie ścieżka konwersji; upychanie
|
||||
jej w header rozmywa priorytet (Usługi → Jak się umówić → Kontakt to
|
||||
właściwa ścieżka do WhatsApp, nie przeciążać nawigacji).
|
||||
|
||||
Stopka (`Footer.navigation`) linkuje już do stron 2,3,4,6,8,9,10 — brakuje
|
||||
FAQ (5) i Stowarzyszenie (7) w liście stopki, mimo że istnieją jako strony —
|
||||
**dodać oba do nawigacji stopki**, żeby były osiągalne bez polegania
|
||||
wyłącznie na kotwicach/linkach kontekstowych.
|
||||
|
||||
---
|
||||
|
||||
## 6. Porządki w repo (drobne, ale wpływają na jakość odbioru)
|
||||
|
||||
- `src/app/(frontend)/styles.css` — domyślny boilerplate Payloada
|
||||
(`background: rgb(0,0,0)`, `font-family: system-ui`), realny design system
|
||||
żyje w `globals.css` przez Tailwind `@theme`. Zweryfikować, czy plik jest
|
||||
w ogóle importowany; jeśli nie — usunąć, żeby nie mylić przyszłych sesji
|
||||
co do „gdzie są prawdziwe tokeny" (zgodnie z zasadą jednego źródła prawdy,
|
||||
`standardy-kodu.md` §2.2).
|
||||
- `scripts/update_*.py`, `scripts/fix_*.ts` w repo — robocze skrypty
|
||||
migracyjne z wcześniejszych sesji; jeśli zadania już wykonane i nieaktualne,
|
||||
rozważyć przeniesienie do `scripts/archive/` albo usunięcie, żeby nie
|
||||
myliły co do aktualnego sposobu edycji treści (treść edytuje się przez
|
||||
panel, nie przez skrypty — `architektura-tresci.md`).
|
||||
Reference in New Issue
Block a user