Frontend security / security (pull_request) Successful in 8s
Frontend verify / verify (pull_request) Successful in 3m53s
Conventional commits / commits (pull_request) Successful in 19s
Frontend security / security (push) Successful in 8s
Frontend verify / verify (push) Successful in 3m53s
81 lines
4.5 KiB
Markdown
81 lines
4.5 KiB
Markdown
# 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).
|
||
|
||
## Документация
|
||
|
||
- [AGENTS: правила и источники](AGENTS.md)
|
||
- [Выбор owner/FSD](.ai/architecture.md)
|
||
- [UI, state, формы и компоненты](.ai/conventions/ui.md)
|
||
- [Data/API/cache](.ai/conventions/data.md)
|
||
- [Testing](.ai/conventions/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 нет.
|
||
|
||
Версии и ветки: [процесс релиза](../README.md#релизы-и-ветки).
|
||
|
||
Knip исключает `conventional-changelog-conventionalcommits`: release-it загружает
|
||
preset по имени из `.release-it.json`. Версия preset закреплена напрямую.
|