Scaffold webu na Payload CMS 3 + Next.js nad SQLite
CI / test (push) Failing after 1m42s
CI / build-and-push (push) Has been skipped

Kostra prezentace s vlastní administrací pro Martina Reinera.

Obsah:
- kolekce Products (obrázky, volné parametry, cena, dostupnost, skrytí),
  Media se zmenšeninami, Pages, Users bez veřejné registrace
- veřejná část: výpis nabídky, detail položky, statické stránky
- /api/health pro Docker HEALTHCHECK

Provoz:
- Dockerfile, docker-compose.yml (vývoj) a docker-compose.prod.yml
  (nasazení z Gitea registry)
- CI v Gitea Actions: lint -> testy -> build -> push image
- úvodní migrace databáze

Stránky jsou force-dynamic, aby se úprava položky projevila hned;
schéma se za běhu nedomýšlí (push: false), migrace se commitují.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-30 13:13:23 +02:00
co-authored by Claude Opus 5
parent fedccbee93
commit c8e435139e
49 changed files with 13152 additions and 49 deletions
+67
View File
@@ -0,0 +1,67 @@
# 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.