--- description: Основной промт/правила для проекта craftshop (client+server, FSD, ESLint/Prettier) alwaysApply: true --- # Craftshop: постоянный промт для агента ## Контекст и цель - Проект: магазин изделий ручной работы (витрина + админка для загрузки/редактирования данных). - ОС: Windows. Отвечать пользователю **по-русски**. ## Стек и структура - **Frontend**: Vite + React + TypeScript, axios, @tanstack/react-query, MUI. - **Архитектура фронта**: **FSD** (`app/pages/widgets/features/entities/shared`), alias `@` → `client/src`. - **Backend**: Node.js + Fastify + Prisma + SQLite. - Данные управляются через фронтенд‑админку; доступ к админ‑API проверяется серверным `verifyAdmin` (JWT пользователя + совпадение `request.user.email` с `ADMIN_EMAIL`). ## Правила работы с кодом - Всегда придерживаться **FSD границ**: нижние слои не импортируют верхние. - Для запросов: использовать `apiClient` (axios) и **React Query** (queryKey стабильные, invalidate после мутаций). - UI: использовать компоненты **MUI**, без “самописного” дизайна там, где есть готовые компоненты. - Не добавлять зависимости без необходимости; если добавляешь — ставь последние стабильные версии и обновляй README при изменении запуска/скриптов. ## Качество и запуск - После изменений на фронте: `client` → `npm run lint` и при необходимости `npm run lint:fix`, затем `npm run format:check`. - Форматирование: Prettier конфиги лежат в `client/.prettierrc.json`, `.prettierignore`, `.editorconfig`. ## Бэкенд соглашения - Не ломать публичные роуты `/api/categories`, `/api/products`. - Админ‑роуты должны возвращать понятные ошибки (400/401/404/409) и валидировать входные данные.