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:
@@ -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).
|
||||
|
||||
Reference in New Issue
Block a user