Files
app/CLAUDE.md
2026-03-12 12:43:56 +01:00

4.1 KiB

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í

  • Dev server: Apache WAMP → C:\Apache24\htdocs
  • PHP/MySQL: v systémovém PATH (php -v, mysql -u root)
  • npm: při instalaci balíčků vždy --legacy-peer-deps (eslint peer conflict)
  • Deploy (dev): po každém npm run build smaž obsah C:\Apache24\htdocs a zkopíruj tam dist/
  • DB migrace: SQL soubory ukládej do sql/, aplikuj přes mysql příkaz

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 - React nemá hook pro error boundaries)
  • 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 — nikdy raw fetch (výjimka: AuthContext.jsx - auth vrstva používá raw fetch, protože apiFetch na ní závisí)

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 — viz sekce níže

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 — posouvá layout)
  • 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 (setUser(null), getAccessToken())
  • 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 (důvod, workaround, gotcha)
  • 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 (warnings tolerovány, ale nepotlačuj je v nastavení)
  3. Build musí projít bez chyb

Pravidla

  • Nikdy nečti .env soubory
  • Chrome používej pouze na výslovnou žádost uživatele
  • Žádné TODO/FIXME v kódu
  • Žádné console.log v kódu — ani po debugování (console.error jen s import.meta.env.DEV guardem)
  • Funkce max 50 řádků — u React komponent se počítá logika, ne JSX template
  • Permissions: frontend hasPermission() + <Forbidden /> guard, backend requirePermission()