8.9 KiB
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 §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 §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) |
| 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 | 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 §5 | P1 |
affiliation |
wypełnić trustPoints[] (pole już istnieje w schemacie, obecnie puste []) i logo |
patrz 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 §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 i 09 | P1 |
Nowy blok do rozważenia (faza 2, nie blokuje startu): VideoSection
— patrz 02-strona-glowna.md §11.
Nowy element UI (nie blok CMS, komponent globalny): floating WhatsApp
button — patrz 02-strona-glowna.md §0. Dane
(whatsappNumber) już istnieją w globalu Company — tylko brakuje
komponentu w layout.tsx.
3. Media — kolekcja i pipeline
Media.tsma jużnormalizeFilenameHook(zgodnie ze standardem) — bez zmian.- Brak wariantów rozmiarów (
imageSizes) w przejrzanym configu — do dodania zgodnie zwymagania-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 §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ć przezbuildIconsMetadataz pluginu (NIGDY ręcznie w<head>, zgodnie z antywzorcem #favicon wstandardy-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. Wgwymagania-prawne.mdchecklist: „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),
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 wglobals.cssprzez 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_*.tsw repo — robocze skrypty migracyjne z wcześniejszych sesji; jeśli zadania już wykonane i nieaktualne, rozważyć przeniesienie doscripts/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).