# Frontend ## Назначение React/Vite-клиент WealthLedger. Функциональные изменения сначала планируются в `../specs/openspec`; контракт API задает backend OpenAPI, а не ручные DTO. ## Проверка ```bash npm ci npm run verify ``` Node 22 обязателен (`.nvmrc`). `npm run openapi:sync` - единственная команда, обращающаяся к `${VITE_API_BASE_URL:-http://localhost:3000}/api/docs-json`; она атомарно обновляет snapshot и generated types. `openapi:generate` и `openapi:check` работают только с committed snapshot. ## Документация для агента - Перед изменением API или transport types прочитать [`docs/API-LAYER.md`](docs/API-LAYER.md). - Перед созданием формы, страницы или UI-состояний прочитать [`docs/UI-PATTERN.md`](docs/UI-PATTERN.md). - Перед изменением структуры слайса или импортов прочитать [`docs/STRUCTURE.md`](docs/STRUCTURE.md). - Перед кодом, тестами или quality checks прочитать [`docs/CONVENTIONS.md`](docs/CONVENTIONS.md) и [`docs/TESTING.md`](docs/TESTING.md). ## Границы - Текущий baseline использует FSD, React Router, i18n, Mantine, React Query и typed API scaffold. - Зависимости FSD идут `app -> pages -> features -> entities -> shared`; слайсы импортируются только через публичный `index.ts`. - HTTP идет только через типизированный клиент; request/response types выводятся из generated OpenAPI `paths[...]`, а не дублируются вручную. UI-строки - только через i18n. Каждый маршрут имеет loading, error и empty состояния. - Соблюдать strict TypeScript: `import type` для типов, без `enum` и `namespace`. - Не добавлять прямые вызовы T-Bank и не переносить Todo-код из `../references/`. - Не добавлять Storybook, Playwright, CI configuration, browser MSW worker или mock development mode.