Parent PRD
#53
Type
AFK
What to build
Trzy spiniające się elementy jednego pionu:
- Treść build-time:
content.json importowany statycznie (koniec fetch w runtime); hook treści synchroniczny — znika logika stanów ładowania i null-guardy (if (!hero) return null). Kształt pilnowany typami TS (rozszerz/aktualizuj typy razem z JSON).
- BrowserRouter: zmiana routingu z hash na BrowserRouter; wewnętrzne linki
/... bez #; ScrollToTop zachowany; reguła wewnętrzne (/) vs zewnętrzne (<a target="_blank" rel="noopener noreferrer">) bez zmian.
- Prerender w buildzie: własny lekki skrypt (React SSR) renderujący statyczny HTML każdej trasy z pełną treścią + generacja
404.html (fallback deep-linków na GH Pages) + szkielet sitemap.xml. Efekt: view-source dowolnej trasy pokazuje treść bez uruchamiania JS.
Kontekst: PRD #53 → Implementation Decisions (Treść / Routing / Prerender); plan plans/landing-upgrade.md Faza 2.
Assumptions
Out of scope for this issue
Acceptance criteria
How to verify
yarn build — exit 0
- Otwórz zbudowany HTML dla
/ i dla np. /products — treść hero/produktów obecna w źródle strony
- Sprawdź istnienie
dist/404.html i dist/sitemap.xml
yarn preview — klikaj po nawigacji: URL zmienia się bez #, bez pełnych przeładowań; głęboki link (odświeżenie na /products) działa przez fallback 404
yarn test && yarn lint — exit 0
Blocked by
User stories addressed
- User story 12 (część: statyczny HTML per trasa)
- User story 18 (treść JSON bez dotykania komponentów)
Parent PRD
#53
Type
AFK
What to build
Trzy spiniające się elementy jednego pionu:
content.jsonimportowany statycznie (koniec fetch w runtime); hook treści synchroniczny — znika logika stanów ładowania i null-guardy (if (!hero) return null). Kształt pilnowany typami TS (rozszerz/aktualizuj typy razem z JSON)./...bez#; ScrollToTop zachowany; reguła wewnętrzne (/) vs zewnętrzne (<a target="_blank" rel="noopener noreferrer">) bez zmian.404.html(fallback deep-linków na GH Pages) + szkieletsitemap.xml. Efekt: view-source dowolnej trasy pokazuje treść bez uruchamiania JS.Kontekst: PRD #53 → Implementation Decisions (Treść / Routing / Prerender); plan
plans/landing-upgrade.mdFaza 2.Assumptions
base: '/';content.jsoni obrazy serwowane z roota — bez zmian.Out of scope for this issue
Acceptance criteria
dist/]dist/zawiera HTML per trasa +404.html+sitemap.xml— [observable: zawartość katalogu build]#— [observable: test ręczny wyarn preview]loadingw DOM]yarn build && yarn test]How to verify
yarn build— exit 0/i dla np./products— treść hero/produktów obecna w źródle stronydist/404.htmlidist/sitemap.xmlyarn preview— klikaj po nawigacji: URL zmienia się bez#, bez pełnych przeładowań; głęboki link (odświeżenie na/products) działa przez fallback 404yarn test && yarn lint— exit 0Blocked by
User stories addressed