# ClarityCult — Детальное описание User Flow

**Дата:** 11.02.2026  
**Проект:** ClarityCult Learning Platform  
**Описание:** Обучающая платформа с AI-ассистентом для разработки бизнес-стратегий

---

## 📋 Содержание

1. [Публичные User Flow](#публичные-user-flow)
2. [Аутентификация и онбординг](#аутентификация-и-онбординг)
3. [Основные пользовательские сценарии](#основные-пользовательские-сценарии)
4. [Административные сценарии](#административные-сценарии)
5. [Вспомогательные flow](#вспомогательные-flow)

---

## 1. ПУБЛИЧНЫЕ USER FLOW

### UF-001: Первое знакомство с платформой

**Цель:** Пользователь узнает о платформе и принимает решение зарегистрироваться

#### Экран 1.1: Главная страница (/)
**URL:** `https://claritycult.ru/` или `https://dash.claritycult.ru/`

**Элементы экрана:**
- Логотип ClarityCult
- Навигационное меню (О проекте, Как это работает, Вход, Регистрация)
- Hero-секция с описанием платформы
- CTA-кнопка "Начать обучение"

**Действия пользователя:**
1. Читает описание платформы
2. Кликает "О проекте" → переход на `/about`
3. Кликает "Как это работает" → переход на `/how-it-works`
4. Кликает "Регистрация" → переход на `/register`

**Переходы:**
- → `/about` (О проекте)
- → `/how-it-works` (Инструкция)
- → `/login` (Вход)
- → `/register` (Регистрация)

---

#### Экран 1.2: О проекте (/about)
**URL:** `https://dash.claritycult.ru/about`

**Элементы экрана:**
- Видео о проекте (361 MB, загружено из Google Drive)
- Текстовое описание концепции платформы
- Кнопка "Назад на главную"
- Footer с юридическими ссылками

**Действия пользователя:**
1. Просматривает видео о проекте
2. Читает описание
3. Переходит к регистрации или возвращается на главную

**Переходы:**
- → `/` (Главная)
- → `/register` (Регистрация)

---

#### Экран 1.3: Как это работает (/how-it-works)
**URL:** `https://dash.claritycult.ru/how-it-works`

**Элементы экрана:**
- Видео-инструкция (161 MB)
- 6 шагов работы с платформой с иконками:
  1. Регистрация и выбор направления
  2. Заполнение анкеты бизнеса
  3. Прохождение модулей обучения
  4. Общение с AI-ассистентом
  5. Получение персонализированных рекомендаций
  6. Экспорт готовой стратегии
- Кнопка "Начать обучение"

**Действия пользователя:**
1. Смотрит видео-инструкцию
2. Изучает 6 шагов работы
3. Кликает "Начать обучение" → переход на `/register`

**Переходы:**
- → `/register` (Регистрация)
- → `/` (Главная)

---

### UF-002: Изучение юридических документов

#### Экран 2.1: Политика конфиденциальности (/privacy-policy)
**URL:** `https://dash.claritycult.ru/privacy-policy`

**Элементы экрана:**
- Заголовок документа
- Текст политики (загружается из БД или fallback-шаблона)
- Дата последнего обновления
- Кнопка "Назад на главную" (не в регистрацию!)

**Действия пользователя:**
1. Читает политику конфиденциальности
2. Возвращается на главную или регистрацию

**Переходы:**
- → `/` (Главная)

---

#### Экран 2.2: Оферта (/offer)
**URL:** `https://dash.claritycult.ru/offer`

**Элементы экрана:**
- Текст договора оферты
- Условия использования платформы
- Кнопка "Назад на главную"

**Действия пользователя:**
1. Читает условия оферты
2. Возвращается назад

**Переходы:**
- → `/` (Главная)

---

#### Экран 2.3: FAQ (/faq)
**URL:** `https://dash.claritycult.ru/faq`

**Элементы экрана:**
- Список часто задаваемых вопросов
- Ответы с подробным описанием
- Контактная информация для дополнительных вопросов

**Действия пользователя:**
1. Ищет ответ на свой вопрос
2. Читает FAQ
3. Переходит к регистрации

**Переходы:**
- → `/register` (Регистрация)
- → `/` (Главная)

---

## 2. АУТЕНТИФИКАЦИЯ И ОНБОРДИНГ

### UF-003: Регистрация нового пользователя

#### Экран 3.1: Форма регистрации (/register)
**URL:** `https://dash.claritycult.ru/register`

**Элементы экрана:**
- Логотип
- Поля формы:
  - Email (обязательное)
  - Пароль (обязательное, минимум 8 символов)
  - Имя (обязательное)
  - Телефон (опциональное)
  - Telegram username (опциональное, формат @username)
  - **Инвайт-код** (обязательное! invite-only registration)
- Чекбоксы согласия:
  - Согласие с офертой (обязательное)
  - Согласие на обработку данных (обязательное)
  - Политика конфиденциальности (обязательное)
- Кнопка "Зарегистрироваться"
- Ссылка "Уже есть аккаунт? Войти"

**Действия пользователя:**
1. Вводит email
2. Придумывает пароль
3. Вводит имя
4. (Опционально) Указывает телефон и Telegram
5. **ВАЖНО:** Вводит инвайт-код (без кода регистрация невозможна)
6. Отмечает все чекбоксы согласия
7. Кликает "Зарегистрироваться"

**Валидация:**
- Email: проверка формата email
- Пароль: минимум 8 символов
- Инвайт-код: проверка в БД на валидность и количество использований
- Чекбоксы: все обязательные должны быть отмечены

**API запрос:**
```
POST /api/auth/register
Body: {
  "email": "user@example.com",
  "password": "password123",
  "name": "Иван Иванов",
  "phone": "+79991234567",
  "telegram": "@ivanov",
  "invite_code": "ABC123XYZ"
}
```

**Возможные результаты:**
1. **Успех (200):** 
   - Создается аккаунт
   - Email НЕ подтвержден (email_verified = false)
   - Отправляется письмо с ссылкой подтверждения
   - → Переход на `/verify-email/:token` или показ сообщения "Проверьте почту"

2. **Ошибка — Email уже зарегистрирован (400):**
   - Показ ошибки: "Этот email уже используется"
   - Ссылка "Войти" под сообщением

3. **Ошибка — Невалидный инвайт-код (400):**
   - Показ ошибки: "Инвайт-код недействителен или исчерпан"
   - Форма остается заполненной

4. **Ошибка — Слабый пароль (400):**
   - Показ ошибки: "Пароль должен содержать минимум 8 символов"

**События в системе:**
- Запись события `user_registered` в таблицу `user_events`
- Обновление метрики D0 (день регистрации)
- Отправка email с токеном подтверждения

**Переходы:**
- → `/login` (Вход, если уже есть аккаунт)
- → `/verify-email/:token` (Подтверждение email)
- → `/privacy-policy` (Политика конфиденциальности)
- → `/offer` (Оферта)

---

#### Экран 3.2: Подтверждение email (/verify-email/:token)
**URL:** `https://dash.claritycult.ru/verify-email/abc123xyz`

**Сценарий 1: Успешное подтверждение**

**Элементы экрана:**
- ✅ Иконка успеха
- Заголовок: "Email подтвержден!"
- Текст: "Ваш email успешно подтвержден. Теперь вы можете войти в систему."
- Кнопка "Войти"

**Действия пользователя:**
1. Переходит по ссылке из письма
2. Видит сообщение об успехе
3. Кликает "Войти" → переход на `/login`

**API запрос:**
```
GET /api/auth/verify-email/:token
Response: { "success": true, "message": "Email verified" }
```

**События в системе:**
- Установка `email_verified = true` для пользователя
- Запись события `email_verified` в `user_events`

**Сценарий 2: Невалидный/истекший токен**

**Элементы экрана:**
- ❌ Иконка ошибки
- Заголовок: "Ссылка недействительна"
- Текст: "Ссылка подтверждения истекла или уже была использована"
- Кнопка "Отправить новую ссылку"

**Действия пользователя:**
1. Видит сообщение об ошибке
2. Кликает "Отправить новую ссылку"
3. Вводит email → новое письмо отправляется

**Переходы:**
- → `/login` (Вход)
- → `/register` (Регистрация заново)

---

### UF-004: Вход в систему

#### Экран 4.1: Форма входа (/login)
**URL:** `https://dash.claritycult.ru/login`

**Элементы экрана:**
- Логотип
- Поля формы:
  - Email
  - Пароль
  - Чекбокс "Запомнить меня"
- Кнопка "Войти"
- Ссылка "Забыли пароль?"
- Ссылка "Нет аккаунта? Зарегистрироваться"

**Действия пользователя:**
1. Вводит email
2. Вводит пароль
3. (Опционально) Отмечает "Запомнить меня"
4. Кликает "Войти"

**API запрос:**
```
POST /api/auth/login
Body: {
  "email": "user@example.com",
  "password": "password123"
}
Response: {
  "token": "jwt_token_here",
  "user": { "id": 123, "email": "...", "name": "..." }
}
```

**Возможные результаты:**

1. **Успех + Email подтвержден:**
   - Получение JWT токена
   - Сохранение в localStorage/cookies
   - Запись события `user_logged_in`
   - → Переход на `/dashboard`

2. **Успех + Email НЕ подтвержден:**
   - Показ предупреждения: "Подтвердите email для доступа"
   - Блокировка доступа к платформе
   - Кнопка "Отправить письмо повторно"
   - → Остается на `/login`

3. **Ошибка — Неверный email/пароль:**
   - Показ ошибки: "Неверный email или пароль"
   - Форма очищается
   - Счетчик попыток (защита от брутфорса)

4. **Ошибка — Аккаунт заблокирован:**
   - Показ ошибки: "Аккаунт заблокирован. Обратитесь к администратору"
   - Контактная информация поддержки

**События в системе:**
- Запись события `user_logged_in` в `user_events`
- Обновление `last_login_at`
- Подсчет активности для метрик D1, D3, D7

**Переходы:**
- → `/dashboard` (Главная после входа)
- → `/forgot-password` (Восстановление пароля)
- → `/register` (Регистрация)

---

#### Экран 4.2: Magic Link вход (для админов)
**URL:** `https://dash.claritycult.ru/?magic_token=abc123xyz&redirect=/dashboard`

**Сценарий:** Админ создал magic link для входа под пользователем

**Процесс:**
1. Пользователь (или админ) переходит по magic link
2. Автоматическая авторизация по токену
3. Токен очищается из URL
4. Редирект на указанную страницу (default: `/dashboard`)

**API запрос:**
```
POST /api/auth/magic-link-login
Body: { "magic_token": "abc123xyz" }
Response: { "token": "jwt_token", "user": {...} }
```

**Безопасность:**
- Токен одноразовый (удаляется после использования)
- Время жизни: 24 часа (по умолчанию)
- Токен привязан к конкретному user_id

**Переходы:**
- → `/dashboard` (или указанный redirect_path)

---

### UF-005: Восстановление пароля

#### Экран 5.1: Запрос восстановления (/forgot-password)
**URL:** `https://dash.claritycult.ru/forgot-password`

**Элементы экрана:**
- Заголовок: "Восстановление пароля"
- Описание: "Введите email, и мы отправим вам ссылку для сброса пароля"
- Поле "Email"
- Кнопка "Отправить ссылку"
- Ссылка "Вспомнили пароль? Войти"

**Действия пользователя:**
1. Вводит email
2. Кликает "Отправить ссылку"

**API запрос:**
```
POST /api/auth/forgot-password
Body: { "email": "user@example.com" }
Response: { "success": true, "message": "Email sent" }
```

**Результат:**
- Отправка email с ссылкой вида `/reset-password/:token`
- Показ сообщения: "Проверьте почту. Мы отправили инструкции для восстановления"
- ⚠️ **Важно:** Даже если email не найден, показываем успех (защита от перебора)

**Переходы:**
- → `/login` (Вход)
- → `/register` (Регистрация)

---

#### Экран 5.2: Сброс пароля (/reset-password/:token)
**URL:** `https://dash.claritycult.ru/reset-password/abc123xyz`

**Элементы экрана:**
- Заголовок: "Установка нового пароля"
- Поле "Новый пароль" (тип password, минимум 8 символов)
- Поле "Подтвердите пароль" (тип password)
- Индикатор силы пароля
- Кнопка "Сохранить новый пароль"

**Действия пользователя:**
1. Переходит по ссылке из письма
2. Вводит новый пароль
3. Повторяет пароль для подтверждения
4. Кликает "Сохранить новый пароль"

**Валидация:**
- Пароль минимум 8 символов
- Пароли должны совпадать
- Токен должен быть валидным и не истекшим

**API запрос:**
```
POST /api/auth/reset-password
Body: {
  "token": "abc123xyz",
  "new_password": "newpassword123"
}
Response: { "success": true }
```

**Возможные результаты:**

1. **Успех:**
   - Пароль обновлен
   - Показ сообщения: "Пароль успешно обновлен"
   - Автоматический вход или кнопка "Войти"
   - → Переход на `/login` или `/dashboard`

2. **Ошибка — Токен истек:**
   - Показ ошибки: "Ссылка недействительна или истекла"
   - Кнопка "Запросить новую ссылку" → `/forgot-password`

3. **Ошибка — Слабый пароль:**
   - Показ ошибки: "Пароль слишком простой"
   - Требования к паролю

**Переходы:**
- → `/login` (Вход с новым паролем)
- → `/forgot-password` (Запросить новую ссылку)

---

## 3. ОСНОВНЫЕ ПОЛЬЗОВАТЕЛЬСКИЕ СЦЕНАРИИ

### UF-006: Выбор направления обучения (Frame)

#### Экран 6.1: Dashboard с выбором фрейма (/dashboard)
**URL:** `https://dash.claritycult.ru/dashboard` или `https://dash.claritycult.ru/dashboard?frame=business`

**Контекст:** Пользователь впервые входит в систему после регистрации

**Элементы экрана:**
- Навигационное меню:
  - Логотип ClarityCult
  - Dashboard (активная)
  - Прогресс (если `SHOW_PROGRESS_UI=true`)
  - Просмотр экспорта
  - Профиль
  - Настройки
  - Выход
- Переключатель фреймов (табы):
  - 🆕 "Новый бизнес" (Frame 1: `frame=business`)
  - 📈 "Действующий бизнес" (Frame 2: `frame=frame2`)
- Блок приветствия:
  - "Добро пожаловать, [Имя пользователя]!"
  - Краткое описание выбранного направления
  - Прогресс-бар (0% при первом входе)
- Список модулей обучения (пустой при первом входе)
- CTA: "Начать обучение" → первый модуль (анкета)

**Действия пользователя:**

**Сценарий 1: Выбор "Новый бизнес" (Frame 1)**
1. Видит два варианта направления
2. Читает описание Frame 1: "Для тех, кто только начинает бизнес"
3. Кликает на таб "Новый бизнес"
4. URL меняется на `?frame=business`
5. Загружается список модулей для Frame 1
6. Видит первый модуль: "Анкета бизнеса" (`business-intro`)
7. Кликает "Начать обучение"
8. → Переход на `/module/business-intro`

**Сценарий 2: Выбор "Действующий бизнес" (Frame 2)**
1. Кликает на таб "Действующий бизнес"
2. URL меняется на `?frame=frame2`
3. Видит описание: "Для тех, у кого уже есть работающий бизнес"
4. Загружается список модулей для Frame 2
5. Видит первый модуль: "Анкета бизнеса" (`business-intro-frame2`)
6. Кликает "Начать обучение"
7. → Переход на `/module/business-intro-frame2`

**API запросы:**
```
GET /api/modules?frame=business
Response: [
  { "id": "business-intro", "name": "Анкета бизнеса", "order": 1, ... },
  { "id": "module-2", "name": "Анализ рынка", "order": 2, "locked": true, ... },
  ...
]
```

**Система доступа к фреймам:**
- В профиле пользователя хранится массив `available_frames` (например: `["frame1", "frame2"]`)
- Поле `preferred_frame` — выбранное направление по умолчанию
- При переключении фрейма обновляется `preferred_frame`

**Переходы:**
- → `/module/business-intro` (Анкета для Frame 1)
- → `/module/business-intro-frame2` (Анкета для Frame 2)
- → `/profile` (Профиль)
- → `/progress` (Прогресс)

---

### UF-007: Заполнение анкеты бизнеса (Онбординг)

#### Экран 7.1: Анкета "Новый бизнес" (/module/business-intro)
**URL:** `https://dash.claritycult.ru/module/business-intro/1`

**Контекст:** Первый модуль для пользователей Frame 1

**Элементы экрана:**
- Навигация:
  - Логотип
  - Индикатор прогресса модуля (Блок 1 из 1)
  - Кнопка "Назад к Dashboard"
- Заголовок: "Расскажите о своем бизнесе"
- Форма с тематическими блоками:

**Блок 1: Основная информация**
- Название бизнеса (текст, обязательное)
- Сфера деятельности (радио-кнопки + "Своя"):
  - E-commerce
  - SaaS
  - Консалтинг
  - Производство
  - Услуги
  - Другое (текстовое поле)
- Описание идеи бизнеса (textarea, 500 символов)

**Блок 2: Роль и опыт**
- Ваша роль (радио):
  - Основатель
  - Соучредитель
  - Руководитель
  - Сотрудник
  - Другое
- Опыт в предпринимательстве (радио):
  - Первый бизнес
  - Есть опыт (1-3 года)
  - Опытный предприниматель (3+ лет)

**Блок 3: Масштаб проекта**
- Стадия проекта (радио):
  - Идея (нет продукта)
  - MVP (есть прототип)
  - Запущен (есть первые клиенты)
  - Растет (стабильные продажи)
- Размер команды (число, 0-1000)
- Текущий оборот в месяц (опционально, число)

**Блок 4: Цели и ожидания**
- Цель обучения (чекбоксы, множественный выбор):
  - Разработать бизнес-план
  - Найти инвесторов
  - Масштабировать бизнес
  - Улучшить маркетинг
  - Оптимизировать процессы
  - Другое (текст)
- Временные рамки (радио):
  - 1-3 месяца
  - 3-6 месяцев
  - 6-12 месяцев
  - Более года

**Элементы UI:**
- Кнопка "Сохранить и продолжить" (внизу формы)
- Автосохранение каждые 30 секунд
- Индикатор "Сохранено" / "Сохранение..."

**Действия пользователя:**
1. Заполняет все обязательные поля
2. (Опционально) Заполняет дополнительные поля
3. Кликает "Сохранить и продолжить"

**Валидация:**
- Обязательные поля: название, сфера, описание, роль, опыт, стадия
- Максимальная длина текстовых полей
- Формат числовых полей

**API запрос:**
```
POST /api/modules/business-intro/submit
Body: {
  "business_name": "Моя компания",
  "industry": "E-commerce",
  "description": "Интернет-магазин экотоваров",
  "role": "Основатель",
  "experience": "Первый бизнес",
  "stage": "Идея",
  "team_size": 2,
  "goals": ["Разработать бизнес-план", "Найти инвесторов"],
  "timeline": "3-6 месяцев"
}
Response: {
  "success": true,
  "next_module": "module-2",
  "unlocked_modules": ["module-2"]
}
```

**События в системе:**
- Сохранение данных анкеты в `user_context` (JSON)
- Отметка модуля `business-intro` как завершенного
- Разблокировка следующего модуля (`module-2`)
- Запись события `module_completed` с `module_id=business-intro`
- Обновление метрики "Пройдено модулей" в админке

**Автосохранение:**
```
POST /api/modules/business-intro/autosave
Body: { "business_name": "Моя компания", ... }
Response: { "saved": true, "timestamp": "2026-02-11T10:30:00Z" }
```

**Переходы:**
- → `/dashboard?frame=business` (Назад к Dashboard)
- → `/module/module-2` (Следующий модуль — автоматически после сохранения)
- → `/profile` (Профиль)

**Примечание:** Анкета для Frame 2 (`business-intro-frame2`) имеет аналогичную структуру, но с дополнительными полями:
- Текущий оборот (обязательное)
- Количество клиентов
- Основные проблемы бизнеса
- Метрики роста

---

### UF-008: Прохождение модуля с AI-ассистентом

#### Экран 8.1: Страница модуля с блоками (/module/:moduleId)
**URL:** `https://dash.claritycult.ru/module/market-analysis/1`

**Контекст:** Пользователь открывает модуль обучения

**Элементы экрана:**

**Навигация:**
- Breadcrumbs: Dashboard → Market Analysis → Блок 1
- Индикатор прогресса: "Блок 1 из 6"
- Кнопка "Назад к модулям"

**Основной контент:**
- Заголовок блока: "Анализ целевой аудитории"
- Описание блока (markdown):
  - Текст с форматированием
  - Списки, таблицы
  - Вложенные изображения
  - Видео (если есть)

**Интерактивные элементы:**

**1. Текстовые материалы:**
- Теоретический блок с подзаголовками
- Примеры и кейсы
- Рекомендации

**2. AI-ассистент (чат):**
- Заголовок: "💬 AI-помощник"
- Поле ввода сообщения (textarea)
- Кнопка "Отправить" или Enter
- История диалога:
  - Сообщения пользователя (справа, синий фон)
  - Ответы AI (слева, серый фон)
  - Timestamp каждого сообщения
  - Markdown-рендеринг в ответах AI (таблицы, списки)
- Индикатор набора текста: "AI печатает..."
- Подсказки:
  - "Задайте вопрос по материалу"
  - "Попросите привести пример"
  - "Запросите детализацию"

**3. Result Block (итоговый анализ):**
- Заголовок: "📊 Результат анализа"
- Контент:
  - AI-генерированный анализ на основе диалога
  - Структурированный вывод (маркдаун)
  - Таблицы, списки, рекомендации
- Кнопки:
  - "Обновить анализ" (перегенерировать)
  - "Редактировать вручную" (переход в режим редактирования)
- **Автообновление:** 
  - Если пользователь написал новое сообщение в AI-чат
  - Результат автоматически обновляется ОДИН РАЗ
  - Показывается спиннер "Обновление анализа..."
  - Старый контент очищается перед обновлением

**4. Навигация между блоками:**
- Кнопка "Предыдущий блок" (если не первый)
- Кнопка "Следующий блок" (если не последний)
- Кнопка "Завершить модуль" (если последний блок)

**Действия пользователя:**

**Сценарий 1: Изучение материала**
1. Читает теоретический блок
2. Просматривает примеры
3. Скроллит вниз к AI-ассистенту

**Сценарий 2: Общение с AI**
1. Вводит вопрос в чат: "Как определить целевую аудиторию для e-commerce?"
2. Кликает "Отправить" или нажимает Enter
3. Видит индикатор "AI печатает..."
4. Получает ответ с markdown-форматированием
5. Продолжает диалог, уточняя детали
6. AI использует контекст из анкеты (`business-intro`) для персонализации

**API запрос (отправка сообщения):**
```
POST /api/modules/market-analysis/blocks/1/chat
Body: {
  "message": "Как определить целевую аудиторию для e-commerce?"
}
Response: {
  "message_id": 123,
  "ai_response": "# Определение целевой аудитории\n\n...",
  "timestamp": "2026-02-11T10:35:00Z"
}
```

**Сценарий 3: Просмотр результата**
1. Скроллит вниз к блоку "Результат анализа"
2. Видит AI-генерированный анализ
3. Если результат пустой → автоматически генерируется на основе диалога
4. Если есть новые сообщения в чате → результат автообновляется

**Автогенерация результата:**
```
POST /api/modules/market-analysis/blocks/1/generate-result
Body: { "chat_history": [...] }
Response: {
  "result": "# Анализ ЦА для [Название бизнеса]\n\n...",
  "timestamp": "2026-02-11T10:40:00Z"
}
```

**Сценарий 4: Переход к следующему блоку**
1. Завершает изучение блока
2. Кликает "Следующий блок"
3. URL меняется на `/module/market-analysis/2`
4. Загружается содержимое блока 2
5. История чата сохраняется (не очищается)

**Сценарий 5: Завершение модуля**
1. Доходит до последнего блока (блок 6)
2. Кликает "Завершить модуль"
3. Модуль отмечается как пройденный
4. Разблокируется следующий модуль
5. → Переход на `/dashboard` с обновленным прогрессом

**API запрос (завершение модуля):**
```
POST /api/modules/market-analysis/complete
Response: {
  "success": true,
  "next_module": "module-3",
  "progress": 33,
  "unlocked_modules": ["module-3"]
}
```

**События в системе:**
- Запись каждого сообщения в чате в БД
- Сохранение истории диалога в `user_progress`
- Автосохранение результатов блока
- Подсчет времени, проведенного в модуле
- Обновление метрики "Последняя активность"

**Переходы:**
- → `/module/market-analysis/2` (Следующий блок)
- → `/module/market-analysis/0` (Предыдущий блок, если есть)
- → `/dashboard` (Назад к модулям)
- → `/strategy-preview` (Просмотр экспорта)

---

#### Экран 8.2: Debug-панель контекста AI (если включена)
**URL:** Та же страница модуля

**Условие отображения:** `REACT_APP_SHOW_DEBUG_CONTEXT=true`

**Элементы экрана:**
- Collapsible-блок "🔍 Контекст, отправляемый ИИ"
- Кнопка "Развернуть/Свернуть"
- Содержимое:
  - JSON-данные из анкеты пользователя
  - Системный промпт модуля
  - История диалога
  - Параметры запроса к AI

**Действия пользователя:**
1. (Только для тестирования) Кликает "Развернуть"
2. Видит контекст, который отправляется AI
3. Может скопировать JSON для отладки

**Примечание:** Эта панель скрыта в production для обычных пользователей

---

### UF-009: Работа с квизами

#### Экран 9.1: Прохождение квиза
**URL:** `https://dash.claritycult.ru/module/quiz-1/1`

**Контекст:** Специальный тип модуля — тест на определение типа предпринимателя

**Элементы экрана:**
- Заголовок: "Тест: Определите свой тип предпринимателя"
- Прогресс-бар: "Вопрос 5 из 15"
- Вопрос с вариантами ответа:
  - Радио-кнопки (один ответ)
  - или Чекбоксы (множественный выбор)
- Кнопка "Следующий вопрос"
- Кнопка "Назад" (к предыдущему вопросу)
- Таймер (опционально)

**Действия пользователя:**
1. Читает вопрос
2. Выбирает один или несколько вариантов
3. Кликает "Следующий вопрос"
4. Повторяет для всех вопросов
5. После последнего вопроса: "Завершить тест"

**API запрос (сохранение ответа):**
```
POST /api/quiz/quiz-1/answer
Body: {
  "question_id": 5,
  "answer": "option_b"
}
```

**После завершения:**
```
POST /api/quiz/quiz-1/submit
Response: {
  "result": {
    "color": "Синий",
    "type": "Стратег",
    "description": "Вы склонны к долгосрочному планированию...",
    "recommendations": [...]
  }
}
```

**События в системе:**
- Сохранение всех ответов в БД
- Расчет результата по формуле (цвет + тип)
- Запись `quiz_completed` в `user_events`
- Сохранение результата в профиле пользователя

**Переходы:**
- → Показ результата (тот же URL, другой view)

---

#### Экран 9.2: Результат квиза
**URL:** `https://dash.claritycult.ru/module/quiz-1/result`

**Элементы экрана:**
- Заголовок: "Ваш результат"
- Цветная плашка с результатом:
  - Цвет (Синий/Красный/Желтый/Зеленый)
  - Тип личности ("Стратег", "Исполнитель", и т.д.)
  - Эмодзи/иконка
- Описание типа:
  - Характеристики
  - Сильные стороны
  - Области для развития
- Рекомендации по модулям
- Кнопки:
  - "Пройти заново"
  - "Посмотреть ответы"
  - "Продолжить обучение"

**Действия пользователя:**
1. Изучает свой результат
2. Читает рекомендации
3. Кликает "Продолжить обучение" → `/dashboard`

**Особенность:** 
- Квиз остается видимым в Dashboard даже после прохождения
- Кнопка "Посмотреть" вместо "Пройти"
- Пользователь может пересмотреть результат в любой момент

**Переходы:**
- → `/dashboard` (Продолжить обучение)
- → `/module/quiz-1/1` (Пройти заново)

---

### UF-010: Отслеживание прогресса

#### Экран 10.1: Страница прогресса (/progress)
**URL:** `https://dash.claritycult.ru/progress?frame=business`

**Условие доступа:** `SHOW_PROGRESS_UI=true` (может быть скрыта)

**Элементы экрана:**

**Навигация:**
- Переключатель фреймов:
  - Frame 1: Новый бизнес
  - Frame 2: Действующий бизнес

**Общая статистика:**
- Прогресс-бар: "Завершено 5 из 15 модулей (33%)"
- Затрачено времени: "12 часов 30 минут"
- Дата начала обучения
- Дата последней активности

**Список модулей:**
Для каждого модуля:
- ✅ Статус:
  - Пройден (зеленая галочка)
  - В процессе (желтый кружок)
  - Заблокирован (замок)
- Название модуля
- Краткое описание
- Количество блоков (например, "6 блоков")
- Дата завершения (если пройден)
- Кнопки:
  - "Продолжить" (если в процессе)
  - "Пройти" (если доступен)
  - "Редактировать результат" (если пройден)

**Специальные модули:**

**Анкета бизнеса:**
- Статус: Заполнена ✅
- Кнопка "Редактировать анкету"
- → Переход на `/progress/business-intro/edit`

**Другие модули:**
- Кнопка "Редактировать результат"
- → Переход на `/progress/market-analysis/edit`

**Действия пользователя:**

**Сценарий 1: Просмотр прогресса**
1. Открывает страницу прогресса
2. Видит общую статистику
3. Скроллит список модулей
4. Проверяет какие модули пройдены

**Сценарий 2: Продолжение обучения**
1. Находит модуль "В процессе"
2. Кликает "Продолжить"
3. → Переход на `/module/module-id/3` (последний блок)

**Сценарий 3: Редактирование анкеты**
1. Кликает "Редактировать анкету" у `business-intro`
2. → Переход на `/progress/business-intro/edit`
3. Видит ту же форму, что при онбординге
4. Изменяет поля (например, "Размер команды: 5 → 7")
5. Кликает "Сохранить изменения"
6. → Возврат на `/progress` с обновленными данными

**API запрос:**
```
GET /api/progress?frame=business
Response: {
  "total_modules": 15,
  "completed_modules": 5,
  "progress_percentage": 33,
  "time_spent": "12:30:00",
  "modules": [
    {
      "id": "business-intro",
      "name": "Анкета бизнеса",
      "status": "completed",
      "completed_at": "2026-02-01T10:00:00Z",
      "editable": true
    },
    {
      "id": "market-analysis",
      "name": "Анализ рынка",
      "status": "in_progress",
      "blocks_total": 6,
      "blocks_completed": 3
    },
    ...
  ]
}
```

**Переходы:**
- → `/module/:moduleId` (Продолжить модуль)
- → `/progress/business-intro/edit` (Редактировать анкету)
- → `/progress/:moduleId/edit` (Редактировать результат)
- → `/dashboard` (Назад к Dashboard)

---

#### Экран 10.2: Редактирование результата модуля
**URL:** `https://dash.claritycult.ru/progress/market-analysis/edit`

**Элементы экрана:**
- Заголовок: "Редактирование результата: Анализ рынка"
- Визуальный редактор (WYSIWYG):
  - Toolbar с форматированием (жирный, курсив, списки, таблицы)
  - Текстовая область с markdown-рендерингом
  - Поддержка таблиц, списков, заголовков
- Превью результата (рядом или снизу)
- Кнопки:
  - "Сохранить"
  - "Отменить"
  - "Вернуть AI-версию"

**Действия пользователя:**
1. Открывает редактор
2. Видит текущий AI-генерированный результат
3. Редактирует текст вручную
4. Добавляет/удаляет блоки
5. Форматирует таблицы
6. Кликает "Сохранить"

**API запрос:**
```
PUT /api/progress/market-analysis/result
Body: {
  "result_content": "# Обновленный анализ\n\n..."
}
Response: { "success": true }
```

**Переходы:**
- → `/progress` (После сохранения)
- → `/strategy-preview` (Посмотреть в итоговом экспорте)

---

### UF-011: Экспорт стратегии

#### Экран 11.1: Просмотр стратегии (/strategy-preview)
**URL:** `https://dash.claritycult.ru/strategy-preview`

**Контекст:** Пользователь хочет посмотреть итоговый документ или экспортировать его

**Элементы экрана:**

**Навигация:**
- Кнопка "Назад к Dashboard"
- Кнопки экспорта:
  - "📄 Скачать PDF"
  - "📋 Скопировать как Markdown"
  - "📧 Отправить на email"

**Предпросмотр документа:**
- Титульный лист:
  - Название стратегии: "[Название бизнеса] — Бизнес-стратегия"
  - Дата создания
  - Имя пользователя
  - Логотип ClarityCult
- Содержание (автогенерация):
  - Список всех разделов с номерами страниц
- Разделы по модулям:
  - Заголовок раздела (название модуля)
  - Результаты блоков модуля
  - Markdown-рендеринг (таблицы, списки, заголовки)
  - **Фильтрация:** Исключены технические фразы AI ("предоставь список", timestamps)
  - **Только полезный контент:** Итоговые выводы и рекомендации

**Система фильтрации:**
- Удаляются служебные сообщения AI
- Удаляются промежуточные диалоги
- Остаются только Result Blocks с итоговыми анализами
- Сохраняется структура markdown-таблиц

**Действия пользователя:**

**Сценарий 1: Просмотр стратегии**
1. Открывает страницу
2. Скроллит документ
3. Проверяет содержимое разделов
4. Видит результаты всех пройденных модулей

**Сценарий 2: Экспорт в PDF**
1. Кликает "Скачать PDF"
2. Браузер генерирует PDF из HTML
3. Файл скачивается: `[Название_бизнеса]_Strategy.pdf`

**API запрос:**
```
GET /api/strategy/export?format=pdf
Response: Binary PDF file
```

**Сценарий 3: Копирование Markdown**
1. Кликает "Скопировать как Markdown"
2. Весь контент копируется в буфер обмена
3. Показ уведомления: "Скопировано!"
4. Пользователь может вставить в любой редактор

**Сценарий 4: Отправка на email**
1. Кликает "Отправить на email"
2. Модальное окно:
   - Поле email (предзаполнено из профиля)
   - Опции: PDF / Markdown / HTML
   - Кнопка "Отправить"
3. Письмо отправляется с вложением
4. Показ уведомления: "Отправлено на [email]"

**API запрос:**
```
POST /api/strategy/email
Body: {
  "email": "user@example.com",
  "format": "pdf"
}
Response: { "success": true }
```

**События в системе:**
- Запись события `strategy_exported` в `user_events`
- Обновление метрики "Экспорт стратегии" в админке
- Счетчик экспортов для аналитики

**Переходы:**
- → `/dashboard` (Назад)
- → `/progress` (Редактировать результаты)

---

## 4. АДМИНИСТРАТИВНЫЕ СЦЕНАРИИ

### UF-012: Вход в админ-панель

#### Экран 12.1: Защита паролем (/admin)
**URL:** `https://dash.claritycult.ru/admin`

**Элементы экрана:**
- Логотип
- Заголовок: "Административная панель"
- Поле "Пароль администратора"
- Кнопка "Войти"
- Предупреждение: "Доступ только для администраторов"

**Действия администратора:**
1. Вводит админ-пароль (из `ADMIN_PANEL_PASSWORD` env)
2. Кликает "Войти"

**Валидация:**
- Пароль хранится в переменной окружения
- Сравнение в plain text (для внутреннего использования)
- Сессия сохраняется в localStorage

**Результат:**
- **Успех:** → Переход на `/admin` (Dashboard)
- **Ошибка:** "Неверный пароль"

---

### UF-013: Админ Dashboard

#### Экран 13.1: Главная панель администратора (/admin)
**URL:** `https://dash.claritycult.ru/admin`

**Элементы экрана:**

**Навигационное меню:**
- Dashboard (активная)
- Модули
- Пользователи
- Участники
- Квизы
- Настройки
- Инвайт-коды
- Юридические документы
- SQL логи
- Hydra логи
- Сравнение промптов

**Статистика (карточки):**
- Всего пользователей: 342
- Активных за неделю: 87
- Завершили онбординг: 256
- Экспортировали стратегию: 45

**Воронка активации:**
Визуализация в виде воронки:
1. Зарегистрировались: 342 (100%)
2. Подтвердили email: 320 (93%)
3. Заполнили анкету: 256 (75%)
4. Прошли 1+ модуль: 180 (53%)
5. Завершили обучение: 120 (35%)
6. Экспортировали стратегию: 45 (13%)

**Распределение статусов:**
Круговая диаграмма:
- Активные: 40%
- Неактивные (7+ дней): 35%
- Не завершили онбординг: 25%

**Динамика активности:**
График по дням (D1, D3, D7):
- День 1 (регистрация): 100%
- День 3: 60%
- День 7: 35%
- День 14: 20%

**Последние активности:**
Таблица:
| Пользователь | Действие | Время |
|--------------|----------|-------|
| user@example.com | Завершил модуль "Анализ рынка" | 5 мин назад |
| test@test.com | Зарегистрировался | 12 мин назад |
| ... | ... | ... |

**Действия администратора:**
1. Просматривает общую статистику
2. Анализирует воронку
3. Проверяет последние активности
4. Переходит в нужный раздел

---

### UF-014: Управление модулями

#### Экран 14.1: Список модулей (/admin/modules)
**URL:** `https://dash.claritycult.ru/admin/modules`

**Элементы экрана:**
- Кнопка "Создать модуль"
- Фильтры:
  - Фрейм (Frame 1 / Frame 2 / Все)
  - Статус (Активный / Черновик)
  - Поиск по названию
- Таблица модулей:
  | ID | Название | Фрейм | Порядок | Блоков | Статус | Действия |
  |----|----------|-------|---------|--------|--------|----------|
  | business-intro | Анкета бизнеса | Frame 1 | 1 | 1 | Активный | Редактировать / Материалы / Удалить |
  | market-analysis | Анализ рынка | Frame 1 | 2 | 6 | Активный | Редактировать / Материалы / Удалить |
  | ... | ... | ... | ... | ... | ... | ... |

**Действия администратора:**

**Сценарий 1: Создание модуля**
1. Кликает "Создать модуль"
2. → Переход на `/admin/modules/new`

**Сценарий 2: Редактирование модуля**
1. Находит модуль в списке
2. Кликает "Редактировать"
3. → Переход на `/admin/modules/:moduleId/edit`

**Сценарий 3: Управление материалами**
1. Кликает "Материалы"
2. → Переход на `/admin/modules/:moduleId/materials`

**API запрос:**
```
GET /api/admin/modules
Response: [
  {
    "id": "business-intro",
    "name": "Анкета бизнеса",
    "frame": "frame1",
    "order": 1,
    "blocks_count": 1,
    "status": "active"
  },
  ...
]
```

---

#### Экран 14.2: Редактор модуля (/admin/modules/:moduleId/edit)
**URL:** `https://dash.claritycult.ru/admin/modules/market-analysis/edit`

**Элементы экрана:**

**Основная информация:**
- Поле "ID модуля" (read-only для существующих)
- Поле "Название модуля"
- Dropdown "Фрейм":
  - Frame 1 (Новый бизнес)
  - Frame 2 (Действующий бизнес)
  - Общий (для обоих)
- Поле "Порядок" (число, для сортировки)
- Textarea "Описание модуля"
- Toggle "Статус":
  - Активный
  - Черновик

**Блоки модуля:**
Список блоков с возможностью добавления/удаления:
- Блок 1:
  - Название блока
  - Визуальный редактор контента (WYSIWYG)
  - Настройки AI-промпта для блока
  - Кнопка "Удалить блок"
- Блок 2: ...
- Кнопка "+ Добавить блок"

**Настройки AI:**
- Системный промпт модуля (textarea)
- Промпт для генерации результата (textarea)
- Модель AI (dropdown):
  - GPT-4
  - Claude
  - DeepSeek
- Температура (slider: 0-1)
- Max tokens (число)

**Кнопки:**
- "Сохранить"
- "Сохранить и выйти"
- "Отменить"
- "Удалить модуль" (красная, с подтверждением)

**Действия администратора:**
1. Редактирует поля модуля
2. Добавляет/удаляет блоки
3. Настраивает AI-промпты
4. Кликает "Сохранить"

**API запрос:**
```
PUT /api/admin/modules/market-analysis
Body: {
  "name": "Анализ рынка (обновлено)",
  "frame": "frame1",
  "order": 2,
  "description": "...",
  "blocks": [
    {
      "id": 1,
      "title": "Целевая аудитория",
      "content": "...",
      "ai_prompt": "..."
    },
    ...
  ],
  "ai_settings": {
    "system_prompt": "...",
    "model": "gpt-4",
    "temperature": 0.7
  }
}
```

---

### UF-015: Управление пользователями

#### Экран 15.1: Список пользователей (/admin/users)
**URL:** `https://dash.claritycult.ru/admin/users`

**Элементы экрана:**
- Фильтры:
  - Статус email (Подтвержден / Не подтвержден)
  - Фрейм (Frame 1 / Frame 2)
  - Активность (Активен / Неактивен)
  - Поиск (email, имя, telegram)
- Сортировка:
  - По дате регистрации
  - По последней активности
  - По прогрессу

**Таблица пользователей:**
| Email | Имя | Telegram | Дата рег. | Email ✓ | Прогресс | Модулей | Квиз | Действия |
|-------|-----|----------|-----------|---------|----------|---------|------|----------|
| user@example.com | Иван И. | @ivanov | 01.02.2026 | ✅ | 33% | 5/15 | Синий | Профиль / Magic link |
| test@test.com | Тест | - | 05.02.2026 | ❌ | 0% | 0/15 | - | Профиль / Magic link |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |

**Действия администратора:**

**Сценарий 1: Просмотр профиля**
1. Находит пользователя
2. Кликает "Профиль"
3. → Переход на `/admin/users/:userId`

**Сценарий 2: Magic Link для входа**
1. Кликает "Magic link" у пользователя
2. Генерируется одноразовая ссылка
3. Ссылка копируется в буфер обмена
4. Администратор открывает ссылку → вход под пользователем
5. После входа токен очищается из URL

**API запрос:**
```
POST /api/admin/users/123/magic-link
Headers: { "X-Admin-Password": "admin_password" }
Body: {
  "redirect_path": "/dashboard",
  "expires_hours": 24
}
Response: {
  "magic_link": "https://dash.claritycult.ru/?magic_token=abc123&redirect=/dashboard",
  "token": "abc123",
  "expires_at": "2026-02-12T10:00:00Z"
}
```

---

#### Экран 15.2: Профиль пользователя (/admin/users/:userId)
**URL:** `https://dash.claritycult.ru/admin/users/123`

**Элементы экрана:**

**Раздел 1: Основная информация**
- Email
- Имя
- Телефон
- Telegram (@username)
- Дата регистрации
- Последний вход
- Статус email:
  - ✅ Подтвержден
  - ❌ Не подтвержден
  - Кнопка "Подтвердить вручную" (если не подтвержден)

**Раздел 2: Доступные фреймы**
Чекбоксы:
- ☑ Frame 1 (Новый бизнес)
- ☐ Frame 2 (Действующий бизнес)
- ☐ Test Frame (тестовый)

Кнопка "Сохранить доступ к фреймам"

**Раздел 3: Результаты квиза**
- Цвет: Синий
- Тип: Стратег
- Дата прохождения: 03.02.2026
- Ответы пользователя (collapsible):
  - Вопрос 1: Вариант B
  - Вопрос 2: Вариант A
  - ...

**Раздел 4: Анкеты по фреймам**

**Анкета Frame 1 (business-intro):**
- Название бизнеса: "Моя компания"
- Сфера: E-commerce
- Описание: "..."
- Роль: Основатель
- Опыт: Первый бизнес
- Стадия: Идея
- Размер команды: 2
- Кнопка "Посмотреть полностью" (JSON view)

**Анкета Frame 2 (business-intro-frame2):**
(Аналогично, если пользователь заполнял)

**Раздел 5: Прогресс обучения**
- Всего модулей: 15
- Завершено: 5 (33%)
- В процессе: 1
- Последняя активность: 11.02.2026 10:30

Список модулей:
- ✅ business-intro (завершен 01.02.2026)
- ✅ market-analysis (завершен 03.02.2026)
- 🔄 financial-planning (в процессе, блок 3/6)
- 🔒 marketing-strategy (заблокирован)
- ...

**Раздел 6: Приватные заметки админа**
- Текстовая область для заметок (только для админов)
- История изменений заметок
- Кнопка "Сохранить заметки"

**Раздел 7: Метрики активности**
- D1 (день регистрации): 100%
- D3: 80% (вернулся)
- D7: 60% (вернулся)
- D14: 40% (неактивен)

**События пользователя (лог):**
Таблица:
| Дата/Время | Событие | Детали |
|------------|---------|--------|
| 11.02.2026 10:30 | module_completed | market-analysis |
| 03.02.2026 15:20 | quiz_completed | quiz-1, результат: Синий |
| 01.02.2026 09:00 | user_registered | - |

**Действия администратора:**

**Сценарий 1: Ручное подтверждение email**
1. Видит статус "Email не подтвержден"
2. Кликает "Подтвердить вручную"
3. Модальное окно с подтверждением
4. Email помечается как подтвержденный
5. Пользователь получает доступ к платформе

**API запрос:**
```
POST /api/admin/users/123/verify-email
Headers: { "X-Admin-Password": "..." }
Response: { "success": true }
```

**Сценарий 2: Изменение доступа к фреймам**
1. Отмечает чекбокс "Frame 2"
2. Кликает "Сохранить доступ к фреймам"
3. У пользователя появляется доступ к Frame 2
4. `available_frames` обновляется: `["frame1", "frame2"]`

**API запрос:**
```
POST /api/admin/users/123/frames
Body: { "frames": ["frame1", "frame2"] }
Response: {
  "available_frames": ["frame1", "frame2"],
  "preferred_frame": "frame1"
}
```

**Сценарий 3: Сохранение приватных заметок**
1. Пишет заметку: "Пользователь запросил консультацию по маркетингу"
2. Кликает "Сохранить заметки"
3. Заметка сохраняется в БД
4. Показывается timestamp последнего изменения

---

### UF-016: Страница участников (детальная аналитика)

#### Экран 16.1: Карточки участников (/admin/participants)
**URL:** `https://dash.claritycult.ru/admin/participants`

**Элементы экрана:**

**Фильтры:**
- Статус активности (Активен / Неактивен)
- Фрейм
- Диапазон дат регистрации
- Прогресс (0-25%, 25-50%, 50-75%, 75-100%)

**Сортировка:**
- По дате регистрации
- По прогрессу
- По последней активности

**Карточки участников:**
Для каждого участника:
- Аватар (инициалы)
- Имя + Email
- Telegram (@username)
- Прогресс-бар: 33% (5/15 модулей)
- Результат квиза: 🔵 Синий Стратег
- Последняя активность: 2 часа назад
- Метрики:
  - D1: ✅ (активен)
  - D3: ✅ (вернулся)
  - D7: ❌ (неактивен)
- Статусы:
  - ✅ Email подтвержден
  - 🎯 Завершил онбординг
  - 📊 Экспортировал стратегию
- Кнопка "Подробнее" → `/admin/users/:userId`

**Действия администратора:**
1. Просматривает список участников
2. Фильтрует по активности
3. Сортирует по прогрессу
4. Кликает "Подробнее" → переход к профилю

---

### UF-017: Управление инвайт-кодами

#### Экран 17.1: Список инвайт-кодов (/admin/invite-codes)
**URL:** `https://dash.claritycult.ru/admin/invite-codes`

**Элементы экрана:**
- Кнопка "Создать инвайт-код"
- Таблица:
  | Код | Использований | Лимит | Создан | Истекает | Статус | Действия |
  |-----|---------------|-------|--------|----------|--------|----------|
  | ABC123XYZ | 5 | 10 | 01.02.2026 | 01.03.2026 | Активен | Копировать / Деактивировать |
  | XYZ789ABC | 10 | 10 | 15.01.2026 | - | Исчерпан | - |
  | TEST123 | 0 | ∞ | 20.01.2026 | - | Активен | Копировать / Деактивировать |

**Действия администратора:**

**Сценарий 1: Создание инвайт-кода**
1. Кликает "Создать инвайт-код"
2. Модальное окно:
   - Поле "Код" (auto-generate или ручной ввод)
   - Поле "Лимит использований" (число или ∞)
   - Поле "Дата истечения" (опционально)
   - Поле "Описание" (для чего код)
   - Кнопка "Создать"
3. Код генерируется и добавляется в таблицу
4. Код автоматически копируется в буфер обмена

**API запрос:**
```
POST /api/admin/invite-codes
Body: {
  "code": "NEWCODE123",
  "max_uses": 50,
  "expires_at": "2026-03-01",
  "description": "Для рекламной кампании"
}
Response: { "code": "NEWCODE123", "created": true }
```

**Сценарий 2: Копирование кода**
1. Кликает "Копировать" у нужного кода
2. Код копируется в буфер
3. Показ уведомления: "Код скопирован"

**Сценарий 3: Деактивация кода**
1. Кликает "Деактивировать"
2. Подтверждение: "Вы уверены?"
3. Код помечается как неактивный
4. Новые регистрации с этим кодом будут отклонены

---

### UF-018: Редактирование юридических документов

#### Экран 18.1: Редактор правовых документов (/admin/legal/:slug)
**URL:** `https://dash.claritycult.ru/admin/legal/privacy-policy`

**Элементы экрана:**

**Навигация по документам (табы):**
- Политика конфиденциальности (privacy-policy)
- Оферта (offer)
- FAQ (faq)
- Согласие на обработку данных (personal-data-consent)

**Визуальный редактор:**
- WYSIWYG editor с тулбаром:
  - Форматирование (H1-H6, bold, italic)
  - Списки (ul, ol)
  - Ссылки
  - Таблицы
- Текстовое содержимое документа
- Превью (markdown-рендеринг)

**Метаданные:**
- Дата последнего обновления (auto)
- Версия документа
- Автор изменений (admin email)

**Кнопки:**
- "Сохранить черновик"
- "Опубликовать"
- "Отменить"
- "История версий"

**Действия администратора:**

**Сценарий 1: Обновление политики конфиденциальности**
1. Открывает редактор privacy-policy
2. Видит текущий текст из БД
3. Редактирует раздел "Сбор данных"
4. Добавляет новый пункт
5. Кликает "Сохранить черновик"
6. Проверяет превью
7. Кликает "Опубликовать"
8. Документ обновляется на публичной странице `/privacy-policy`

**API запрос:**
```
PUT /api/admin/legal/privacy-policy
Body: {
  "content": "# Политика конфиденциальности\n\n...",
  "version": "2.1",
  "publish": true
}
Response: { "success": true, "published_at": "2026-02-11T10:00:00Z" }
```

**Сценарий 2: Просмотр истории версий**
1. Кликает "История версий"
2. Видит список изменений:
   - Версия 2.1 (11.02.2026, admin@example.com)
   - Версия 2.0 (01.02.2026, admin@example.com)
   - ...
3. Кликает на версию → просмотр diff
4. Может откатить к предыдущей версии

---

### UF-019: Мониторинг логов

#### Экран 19.1: SQL логи (/admin/sql-logs)
**URL:** `https://dash.claritycult.ru/admin/sql-logs`

**Элементы экрана:**
- Фильтры:
  - Дата/время
  - Тип запроса (SELECT / INSERT / UPDATE / DELETE)
  - Таблица
  - Время выполнения (медленные запросы > 1s)
- Таблица логов:
  | Время | Запрос | Таблица | Время выполнения | Строк | Ошибка |
  |-------|--------|---------|------------------|-------|--------|
  | 10:30:15 | SELECT * FROM users WHERE id = 123 | users | 15ms | 1 | - |
  | 10:29:58 | INSERT INTO user_events ... | user_events | 8ms | 1 | - |
  | 10:28:42 | SELECT * FROM modules ... | modules | 1250ms | 50 | - |

**Действия администратора:**
1. Фильтрует медленные запросы
2. Анализирует проблемные запросы
3. Оптимизирует индексы БД

---

#### Экран 19.2: Hydra AI логи (/admin/hydra-logs)
**URL:** `https://dash.claritycult.ru/admin/hydra-logs`

**Контекст:** Hydra = внешний AI-сервис для обработки запросов

**Элементы экрана:**
- Фильтры:
  - Дата/время
  - Модель (GPT-4 / Claude / DeepSeek)
  - Статус (Success / Error)
  - Модуль (market-analysis, financial-planning, ...)
  - Пользователь (email)
- Таблица логов:
  | Время | Пользователь | Модуль | Модель | Токены | Время | Стоимость | Статус | Действия |
  |-------|--------------|--------|--------|--------|-------|-----------|--------|----------|
  | 10:30 | user@ex.com | market-analysis | GPT-4 | 1200 | 3.5s | $0.024 | ✅ | Детали |
  | 10:25 | test@test.com | financial | Claude | 800 | 2.1s | $0.008 | ✅ | Детали |
  | 10:20 | admin@a.com | quiz | DeepSeek | 500 | 15s | $0.001 | ❌ Error | Детали |

**Действия администратора:**

**Сценарий 1: Просмотр деталей запроса**
1. Кликает "Детали" у запроса
2. → Переход на `/admin/hydra-logs/:requestId`

---

#### Экран 19.3: Детали Hydra запроса (/admin/hydra-logs/:requestId)
**URL:** `https://dash.claritycult.ru/admin/hydra-logs/abc-123-xyz`

**Элементы экрана:**

**Раздел 1: Метаданные**
- Request ID: abc-123-xyz
- Пользователь: user@example.com
- Модуль: market-analysis, Блок 3
- Модель: GPT-4
- Timestamp: 11.02.2026 10:30:15
- Время выполнения: 3.5s
- Токены: вход 800 / выход 400
- Стоимость: $0.024

**Раздел 2: Промпт (collapsible)**
```
System: Ты эксперт по анализу рынка...
User Context: {
  "business_name": "Моя компания",
  "industry": "E-commerce",
  ...
}
User Message: Как определить целевую аудиторию?
```

**Раздел 3: Ответ AI (collapsible)**
Markdown-рендеринг ответа

**Раздел 4: Технические детали**
- HTTP статус: 200
- Model endpoint: https://api.openai.com/v1/chat/completions
- Headers: {...}
- Raw request/response (JSON)

**Раздел 5: Ошибки (если есть)**
- Код ошибки
- Сообщение
- Трейс

**Действия администратора:**
1. Изучает промпт
2. Анализирует ответ AI
3. Проверяет технические детали
4. Копирует JSON для отладки

**Кнопки:**
- "Скопировать промпт"
- "Скопировать ответ"
- "Копировать JSON"
- "Повторить запрос" (debug)

---

### UF-020: Сравнение промптов

#### Экран 20.1: Сравнение промптов модулей (/admin/prompts/compare)
**URL:** `https://dash.claritycult.ru/admin/prompts/compare`

**Элементы экрана:**
- Dropdown 1: "Выберите модуль 1" (market-analysis)
- Dropdown 2: "Выберите модуль 2" (financial-planning)
- Кнопка "Сравнить"

**Результат сравнения (split view):**

**Левая колонка: market-analysis**
```
System Prompt:
Ты эксперт по анализу рынка...

Result Generation Prompt:
Создай структурированный анализ...

Model: GPT-4
Temperature: 0.7
Max Tokens: 2000
```

**Правая колонка: financial-planning**
```
System Prompt:
Ты финансовый консультант...

Result Generation Prompt:
Сформируй финансовый план...

Model: Claude
Temperature: 0.5
Max Tokens: 3000
```

**Diff-подсветка:**
- Зеленым: уникальные части первого промпта
- Красным: уникальные части второго промпта
- Белым: одинаковые части

**Действия администратора:**
1. Выбирает два модуля
2. Кликает "Сравнить"
3. Анализирует различия промптов
4. Оптимизирует промпты для консистентности

---

## 5. ВСПОМОГАТЕЛЬНЫЕ FLOW

### UF-021: Профиль пользователя

#### Экран 21.1: Страница профиля (/profile)
**URL:** `https://dash.claritycult.ru/profile`

**Элементы экрана:**

**Раздел 1: Основная информация**
- Email (read-only)
- Имя (редактируемое)
- Телефон (редактируемое)
- Telegram (редактируемое, формат @username)
- Аватар (загрузка изображения)

**Раздел 2: Безопасность**
- Последний вход: 11.02.2026 10:00
- Кнопка "Изменить пароль"
- Сессии (список активных):
  - Chrome, Windows (текущая)
  - Safari, iPhone (активна 2 дня назад)
  - Кнопка "Завершить сессию"

**Раздел 3: Настройки уведомлений**
Чекбоксы:
- ☑ Email-уведомления о новых модулях
- ☑ Напоминания о незавершенных модулях
- ☐ Рассылка с советами
- ☑ Уведомления о системных обновлениях

**Раздел 4: Экспорт данных**
- Кнопка "Скачать мои данные" (GDPR compliance)
  - Скачивается ZIP с:
    - Профиль (JSON)
    - Анкеты (JSON)
    - Прогресс обучения (JSON)
    - История диалогов с AI (JSON)
    - Экспортированная стратегия (PDF)

**Раздел 5: Удаление аккаунта**
- Кнопка "Удалить аккаунт" (красная)
- Модальное окно с подтверждением:
  - "Вы уверены? Это действие необратимо"
  - Чекбокс "Я понимаю, что все мои данные будут удалены"
  - Поле "Введите ваш пароль для подтверждения"
  - Кнопка "Подтвердить удаление"

**Действия пользователя:**

**Сценарий 1: Обновление профиля**
1. Изменяет имя: "Иван" → "Иван Иванович"
2. Добавляет Telegram: @ivanov
3. Кликает "Сохранить изменения"
4. Показ уведомления: "Профиль обновлен"

**API запрос:**
```
PUT /api/profile
Body: {
  "name": "Иван Иванович",
  "telegram": "@ivanov",
  "phone": "+79991234567"
}
```

**Сценарий 2: Изменение пароля**
1. Кликает "Изменить пароль"
2. Модальное окно:
   - Поле "Текущий пароль"
   - Поле "Новый пароль"
   - Поле "Подтвердите новый пароль"
   - Кнопка "Изменить пароль"
3. Вводит данные
4. Кликает "Изменить пароль"
5. Пароль обновляется
6. Принудительный logout из всех сессий (кроме текущей)

**Сценарий 3: Экспорт данных**
1. Кликает "Скачать мои данные"
2. Генерируется ZIP-архив
3. Файл скачивается: `claritycult_data_2026-02-11.zip`

**API запрос:**
```
GET /api/profile/export-data
Response: Binary ZIP file
```

---

### UF-022: Настройки платформы (пользовательские)

#### Экран 22.1: Настройки (/settings)
**URL:** `https://dash.claritycult.ru/settings`

**Элементы экрана:**

**Раздел 1: Отображение**
- Dropdown "Язык интерфейса":
  - Русский
  - English
- Toggle "Темная тема" (если поддерживается)
- Slider "Размер шрифта" (100% - 150%)

**Раздел 2: Обучение**
- Dropdown "Предпочитаемый фрейм":
  - Frame 1 (Новый бизнес)
  - Frame 2 (Действующий бизнес)
- Toggle "Показывать подсказки"
- Toggle "Автосохранение каждые 30 сек"

**Раздел 3: AI-ассистент**
- Dropdown "Стиль ответов AI":
  - Краткий
  - Детальный
  - Творческий
- Slider "Температура AI" (0.0 - 1.0)
  - 0.0 = Фактический, предсказуемый
  - 1.0 = Творческий, разнообразный

**Раздел 4: Приватность**
- Toggle "Разрешить сбор аналитики"
- Toggle "Делиться анонимными данными для улучшения AI"

**Кнопка "Сохранить настройки"**

**Действия пользователя:**
1. Изменяет настройки
2. Кликает "Сохранить"
3. Настройки применяются немедленно

**API запрос:**
```
PUT /api/settings
Body: {
  "language": "ru",
  "preferred_frame": "frame1",
  "ai_temperature": 0.7,
  "analytics_enabled": true
}
```

---

## ДОПОЛНИТЕЛЬНЫЕ ТЕХНИЧЕСКИЕ ДЕТАЛИ

### Система разблокировки модулей

**Логика:**
- Модуль 1 (business-intro) разблокирован по умолчанию
- После завершения модуля N разблокируется модуль N+1
- Модули упорядочены по полю `order` в БД
- В таблице `user_progress`:
  - `completed_modules` (array): ["business-intro", "market-analysis"]
  - `unlocked_modules` (array): ["business-intro", "market-analysis", "financial-planning"]

**API проверки доступа:**
```
GET /api/modules/:moduleId/access
Response: {
  "accessible": true,
  "reason": "completed_previous" | "unlocked_manually" | "locked"
}
```

### Система контекста AI

**Источники контекста для AI:**
1. Анкета пользователя (`business-intro` или `business-intro-frame2`)
2. История диалогов в текущем модуле
3. Результаты предыдущих модулей
4. Системный промпт модуля
5. Промпт текущего блока

**Формирование запроса к AI:**
```json
{
  "system": "Ты эксперт по анализу рынка...",
  "context": {
    "user_business": {
      "name": "Моя компания",
      "industry": "E-commerce",
      ...
    },
    "previous_modules": [
      { "module": "market-analysis", "result": "..." }
    ]
  },
  "messages": [
    { "role": "user", "content": "Как определить ЦА?" },
    { "role": "assistant", "content": "..." },
    { "role": "user", "content": "А для моей ниши?" }
  ]
}
```

### Email-уведомления

**Триггеры отправки:**
1. **Регистрация:** Письмо с подтверждением email
2. **Забытый пароль:** Ссылка для сброса
3. **Завершение модуля:** Поздравление + следующий модуль
4. **Неактивность 3 дня:** Напоминание о незавершенных модулях
5. **Неактивность 7 дней:** Персонализированное предложение
6. **Новый модуль разблокирован:** Уведомление о доступе
7. **Экспорт стратегии:** PDF на email (по запросу)

### Метрики и аналитика

**Метрики пользователя (таблица `daily_user_metrics`):**
- `user_id`
- `date` (день)
- `metric_name` (D0, D1, D3, D7, D14, D30)
- `metric_value` (bool: активен/неактивен)
- `updated_at`

**События (таблица `user_events`):**
- `user_registered`
- `email_verified`
- `onboarding_completed` (заполнена анкета)
- `module_completed`
- `quiz_completed`
- `strategy_exported`
- `user_logged_in`
- `user_inactive_3d`
- `user_inactive_7d`

**Расчет активности:**
- D1: пользователь зашел на следующий день после регистрации
- D3: зашел в течение 3 дней
- D7: зашел в течение 7 дней
- Retention rate: (активные D7 / зарегистрированные) * 100%

---

## ИТОГО: Детальная разбивка User Flow

**Публичные (4):**
1. Первое знакомство (7 экранов)
2. Юридические документы (3 экрана)
3. - (резерв)
4. - (резерв)

**Аутентификация (5):**
5. Регистрация (2 экрана + email verification)
6. Вход (1 экран + magic link)
7. Восстановление пароля (2 экрана)
8. - (резерв)
9. - (резерв)

**Основные пользовательские (11):**
10. Выбор направления (1 экран)
11. Онбординг (2 варианта анкет)
12. Модули с AI (множество экранов)
13. Квизы (2 экрана)
14. Прогресс (2 экрана)
15. Экспорт стратегии (1 экран)
16. - (резерв)
17. - (резерв)
18. - (резерв)
19. - (резерв)
20. - (резерв)

**Административные (9):**
21. Админ Dashboard (1 экран)
22. Модули (2 экрана)
23. Пользователи (2 экрана)
24. Участники (1 экран)
25. Инвайт-коды (1 экран)
26. Юридические документы (1 экран)
27. Логи (3 экрана)
28. Сравнение промптов (1 экран)
29. - (резерв)

**Вспомогательные (2):**
30. Профиль (1 экран)
31. Настройки (1 экран)

**ВСЕГО ЭКРАНОВ: 50+ детально описанных User Flow**

---

**Дата создания:** 11.02.2026  
**Версия:** 1.0  
**Автор:** AI Analysis Based on ClarityCult Codebase
