Files
j_kedzierski/prompts/10-architektura-cms.md
T

9.2 KiB
Raw Blame History

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: zespół ~20 osób blok team na /o-nas Potrzebne dane (imię, nazwisko, rola, opcjonalnie zdjęcie i krótki opis) dla każdej z ~20 osób, żeby wypełnić panel.
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.

Propozycja na przyszłość (Team Modal CTA): W modalu komponentu Zespół (TeamBlock) można dodać dedykowany przycisk CTA "Napisz na WhatsApp" kierujący do https://wa.me/... z prefillowaną wiadomością (np. ?text=Dzień dobry, chciałbym umówić się z [Imię członka zespołu]). Wymaga to akceptacji klienta.


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 §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), 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).