# Changelog Formát podle [Keep a Changelog](https://keepachangelog.com/cs/1.1.0/), verzování [sémantické](https://semver.org/lang/cs/). ## [Nevydáno] ### Přidáno - Kostra projektu na Payload CMS 3 + Next.js 16 nad SQLite. - Kolekce `Products` (obrázky, volné parametry, cena, dostupnost, skrytí), `Media` (zmenšeniny `nahled` a `detail`), `Pages`, `Users`. - Veřejná část: výpis nabídky, detail položky, statické stránky. - Administrace na `/admin` s vypnutou veřejnou registrací a zamykáním účtu po pěti neúspěšných pokusech. - Endpoint `/api/health` pro Docker HEALTHCHECK. - Produkční `Dockerfile`, `docker-compose.yml` pro vývoj a `docker-compose.prod.yml` pro nasazení z Gitea registry. - CI v Gitea Actions: lint → testy → build → push image. - Úvodní migrace databáze. - Proměnná `CSRF_ORIGINS` pro případy, kdy se admin otevírá i z jiné adresy, než je `NEXT_PUBLIC_SERVER_URL` (typicky po IP v LAN). Bez ní Payload odmítal veškeré zápisy včetně nahrávání obrázků chybou 403. - Kategorie jako vlastní kolekce s názvem, pořadím, úvodním obrázkem a popisem. Položka na ni odkazuje vazbou místo dřívějšího pevného výběru, takže rozšíření sortimentu nevyžaduje zásah do kódu. - Tříúrovňová nabídka: úvodní stránka vypisuje kategorie jako dlaždice s počtem položek, `/kategorie/` zboží v kategorii a detail zůstává na `/nabidka/`. Plochá adresa detailu je záměr — přeřazení položky do jiné kategorie tak nerozbije odkazy. - Grafika: silueta lesa přes celou šířku nad patičkou a terč jako velký nehybný vodoznak v pozadí stránky. Obojí je vloženo jako CSS maska — zdrojové PNG nese jen průhlednost a barvu řídí CSS, takže to funguje ve světlém i tmavém motivu. Výška siluety se odvozuje z poměru stran obrázku, aby se neořezávaly špičky stromů. ### Opraveno - Adresáře `data/` a `media/` jsou v repu přes `.gitkeep`. SQLite si adresář nevytvoří, takže po čerstvém `git clone` padaly testy i `payload migrate` na `SQLITE_CANTOPEN` (kód 14) — projevilo se to až v CI. - Obrázky se na webu nezobrazovaly. Payload vrací absolutní URL podle `serverURL`, což `next/image` bere jako cizí zdroj a bez `remotePatterns` odmítne s HTTP 400 „url parameter is not allowed". Do `next/image` se nově posílá jen cesta — soubor leží na stejném originu a stejný image tak funguje na stagingu i v produkci, kde se domény liší. - Stránky založené v administraci se nikde neobjevily. Navigace byla napsaná natvrdo a odkazovala na `/kontakt`, i když stránka s tím slugem nemusela existovat (odtud 404). Menu se teď skládá z kolekce Pages. - Slug se u stránek i položek normalizuje — vedoucí lomítko (`/kontakt`) vyrábělo odkaz `href="//kontakt"`, který prohlížeč čte jako jméno cizího serveru.