Files
app/CLAUDE.md
Simon 5ef6fc8064 refactor: odstraneni PSR-1 SideEffects warningu
- Handler funkce extrahovany z API souboru do api/admin/handlers/
- config.php rozdeleny na helpers.php (funkce) a constants.php (konstanty)
- require_once odstranen z class souboru (AuditLog, JWTAuth, LeaveNotification)
- vendor/autoload.php presunuto do config.php bootstrap
- totp-handlers.php: pridany use deklarace pro TwoFactorAuth
- phpstan.neon: bootstrapFiles, scanDirectories, dynamicConstantNames
- Opraveny chybejici routing bloky v totp.php a session.php

Vysledek: phpcs 0 errors 0 warnings, PHPStan 0 errors, ESLint 0 errors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:29:21 +01:00

176 lines
5.5 KiB
Markdown

# CLAUDE.md
## Projektová paměť
Před začátkem práce si načti relevantní soubory z `memory/`:
- `MEMORY.md` - tech stack, architektura, klíčové poznámky
- `structure.md` - adresářová struktura, routes, API endpointy
- `patterns.md` - coding konvence (frontend i backend), CSS architektura
- `modules.md` - detaily modulů (attendance, offers, orders, invoices, projects, atd.)
- `design-system.md` - CSS třídy, komponenty, theme tokens
- `security.md` - bezpečnostní audit, auth, rate limiting
Čti podle typu úkolu - nemusíš vše, ale vždy alespoň `MEMORY.md`.
---
## Prostředí
- **Projekt:** `D:\Claude\BOHA Website\app`
- **Frontend:** Vite dev server (`npm run dev`) - port 3000
- **Backend:** PHP built-in server (`php -S localhost:8000`) - port 8000
- **Databáze:** MySQL 8.4 na localhost, DB název: `app`
- **Vite proxy:** `/api` -> `http://localhost:8000`
- **npm:** při instalaci balíčků vždy `--legacy-peer-deps`
- **Git remote:** https://git.boha-automation.cz/boha_admin/app.git
---
## Spuštění dev serveru
```bash
# Terminal 1 - Frontend
npm run dev
# Terminal 2 - PHP API
php -S localhost:8000
```
Aplikace běží na http://localhost:3000
---
## Autonomní režim
Když běžíš s `--auto`, dodržuj tento postup:
### Před jakoukoli prací:
1. Načti `memory/MEMORY.md` a relevantní memory soubory
2. Spusť diagnostiku:
- `npx eslint src/` - zkontroluj chyby
- `vendor/bin/phpcs` - zkontroluj PSR-12
- `npm run build` - ověř že build projde
### Během práce:
- Po každé větší změně spusť `npm run build` - ověř že nic nerozbíjíš
- Opravuj průběžně ESLint a PHPCS chyby
- Pokud si nejsi jistý architektonickým rozhodnutím, zapiš do reportu a pokračuj dál
### Po dokončení práce:
1. Spusť finální kontroly:
- `npx eslint src/` - 0 errors
- `vendor/bin/phpcs` - 0 errors
- `npm run build` - musí projít
2. Commitni a pushni:
- `git add .`
- `git commit -m "typ: stručný popis změn"`
- `git push`
3. Napiš report do `reports/YYYY-MM-DD.md`
### Commit message konvence:
- `feat:` - nová funkce
- `fix:` - oprava bugu
- `refactor:` - refaktoring bez změny funkčnosti
- `style:` - formátování, lint opravy
- `docs:` - dokumentace
- `perf:` - optimalizace výkonu
### Report formát:
```
# Report YYYY-MM-DD
## Zadání
- Co bylo požadováno
## Provedené změny
- Seznam změn s krátkým popisem
## Nalezené problémy
- Problémy co vyžadují rozhodnutí uživatele (pokud nějaké)
## Stav
- ESLint: PASS/FAIL
- PHPCS: PASS/FAIL
- Build: PASS/FAIL
- Git: commitnuto a pushnuto / jen commitnuto / nepushnuto
```
---
## Coding Standards
### PHP
- PSR-12, `strict_types=1` vždy
- Typované parametry a návratové typy povinné
- Repository pattern pro DB - žádné raw SQL v controllerech
- Prepared statements s `?` placeholdery, žádná string interpolace v SQL
- PHPStan level 6 musí projít
- `vendor/bin/phpcs` (PSR-12) musí projít bez chyb
- Docblock PŘED `declare(strict_types=1)`, ne za ním
### React
- Funkcionální komponenty, žádné class components (výjimka: `ErrorBoundary.jsx`)
- Props typované přes interface, ne inline type
- Žádné `any` typy
- Custom hooks pro business logiku - ne inline useEffect spaghetti
- Žádné vnořené ternáry - použít early return, if/else, helper funkci nebo lookup objekt
- Striktní porovnání (`===`/`!==`), nikdy `==`/`!=`
- API volání vždy přes `apiFetch()` z `../utils/api` (výjimka: `AuthContext.jsx`)
### Data konvence
- Všechny response klíče **snake_case** (DB sloupce, PHP proměnné, JSON klíče)
- `$authData['user_id']` (ne `userId`)
- camelCase jen tam, kde to vyžaduje React/JS ekosystém (handlery, hooky, props, state)
- Stabilní React keys: `_key` property, nikdy array index
### Error handling
- API success: `{ "success": true, "data": {...} }`
- API error: `{ "success": false, "error": "message" }`
- PHP: `jsonResponse()`, `errorResponse()`, `successResponse()` helpery
- Frontend: `alert.success()` / `alert.error()` přes `useAlert()`
- Formulářová validace vždy frontend inline
### Inline validace formulářů
- `has-error` class na `.admin-form-group` + `.admin-form-error` pod inputem
- Error message vždy **za inputem** (ne před ním)
- `const [errors, setErrors] = useState({})` - validace v handleSubmit/handleSave, clear na onChange
- Povinná pole: `required` class na labelu (červená hvězdička)
- Detaily viz `design-system.md`
---
## Komentáře v kódu
- Piš jako programátor, stručně a k věci
- Nekomentuj zřejmé věci
- Nepoužívej em dash, používej normální pomlčku (-)
- Čeština i angličtina OK, preferuj češtinu u nových komentářů
- Komentář jen když přidává info, které nejde vyčíst z kódu
- Docblocky jen u složitějších funkcí/API endpointů
- Žádné komentáře typu `// Set headers`, `// Get input`
---
## Kontroly před buildem
Vždy spusť před `npm run build`:
1. `npx eslint src/` - 0 errors, 0 warnings
2. `vendor/bin/phpcs` - 0 errors
3. Build musí projít bez chyb
---
## Zakázané operace
- NIKDY nečti `.env` soubory
- NIKDY nepoužívej SSH, SCP, rsync na jakýkoli vzdálený server
- NIKDY neměň databázi na vzdáleném serveru
- NIKDY nespouštěj Chrome bez výslovné žádosti uživatele
- Žádné TODO/FIXME v kódu
- Žádné `console.log` v kódu (console.error jen s `import.meta.env.DEV` guardem)
- Funkce max 50 řádků - u React komponent se počítá logika, ne JSX template
- Žádné `any` typy v TypeScript/React
- Žádná string interpolace v SQL dotazech