AndreyandClaude Fable 5.1 5dcc98d594 💄 fix(ui): чат по дизайн-базлайну v2 — аудит вычисленных стилей против макета
Покадровое сравнение кадров A1/A2 и A–H макета с приложением по вычисленным
стилям (размеры, цвета, границы, радиусы, шрифты, композиция) в обеих темах.

Сайдбар: 220px на surface2, шапка «лого 28 + имя», пункты 36/10px без
акцентной полосы, бейдж очереди — жёлтая плашка, профиль с онлайн-точкой и
«роль · e-mail», меню ⋯ (уведомления переехали сюда — верхней панели в чате у
менеджера по макету нет).

Список: 323px, переключатель охвата со счётчиком на подложке n9, сортировка и
«Скрыть список», подсказка «/» в поиске, вкладки-подчёркивание, строка
диалога: канал + агент → имя · время («вчера») → превью с «↩» и непрочитанными →
таймер ожидания · группа · метки (h20, r5); активная строка — n9 без полосы.

Лента: шапка с точкой режима и строкой «статус · канал · агент · группа»,
одно действие «Взять диалог» (решение 2) и «Вернуть AI», звонки — в карточке
контакта; у входящих нет аватара и обводки (msg-in), исходящие — тинт акцента
22% / AI 16% с подписью «AI · Консультант» и «Имя · вы», разделители дней,
системные события-чипы с тоном. Первое сообщение сотрудника атомарно
перехватывает диалог (backend: ConversationMessageView → claim).

Композер: поле сверху, инструменты снизу (голосовое, «Шаблоны»), «Отправить ⏎»,
строка-предупреждение о режиме; кадры D/E — карточка с замком.

Контекст-панель 320px: карточка контакта (аватар 64, плашка канала, имя 20,
поля с копированием, «Позвонить»/«Видеозвонок»), блок «Диалог» (селекты
36px с точками/индикатором, Агент и Режим read-only, метки-чипы с
«+ Добавить», «Начат»), «Заметка» — жёлтая карточка с карандашом, «История» —
карточки с плашкой канала.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-05 18:22:40 +03:00
2026-08-01 00:37:24 +03:00
2026-06-17 18:14:16 +03:00
2026-06-26 15:10:36 +03:00

Chatbolls

Canonical implementation workspace for hub.edevs.tech.

Быстрый старт (одна минута)

Нужен только Docker (Docker Desktop на Windows/macOS или Docker Engine с Compose на Linux). Никаких параметров заранее задавать не нужно — всё спросит браузер.

Windows (PowerShell):

git clone <URL репозитория> chatbolls
cd chatbolls/code/custocrm
.\scripts\start.ps1

Linux / macOS:

git clone <URL репозитория> chatbolls
cd chatbolls/code/custocrm
./scripts/start.sh

Скрипт копирует .env.example в .env (если его нет), собирает образы и поднимает стек. Когда в логах появится готовность, откройте http://localhost — вместо входа система покажет мастер первого запуска: название организации, ваше имя, e-mail и пароль владельца, переключатель «Установить демо-данные». После кнопки «Начать» вы сразу в приложении под владельцем. Мастер доступен только пока в системе нет ни одной организации; после создания владельца он закрывается навсегда.

Демо-данные

Демо — вымышленное ателье «Норд» (дизайн-базлайн v2): сотрудники и группы, агенты с подключениями Telegram/MAX/почта/веб-виджет, база знаний с вложениями, диалоги во всех состояниях (AI ведёт, ждёт оператора, ведёт сотрудник, закрыт, спам, архив), метки, приоритеты, заметки, шаблоны ответов, голосовые, портал поддержки со статьями, звонки, уведомления и история использования AI за 30 дней. Набор покрывает каждую модель системы — это проверяет тест identity.test_seed_demo.

Демо ставится в вашу организацию и удаляется целиком одной кнопкой: Настройки → Демо-данные. Там же — учётные записи демо-сотрудников из разных групп, чтобы посмотреть систему их глазами (пароль общий и намеренно публичный — Chatbolls-Demo-2026). Ваши данные при удалении не затрагиваются: сид ведёт реестр созданных записей и удаляет ровно их.

Для разработки то же доступно из командной строки:

docker compose run --rm backend-app python manage.py seed_demo --organization <slug> --apply
docker compose run --rm backend-app python manage.py seed_demo --organization <slug> --remove

Редактируемые данные — apps/backend/hub_platform/identity/demo_seed/data/ (JSON-манифест на домен, media/ — вложения, аватары, голосовые). Голосовые сообщения читаются из media/voice/ (см. README там); если файла нет, сообщение пропускается.

Режим поставки

По умолчанию локально запускается облачный режим. Коробочный режим — тем же контуром с явным признаком поставки:

.\scripts\start.ps1 -Mode Cloud
.\scripts\start.ps1 -Mode SelfHosted

Приложение не определяет режим по домену, числу организаций или данным. Единственный источник — CUS_DELIVERY_MODE со значением CLOUD или SELF_HOSTED. В production переменная обязательна; шаблон коробочного экземпляра env.example уже содержит SELF_HOSTED.

Что поднимается

  • изолированные Django-рантаймы app, platform и loopback-only admin;
  • фоновый worker (outbox, поллинг мессенджеров, установка демо);
  • PostgreSQL и Redis;
  • Internal Hub UI и Web Chat UI;
  • локальный Nginx reverse proxy.

Секретов production в репозитории нет.

Локальные адреса:

  • Приложение: http://localhost (то же — http://app.localhost/)
  • Health платформы: http://platform.localhost/api/v1/health/live/
  • Django admin (только loopback): http://127.0.0.1:18001/admin/
  • Internal Hub UI напрямую (Vite): http://localhost:5173
  • Web Chat: http://localhost:5175
  • App API напрямую: http://localhost:8010/api/v1

Tests

All suites run in Docker, so no manual environment is required — the test runners auto-detect themselves and relax production hardening (secret-key fail-fast, SSL redirect, throttling) for the duration of the run.

Run everything (backend tests, frontend unit tests, typechecks):

.\scripts\check.ps1

Individual suites:

# Backend (pytest + pytest-django)
docker compose run --rm backend-app pytest

# Frontend unit tests (vitest)
docker compose run --rm frontend npm run test

# End-to-end (Playwright, internal-ui) — auto-starts the dev server
npx playwright install chromium   # one-time
npx playwright test --project=internal-ui

Backend pytest configuration lives in apps/backend/pytest.ini (it must sit next to manage.py so it is also visible inside the backend container).

Languages
Python 54.4%
TypeScript 35.6%
CSS 8.2%
Shell 0.8%
JavaScript 0.6%
Other 0.3%