# Бизнес-требования: Веб-интерфейс для Snowbike RAG

## 1. Проблема

API работает, но пользоваться им можно только через curl. Нужен красивый и удобный веб-интерфейс для поиска по базе знаний сноубайков.

---

## 2. Что хотим получить

Страницу в браузере, где можно задать вопрос и получить красивый ответ с источниками.

**URL:** `https://openclaw.mva154.duckdns.org/snowbike-rag/`

---

## 3. Функциональные требования

### 3.1 Страница поиска (главная)
• Поле ввода запроса (большое, по центру экрана)
• Кнопка «Найти» или отправка по Enter
• История последних запросов (локально, в браузере)

### 3.2 Результаты поиска
• Ответ LLM — красиво оформленный (Markdown → HTML)
• Источники — список карточек:
  - Дата сообщения
  - Название топика (цветовая метка)
  - Превью текста (2-3 строки, с выделением ключевых слов)
  - Ссылка на оригинальное сообщение в Telegram (если возможно: `https://t.me/snowbikerussia/{message_id}`)
• Количество найденных источников
• Время ответа (мс)

### 3.3 Фильтры (опционально, но желательно)
• Выбор топика (чекбоксы или мультиселект)
• Сортировка: по релевантности / по дате
• Лимит результатов: 5 / 10 / 20

### 3.4 Статистика
• Ссылка или панель «О базе данных»:
  - Всего сообщений
  - Количество топиков
  - Последнее обновление
  - Статус ChromaDB (заполняется / готов)

---

## 4. Технические требования

### 4.1 Стек
• Flask (уже есть, порт 5557)
• HTML + CSS + JavaScript (без сборщиков, без React/Vue)
• Tailwind CSS через CDN (для быстрой стилизации)
• Markdown-рендеринг ответов: marked.js через CDN
• Подсветка синтаксиса в коде (если есть в ответах): highlight.js через CDN

### 4.2 Адаптивность
• Мобильная версия (responsive)
• Хорошо выглядит на экране телефона (основной сценарий использования)

### 4.3 Скорость
• Страница загружается < 1 секунды
• Запрос показывает спиннер/анимацию загрузки
• Результаты появляются плавно (fade-in)

### 4.4 Цветовая схема
• Тёмная тема (по умолчанию)
• Акцентный цвет: синий (#3B82F6) или оранжевый (#F97316)
• Фон: #0F172A (тёмно-синий)
• Текст: #F1F5F9 (светло-серый)
• Карточки: #1E293B (чуть светлее фона)

---

## 5. UX-требования

### 5.1 Поле ввода
• Placeholder: «Спросите про сноубайки...»
• Автофокус при загрузке
• Многострочное поле (textarea, 2 строки)
• Кнопка отправки справа (иконка 🔍)

### 5.2 Ответ
• Заголовок: «Ответ»
• Текст ответа — основной контент (крупный шрифт)
• Источники — ниже ответа, в виде списка
• Каждый источник — мини-карточка с датой, топиком, превью

### 5.3 Анимации
• Спиннер при загрузке (dots или skeleton)
• Плавное появление результатов (fadeIn 0.3s)
• Hover-эффект на карточках источников

### 5.4 Ошибки
• Если API недоступен: «Сервис временно недоступен»
• Если нет результатов: «По вашему запросу ничего не найдено»
• Если запрос слишком короткий: «Введите более точный запрос»

---

## 6. Что НЕ входит

• Авторизация и пользовательские аккаунты
• История запросов на сервере (только localStorage)
• Экспорт результатов (PDF, Markdown)
• Голосовой ввод
• Переключение языка

---

## 7. Критерии приёмки

✅ Открывается `https://openclaw.mva154.duckdns.org/snowbike-rag/` — видно страницу поиска
✅ Ввод «какое масло для Polaris» → ответ с источниками за < 15 секунд
✅ Ответ красиво оформлен (заголовки, списки, выделение)
✅ Источники — карточки с датой, топиком, превью
✅ Хорошо выглядит на телефоне
✅ Тёмная тема
✅ Загрузка показывает спиннер

---

## 8. Приоритет

**Сейчас:** Страница поиска + результаты + адаптивность
**Позже:** Фильтры по топикам, статистика, ссылки в Telegram
