Scaffold webu na Payload CMS 3 + Next.js nad SQLite
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:
+67
@@ -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.
|
||||
Reference in New Issue
Block a user