## Tech Stack - Angular 21 (Signals, OnPush, Standalone) - TypeScript (strict) - Taiga UI v5, Maskito, ng-web-apis - Vitest + jsdom ## Commands - Dev: `npm start` (поднимает dev-сервер с прокси, перед стартом выполняет `env:sync`) - Build: `npm run build` - Lint: `npm run lint` - Env sync: `npm run env:sync` ## Rules - Для цветов используются только переменные цветов из `src/styles/color-tokens.css`. - Если что-то можно стилизовать через Taiga UI — делаем через него. - Минимум any-типов; интерфейсы API — `readonly`. - Доменные API-сервисы в `src/app/core/services/*-api.service.ts` (works, analysis-runs, students, groups, events, reference-sets, users, audit). Не возвращать WorksApiService в роль god-сервиса. - Роуты только через `loadComponent()`, защита — `authGuard`. - HTTP-ошибки классифицируются в `core/http/error-classification.util.ts` и показываются через `UserErrorNotifyService`. - Backend OpenAPI: `docs/swagger.json`. ## Конфиг окружения - Правки делаются в `.env` (копия `.env.example`), затем `npm run env:sync` генерирует `src/environments/environment.ts`. - `environment.ts` в git **не коммитится** — это артефакт.