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

2.9 KiB

Zbrane-Reiner-Web

Web Martina Reinera — prodej zbraní, střeliva a doplňků. Prezentace s vlastní administrací obsahu postavená na Payload CMS 3 (Next.js) nad SQLite.

Návrh platformy a zdůvodnění všech rozhodnutí: NAVRH-PLATFORMY.md.

Rychlý start

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:

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.

# 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.