---
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) и валидировать входные данные.
