AndreyandClaude Fable 5.1 54f19f783e 💄 fix(ui): чат — адаптив S2/M1/M2, кадры S1 и G по дизайн-базлайну v2
- снят глобальный min-width 1024 (медиазапросы ≤768 не срабатывали); ограничение
  осталось только у страниц вне чата
- M1: мобильная шапка ☰ · «Все диалоги ▾» + «Организация · N диалогов» · аватар 32;
  ☰ открывает дерево «Диалоги» выезжающим сайдбаром (состояние поднято в Shell);
  строки 12/16, аватар 42, шрифты по макету
- M2: шапка ленты «назад · аватар 36 · имя/статус · контакт · ⋯», компактный
  композер (поле + кнопка-иконка 38 r10, плейсхолдер «Сообщение…»)
- S2: затемнение ленты при открытой панели, крестик в шапке панели, кнопка
  «Контакт» подсвечена только при открытой панели
- S1: пустой список с иконкой в круге 44; без выбранного диалога — только
  «Выберите диалог», без панели и композера
- бренд сайдбара: логотип + переключатель организации (153×32, шеврон 14);
  дерево показывает «Группы»/«Агенты» и без элементов
- G: меню полей блока «Диалог» — 283px, заголовок «Перенести в группу», галочка
  у выбранного, подпись «Диалог без группы видят все сотрудники»; все меню
  приложения по макету: 220px, пункты 33 r7, разделитель n-9, тень 0 6 20
- textarea/select наследуют шрифт (композер был моноширинным)
- backend: GET /conversations/directory/ — все группы и активные коллеги для
  оператора (сотруднику менеджерские списки закрыты, а переносить/назначать он
  может); чат грузит справочник для всех ролей

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-05 19:14:32 +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 41.4%
TypeScript 25.3%
HTML 15.9%
JavaScript 10.7%
CSS 5.9%
Other 0.7%