Files
Zbrane-Reiner-Web/README.md
T
HonzaandClaude Opus 5 c8e435139e
CI / test (push) Failing after 1m42s
CI / build-and-push (push) Has been skipped
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>
2026-07-30 13:13:23 +02:00

88 lines
2.9 KiB
Markdown

# Zbrane-Reiner-Web
Web Martina Reinera — prodej zbraní, střeliva a doplňků. Prezentace s vlastní
administrací obsahu postavená na [Payload CMS 3](https://payloadcms.com/)
(Next.js) nad SQLite.
Návrh platformy a zdůvodnění všech rozhodnutí: [NAVRH-PLATFORMY.md](NAVRH-PLATFORMY.md).
## Rychlý start
```bash
cp .env.example .env # vyplň PAYLOAD_SECRET
pnpm install
pnpm payload migrate # založí databázi v data/
pnpm dev # http://localhost:3000
```
První účet se založí sám při prvním otevření `/admin`.
> Node se v repu nepředpokládá nainstalovaný globálně — pokud ho nemáš, jde
> všechno pustit v kontejneru:
> `docker run --rm -it -v "$PWD:/app" -w /app -p 3000:3000 node:22-alpine sh`
## Struktura
```
src/
├─ collections/ # schéma obsahu — Products, Media, Pages, Users
├─ app/(frontend)/ # veřejný web
│ ├─ page.tsx # výpis nabídky
│ ├─ nabidka/[slug]/ # detail položky
│ ├─ [slug]/ # statické stránky z kolekce Pages
│ └─ api/health/ # endpoint pro Docker HEALTHCHECK
├─ app/(payload)/ # administrace, generuje Payload
├─ lib/format.ts # formátování ceny a stavu
└─ payload.config.ts
migrations/ # verzované DB migrace, commitují se
```
## Příkazy
| Příkaz | Co dělá |
|---|---|
| `pnpm dev` | vývojový server s hot-reloadem |
| `pnpm lint` | ESLint nad `src` a `tests` |
| `pnpm test` | integrační testy (vitest) |
| `pnpm build` | produkční build, uvnitř i kontrola typů |
| `pnpm generate:types` | přegeneruje `src/payload-types.ts` ze schématu |
| `pnpm payload migrate:create <nazev>` | vytvoří migraci po změně schématu |
| `pnpm payload migrate` | přehraje migrace |
## Změna schématu obsahu
Schéma se nedomýšlí za běhu (`push: false`) — po každé úpravě kolekce:
```bash
pnpm generate:types
pnpm payload migrate:create nazev-zmeny
pnpm payload migrate
```
Migraci commitni. V produkci se přehraje sama při startu kontejneru.
Výjimkou jsou testy, kde se schéma odvodí z konfigurace, takže každý běh
startuje nad prázdnou databází.
## Nasazení
CI (Gitea Actions) postaví image a nahraje ho do Gitea registry; server si ho
jen stáhne. Celý postup včetně větví, tagů a rollbacku je v
[NAVRH-PLATFORMY.md, sekce 7](NAVRH-PLATFORMY.md#7-deploy).
```bash
# na serveru
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d
```
| Větev | Prostředí | Tag image | Port |
|---|---|---|---|
| `release` | produkce | `latest` | 3000 |
| `devel` | staging | `devel` | 3001 |
## Data a zálohy
Veškerý stav jsou dva adresáře — `data/` (SQLite) a `media/` (nahrané
obrázky), v produkci Docker volumes. Databáze je **jediná kopie obsahu**,
v gitu není. Zálohování viz [NAVRH-PLATFORMY.md, sekce 8](NAVRH-PLATFORMY.md#8-zálohy).