# WealthLedger frontend React/Vite-клиент WealthLedger. Клиент получает данные только через typed API backend; прямые вызовы T-Bank из frontend не допускаются. ## Быстрый старт Требуется Node 24 (`.nvmrc`). Создайте `.env` из примера и установите зависимости строго из lockfile: ```bash cp .env.example .env nvm use --silent npm ci npm run dev ``` `VITE_API_BASE_URL` по умолчанию указывает на `http://localhost:3000`. Для commits установите [Gitleaks](https://github.com/gitleaks/gitleaks/releases/tag/v8.30.1) 8.30.1 в `PATH` (macOS: `brew install gitleaks`). Pre-commit сначала проверяет staged diff с полной редакцией секретов, затем запускает formatting и FSD checks. Находка или отсутствие Gitleaks блокирует commit. Проверка этого поведения: `node --test scripts/test-pre-commit.mjs`. ## Проверка ```bash nvm use --silent npm run verify ``` Команда проверяет, что generated OpenAPI types соответствуют committed snapshot, затем запускает strict TypeScript, Biome, один coverage-backed запуск Vitest, Knip, dependency rules приложения и stories, сборки приложения и Storybook. Отдельный CI workflow `Frontend security` на push, pull request и ежедневно проверяет полную доступную историю Gitleaks 8.30.1 и выполняет `npm audit --include=dev --audit-level=low`. Любой advisory блокирует security job; исключений frontend нет. Локально можно выполнить те же команды: `gitleaks git --log-opts=--all --redact=100 --no-banner` и `npm audit --include=dev --audit-level=low`. Audit требует доступа к npm registry; проверка секретов выполняется локально и не выводит их значения. TypeScript остаётся на 5.9.3: `openapi-typescript@7.13.0` требует peer `^5.x`. Обновление до TypeScript 7 из Renovate dashboard откладывается до совместимого релиза генератора; `--force`/`--legacy-peer-deps` для обхода этого ограничения не используются. Если backend-контракт изменился, обновите `src/shared/api/spec/openapi.json` копированием backend OpenAPI document и затем выполните `npm run openapi:generate`. ## UI-каталог Storybook После `nvm use --silent` выполните `npm run dev:catalog`; статическая сборка — `npm run build:catalog`. Каталог использует общую тему приложения, вымышленные данные и локальные действия без application API. Примеры не доказывают восстановление реального запроса. Визуальные роли описаны в [дизайн-системе](../docs/design/overview.md). ## Документация - [Router conventions](.ai/CONVENTIONS.md) и [источники](.ai/SOURCES.md) - [Выбор owner/FSD](.ai/conventions/frontend-architecture.md) - [UI, state, формы и компоненты](.ai/conventions/frontend-ui.md) - [Data/API/cache](.ai/conventions/frontend-data.md) - [Testing](.ai/conventions/frontend-testing.md) - [UI-каталог Storybook](#ui-каталог-storybook) - [Обзор поставленной системы](../docs/overview.md) - [Карта проектных фактов](../docs/README.md) Runtime OpenAPI backend сверяется с frontend snapshot отдельной read-only backend командой `npm run test:openapi-contract`. Разработка идёт напрямую по задаче пользователя. Каждый affected repo проходит свой verify; при изменении wire contract дополнительно выполняется contract check. Обязательного OpenSpec/SDD lifecycle нет.