# Zbrane-Reiner-Web — cíle a stav projektu > Prezentační web s vlastní administrací pro Martina Reinera (prodej zbraní, > střeliva a doplňků). Majitel si sám spravuje nabídku přes přihlášení na webu. > > Návrh platformy a zdůvodnění rozhodnutí: [NAVRH-PLATFORMY.md](NAVRH-PLATFORMY.md). ## 1. Cíl a rozsah **MVP obsah:** - **Nabídka** — položky s obrázky, volnými parametry (ráže, délka hlavně…), cenou a dostupností. - **Detail položky** — galerie, tabulka parametrů, popis. - **Statické stránky** — kontakt, otevírací doba, o nás. **Administrace:** - Přihlášení e-mailem a heslem na `/admin`. - Přidat / upravit / odebrat položku, nahrát obrázky. - Jediný účet majitele, žádná veřejná registrace, žádné role. **Mimo rozsah (zatím):** košík a platby, zákaznické účty, sklad, rezervace, vyhledávání a filtrování, vícejazyčnost. ## 2. Technologický stack | Vrstva | Volba | |---|---| | CMS + web | Payload CMS 3 (jedna Next.js aplikace) | | Framework | Next.js 16, React 19 | | Databáze | SQLite (`@payloadcms/db-sqlite`) | | Obrázky | sharp, zmenšeniny `nahled` a `detail` | | Styly | jeden CSS soubor, bez frameworku | | Testy | vitest (integrační, proti reálné databázi) | | Lint | ESLint 9 flat config (`eslint-config-next`) | | Kontejnerizace | Docker + docker compose | | Reverzní proxy | Caddy (HTTPS přes Let's Encrypt) | | Registry | Gitea Container Registry | | CI | Gitea Actions | ## 3. Fáze vývoje | Fáze | Obsah | Stav | |---|---|---| | 0 | Návrh platformy, volba stacku | ✅ hotovo | | 1 | Scaffold, kolekce, veřejný web, CI, Docker | ✅ hotovo | | 2 | Nasazení na server, Caddy, doména, zálohy | ⬜ čeká na doménu a IP | | 3 | Obsah — skutečné položky, texty, fotky | ⬜ | | 4 | Vzhled podle představy klienta | ⬜ | | 5 | Filtrování podle kategorie, vyhledávání | ⬜ nice-to-have | ## 4. Otevřené otázky Vedené v [NAVRH-PLATFORMY.md, sekce 10](NAVRH-PLATFORMY.md#10-otevřené-otázky): skutečná doména, umístění Caddy vůči Dockeru, IP serveru. ## 5. Rozhodnutí, která stojí za připomenutí - **SQLite, ne Postgres** — na obrázek, pár parametrů a cenu s jedním editorem by Postgres přidal službu, heslo a druhý bod selhání bez užitku. - **Parametry jako volný seznam dvojic**, ne pevná pole — u pušky, pistole a střeliva se liší a pevná pole by znamenala migraci při každém sortimentu. - **Stránky jsou `force-dynamic`** — statický prerender by znamenal, že se úprava položky projeví až po přestavění webu. - **Schéma se nedomýšlí za běhu** (`push: false`) — migrace se commitují a v produkci se přehrají při startu kontejneru. Výjimkou jsou testy.