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
+75 -49
View File
@@ -1,61 +1,87 @@
# Dokumentace
# Zbrane-Reiner-Web
Personal development documentation — guidelines, conventions, and templates for my projects, structured for use with AI coding assistants.
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.
## Purpose
Návrh platformy a zdůvodnění všech rozhodnutí: [NAVRH-PLATFORMY.md](NAVRH-PLATFORMY.md).
This repository is the single source of truth for how I develop software. AI assistants (Claude Code, Cursor, Copilot) are given these documents at the start of each session to understand my conventions before touching any code.
## Rychlý start
## Structure
```
Dokumentace/
├── Claude/ # AI assistant configuration
│ ├── CLAUDE.md # Claude Code session instructions
│ ├── AGENTS.md # Rules for all AI assistants
│ └── skills/ # Custom Claude Code skills
├── Python/ # Python development guidelines
│ ├── DESIGN_DOCUMENT.md # Guidelines for Python applications
│ ├── DESIGN_DOCUMENT_MODULE.md # Guidelines for Python libraries
│ ├── TEMPLATE.md # New project template specification
│ └── prebuild.py # Pre-build script (PyInstaller)
├── Rust/ # Rust development guidelines
│ ├── DESIGN_DOCUMENT.md # Guidelines for Rust applications
│ └── DESIGN_DOCUMENT_LIB.md # Guidelines for Rust libraries
├── Project template/ # Reusable files for new projects
│ ├── CHANGELOG.md # Changelog template
│ └── PROJECT.md # Project documentation template
└── Zscaler/ # Corporate network setup
├── NODE_EXTRA_CA_CERTS.md # Instructions for Zscaler cert
└── ZscalerRootCertificate-2048-SHA256.crt
```bash
cp .env.example .env # vyplň PAYLOAD_SECRET
pnpm install
pnpm payload migrate # založí databázi v data/
pnpm dev # http://localhost:3000
```
## AI Coding Workflow
První účet se založí sám při prvním otevření `/admin`.
Each project references these documents so AI assistants operate within consistent rules:
> 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`
- **AGENTS.md** — language-agnostic rules: dependency management, testing, logging, git, versioning
- **DESIGN_DOCUMENT.md** — Python-specific: code style, tooling (Ruff, mypy, pytest, Poetry), project structure, logging with loguru, distribution via PyInstaller
- **DESIGN_DOCUMENT_MODULE.md** — same as above, adapted for Python libraries (no sinks, no `.env`, PyPI distribution)
## Struktura
## Languages Covered
```
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
```
| Language | Guidelines |
|----------|-----------|
| Python (application) | `Python/DESIGN_DOCUMENT.md` |
| Python (library) | `Python/DESIGN_DOCUMENT_MODULE.md` |
| Rust (application) | `Rust/DESIGN_DOCUMENT.md` |
| Rust (library) | `Rust/DESIGN_DOCUMENT_LIB.md` |
## Příkazy
## Key Conventions
| 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 |
- **Python tooling:** Poetry · Ruff · mypy · pytest · loguru
- **No print() for debugging** — loguru everywhere
- **Type hints required** on all functions
- **Tests:** pytest only, no unittest, no mocks of the database
- **Versioning:** semantic, always ask before bumping
- **Secrets:** `.env` + `python-dotenv`, never committed
## 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).