- Mobile responsive CSS (touch targets 44px, iOS anti-zoom, reduced motion) - Vitest setup s 39 testy (formatters, attendanceHelpers, useTableSort) - Klavesove zkratky (Shift+? napoveda, Ctrl+S ulozit, navigace) - Drag & drop pro polozky nabidek (@dnd-kit, SortableRow, useSortableList) - Univerzalizace: odstraneni BOHA brandingu z UI, emailu, PDF - Smazany nepotrebne soubory (deploy.sh, AUTH_SYSTEM.md, example_design, .htaccess) - CORS konfigurovatelny pres env promennou Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.6 KiB
5.6 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í
- 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
- Git credentials: uloženy v
~/.git-credentials(credential.helper=store), push funguje bez zadávání hesla
Spuštění dev serveru
# 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í:
- Načti
memory/MEMORY.mda relevantní memory soubory - Spusť diagnostiku:
npx eslint src/- zkontroluj chybyvendor/bin/phpcs- zkontroluj PSR-12npm 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:
- Spusť finální kontroly:
npx eslint src/- 0 errorsvendor/bin/phpcs- 0 errorsnpm run build- musí projít
- Commitni a pushni:
git add .git commit -m "typ: stručný popis změn"git push
- Napiš report do
reports/YYYY-MM-DD.md
Commit message konvence:
feat:- nová funkcefix:- oprava bugurefactor:- refaktoring bez změny funkčnostistyle:- formátování, lint opravydocs:- dokumentaceperf:- 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=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) - 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(výjimka:AuthContext.jsx)
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
Inline validace formulářů
has-errorclass na.admin-form-group+.admin-form-errorpod 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:
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
- 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:
npx eslint src/- 0 errors, 0 warningsvendor/bin/phpcs- 0 errors- Build musí projít bez chyb
Zakázané operace
- NIKDY nečti
.envsoubory - 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.logv kódu (console.error jen simport.meta.env.DEVguardem) - Funkce max 50 řádků - u React komponent se počítá logika, ne JSX template
- Žádné
anytypy v TypeScript/React - Žádná string interpolace v SQL dotazech