src/ ├── api/ # API-клиент │ ├── axios.ts # Настройка Axios instance, interceptors, base URL, refresh token │ ├── endpoints/ │ │ ├── auth.api.ts # login, register, logout, refreshToken, getMe │ │ ├── users.api.ts # getUser, updateProfile, getUserStats, getUserAchievements │ │ ├── teams.api.ts # createTeam, joinTeam, leaveTeam, getTeam, getTeamMembers, inviteToTeam │ │ ├── matches.api.ts # createMatch, getMatch, listMatches, startMatch, stopMatch, getMatchResults │ │ ├── rounds.api.ts # getRound, listRounds, getRoundEvents │ │ ├── services.api.ts # listServices, getService, uploadService, validateService, rateService │ │ ├── scoreboard.api.ts # getScoreboard, getScoreHistory, getTeamScore │ │ ├── flags.api.ts # submitFlag, getFlagHistory │ │ ├── logs.api.ts # getLogs, getEventTimeline, getReplay │ │ ├── training.api.ts # getTracks, getTrack, startExercise, submitExercise, getProgress │ │ ├── analytics.api.ts # getTeamAnalytics, getPlayerAnalytics, getMatchAnalytics, getAIRecommendations │ │ ├── admin.api.ts # adminGetUsers, adminCreateMatch, adminManageServices, adminGetSystemStats │ │ └── notifications.api.ts # getNotifications, markRead, getUnreadCount │ ├── websocket.ts # WebSocket подключение: scoreboard updates, round events, log stream, notifications │ └── types/ # Все TypeScript типы и интерфейсы │ ├── auth.types.ts # User, LoginRequest, RegisterRequest, AuthResponse, TokenPair │ ├── team.types.ts # Team, TeamMember, TeamInvite, TeamRole │ ├── match.types.ts # Match, MatchConfig, MatchStatus, MatchResult, ScoringPolicy │ ├── round.types.ts # Round, RoundEvent, RoundStatus │ ├── service.types.ts # Service, ServiceCategory, ServiceStatus, CheckerResult, ServiceReview │ ├── scoreboard.types.ts # ScoreboardEntry, ScoreHistory, TeamScore, ScoreBreakdown │ ├── flag.types.ts # Flag, FlagSubmission, FlagStatus │ ├── log.types.ts # LogEntry, LogLevel, EventType, TimelineEvent, ReplayFrame │ ├── training.types.ts # Track, Exercise, ExerciseResult, Progress, Skill, Role │ ├── analytics.types.ts # TeamAnalytics, PlayerAnalytics, MatchAnalytics, AIRecommendation │ └── common.types.ts # PaginatedResponse, ApiError, SortOrder, FilterParams │ ├── store/ # Zustand stores │ ├── authStore.ts # user, tokens, isAuthenticated, login(), logout(), refreshToken() │ ├── matchStore.ts # currentMatch, matches, rounds, matchStatus │ ├── scoreboardStore.ts # scores, history, realtime updates via websocket │ ├── serviceStore.ts # services, filters, categories, selected service │ ├── logStore.ts # logs, timeline, replay state, filters │ ├── teamStore.ts # currentTeam, members, invites │ ├── trainingStore.ts # tracks, progress, currentExercise │ ├── notificationStore.ts # notifications, unreadCount │ └── uiStore.ts # theme, sidebar state, modals, loading states │ ├── hooks/ # Кастомные хуки │ ├── useAuth.ts # Авторизация, проверка ролей, protected routes │ ├── useWebSocket.ts # Подключение и подписки на WS-каналы │ ├── useScoreboard.ts # Real-time scoreboard с WS │ ├── useMatchTimer.ts # Таймер текущего раунда, countdown │ ├── useLogs.ts # Подписка на стрим логов, фильтрация │ ├── useReplay.ts # Управление replay: play, pause, seek, speed │ ├── usePagination.ts # Пагинация для таблиц │ ├── useDebounce.ts # Debounce для поиска │ └── useNotifications.ts # Real-time уведомления │ ├── pages/ # Страницы │ ├── auth/ │ │ ├── LoginPage.tsx │ │ ├── RegisterPage.tsx │ │ └── ForgotPasswordPage.tsx │ ├── dashboard/ │ │ └── DashboardPage.tsx # Обзор: активные матчи, прогресс обучения, последние результаты, уведомления │ ├── matches/ │ │ ├── MatchListPage.tsx # Список матчей: тренировочные, турнирные, скримы │ │ ├── MatchDetailPage.tsx # Детали матча: scoreboard, раунды, события │ │ ├── MatchLobbyPage.tsx # Лобби перед началом: настройки, команды, сервисы │ │ ├── MatchLivePage.tsx # Живой матч: scoreboard, таймер, логи, статусы сервисов │ │ └── MatchResultPage.tsx # Результаты: итоговый scoreboard, статистика, replay │ ├── scoreboard/ │ │ └── ScoreboardPage.tsx # Полный scoreboard с графиками, фильтрами, историей по раундам │ ├── services/ │ │ ├── ServiceCatalogPage.tsx # Каталог сервисов: поиск, фильтры, категории, рейтинг │ │ ├── ServiceDetailPage.tsx # Карточка сервиса: описание, стек, уязвимости, отзывы, версии │ │ ├── ServiceUploadPage.tsx # Загрузка нового сервиса: форма, валидация, превью │ │ └── ServiceValidationPage.tsx # Статус валидации загруженного сервиса │ ├── teams/ │ │ ├── TeamPage.tsx # Страница команды: участники, роли, история матчей │ │ ├── TeamSettingsPage.tsx # Настройки команды: название, приглашения, роли │ │ └── TeamSearchPage.tsx # Поиск команды для вступления │ ├── training/ │ │ ├── TrainingHubPage.tsx # Обучение: все треки, прогресс, рекомендации │ │ ├── TrackDetailPage.tsx # Конкретный трек: список упражнений, прогресс, описание роли │ │ ├── ExercisePage.tsx # Выполнение упражнения: задание, терминал, подсказки, сдача │ │ └── SkillMapPage.tsx # Карта навыков: что освоено, что осталось, рекомендации │ ├── analytics/ │ │ ├── TeamAnalyticsPage.tsx # Аналитика команды: сильные/слабые стороны, тренды, сравнение │ │ ├── PlayerAnalyticsPage.tsx # Персональная аналитика: навыки, прогресс, роли │ │ ├── MatchAnalyticsPage.tsx # Аналитика матча: timeline, heatmap атак, AI-разбор │ │ └── ReplayPage.tsx # Replay матча: таймлайн, события, графики, покадровый просмотр │ ├── logs/ │ │ ├── LogViewerPage.tsx # Просмотр логов: фильтры, поиск, real-time стрим │ │ └── EventTimelinePage.tsx # Таймлайн событий матча: визуальная шкала с событиями │ ├── profile/ │ │ ├── ProfilePage.tsx # Профиль пользователя: статистика, достижения, история │ │ └── SettingsPage.tsx # Настройки: аватар, пароль, уведомления, API-ключи │ ├── admin/ │ │ ├── AdminDashboardPage.tsx # Админ-панель: системная статистика, активные матчи │ │ ├── AdminUsersPage.tsx # Управление пользователями │ │ ├── AdminMatchesPage.tsx # Управление матчами: создание, мониторинг, остановка │ │ ├── AdminServicesPage.tsx # Модерация сервисов: очередь валидации, утверждение │ │ └── AdminSystemPage.tsx # Системные настройки: конфигурация, health, метрики │ ├── seasons/ │ │ ├── SeasonListPage.tsx # Список сезонов и лиг │ │ └── SeasonDetailPage.tsx # Детали сезона: рейтинг, расписание, результаты │ └── NotFoundPage.tsx │ ├── components/ # Компоненты │ ├── layout/ │ │ ├── AppLayout.tsx # Основной layout: sidebar + header + content │ │ ├── Sidebar.tsx # Боковое меню с навигацией и ролевыми секциями │ │ ├── Header.tsx # Верхняя панель: поиск, уведомления, профиль, таймер матча │ │ ├── Footer.tsx │ │ └── MobileNav.tsx # Мобильная навигация │ ├── auth/ │ │ ├── LoginForm.tsx │ │ ├── RegisterForm.tsx │ │ ├── ProtectedRoute.tsx # Обёртка для защищённых роутов │ │ └── RoleGuard.tsx # Проверка роли пользователя для доступа │ ├── match/ │ │ ├── MatchCard.tsx # Карточка матча в списке │ │ ├── MatchTimer.tsx # Таймер раунда / матча │ │ ├── MatchStatusBadge.tsx # Статус матча: lobby, running, finished │ │ ├── RoundIndicator.tsx # Индикатор текущего раунда │ │ ├── ServiceStatusGrid.tsx # Сетка статусов сервисов всех команд │ │ ├── FlagSubmitForm.tsx # Форма отправки флага │ │ └── MatchConfigForm.tsx # Форма настройки нового матча │ ├── scoreboard/ │ │ ├── ScoreboardTable.tsx # Таблица scoreboard с сортировкой │ │ ├── ScoreChart.tsx # График изменения очков по раундам │ │ ├── TeamScoreCard.tsx # Карточка очков команды │ │ └── ScoreBreakdown.tsx # Разбивка очков: attack / defense / SLA │ ├── services/ │ │ ├── ServiceCard.tsx # Карточка сервиса в каталоге │ │ ├── ServiceFilter.tsx # Фильтры: категория, сложность, стек, рейтинг │ │ ├── ServiceUploadForm.tsx # Форма загрузки сервиса │ │ ├── ServiceReviewCard.tsx # Отзыв о сервисе │ │ ├── ServiceStatusIndicator.tsx # Индикатор статуса checker'а │ │ └── ServiceVersionHistory.tsx # История версий сервиса │ ├── training/ │ │ ├── TrackCard.tsx # Карточка учебного трека │ │ ├── ExerciseCard.tsx # Карточка упражнения │ │ ├── ProgressBar.tsx # Прогресс-бар обучения │ │ ├── SkillRadarChart.tsx # Радарная диаграмма навыков │ │ ├── RoleBadge.tsx # Бейдж роли: attacker, defender, analyst и т.д. │ │ └── HintAccordion.tsx # Аккордеон с подсказками (постепенное раскрытие) │ ├── analytics/ │ │ ├── AnalyticsCard.tsx # Карточка метрики │ │ ├── TeamComparisonChart.tsx # Сравнение команд │ │ ├── AttackHeatmap.tsx # Heatmap атак по сервисам и раундам │ │ ├── SLAChart.tsx # График SLA по сервисам │ │ ├── AIRecommendationCard.tsx # Карточка AI-рекомендации │ │ └── PerformanceTrend.tsx # Тренд производительности │ ├── logs/ │ │ ├── LogStream.tsx # Real-time стрим логов │ │ ├── LogEntry.tsx # Одна запись лога │ │ ├── LogFilter.tsx # Фильтры логов: тип, уровень, сервис, команда │ │ ├── EventTimeline.tsx # Визуальный таймлайн событий │ │ └── ReplayControls.tsx # Кнопки управления replay: play, pause, speed, seek │ ├── team/ │ │ ├── TeamMemberCard.tsx # Карточка участника команды │ │ ├── TeamInviteForm.tsx # Форма приглашения в команду │ │ ├── TeamRoleSelector.tsx # Выбор роли в команде │ │ └── TeamMatchHistory.tsx # История матчей команды │ ├── profile/ │ │ ├── AchievementBadge.tsx # Бейдж достижения │ │ ├── ProfileStats.tsx # Статистика профиля │ │ └── ActivityFeed.tsx # Лента активности │ └── common/ │ ├── DataTable.tsx # Универсальная таблица с сортировкой, пагинацией, фильтрами │ ├── SearchInput.tsx # Поиск с debounce │ ├── ConfirmDialog.tsx # Диалог подтверждения │ ├── EmptyState.tsx # Заглушка "нет данных" │ ├── ErrorBoundary.tsx # Обработка ошибок │ ├── LoadingSpinner.tsx │ ├── LoadingSkeleton.tsx # Скелетоны для загрузки │ ├── StatusBadge.tsx # Универсальный бейдж статуса │ ├── CopyButton.tsx # Кнопка копирования │ ├── ThemeToggle.tsx # Переключатель темы │ ├── Breadcrumbs.tsx │ ├── Countdown.tsx # Универсальный countdown-таймер │ └── MarkdownRenderer.tsx # Рендер markdown для описаний │ ├── router/ │ └── index.tsx # Все роуты, lazy loading, protected routes, role-based access │ ├── utils/ │ ├── formatters.ts # Форматирование дат, чисел, длительности │ ├── validators.ts # Вспомогательные валидаторы │ ├── constants.ts # Константы: роли, статусы, категории сервисов, уровни логов │ ├── helpers.ts # Утилиты │ └── colors.ts # Цветовая палитра для команд, статусов, графиков │ ├── styles/ │ └── globals.css # Tailwind base + кастомные стили, тёмная тема │ ├── App.tsx ├── main.tsx └── vite-env.d.ts