4.1 KiB
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ámkystructure.md— adresářová struktura, routes, API endpointypatterns.md— coding konvence (frontend i backend), CSS architekturamodules.md— detaily modulů (attendance, offers, orders, invoices, projects, atd.)design-system.md— CSS třídy, komponenty, theme tokenssecurity.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 buildsmaž obsahC:\Apache24\htdocsa zkopíruj tamdist/ - DB migrace: SQL soubory ukládej do
sql/, aplikuj přesmysqlpříkaz
Coding Standards
PHP
- PSR-12,
strict_types=1vž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é
anytypy - 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 rawfetch(výjimka:AuthContext.jsx- auth vrstva používá rawfetch, protožeapiFetchna ní závisí)
Data konvence
- Všechny response klíče snake_case (DB sloupce, PHP proměnné, JSON klíče)
$authData['user_id'](neuserId)- camelCase jen tam, kde to vyžaduje React/JS ekosystém (handlery, hooky, props, state)
- Stabilní React keys:
_keyproperty, 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řesuseAlert() - Formulářová validace vždy frontend inline — viz sekce níže
Inline validace formulářů
has-errorclass na.admin-form-group+.admin-form-errorpod 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:
requiredclass 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:
npx eslint src/— 0 errors, 0 warningsvendor/bin/phpcs— 0 errors (warnings tolerovány, ale nepotlačuj je v nastavení)- Build musí projít bez chyb
Pravidla
- Nikdy nečti
.envsoubory - Chrome používej pouze na výslovnou žádost uživatele
- Žádné TODO/FIXME v kódu
- Žádné
console.logv kódu — ani po debugování (console.error jen simport.meta.env.DEVguardem) - Funkce max 50 řádků — u React komponent se počítá logika, ne JSX template
- Permissions: frontend
hasPermission()+<Forbidden />guard, backendrequirePermission()