AndreyandClaude Fable 5.1 19106620a9 💄 feat(ui): логотип Chatballs (файл владельца) без подложки, цвет темы; имя сервиса в UI — Chatballs
- LogoIcon: два круга и перемычка с вырезами, fill currentColor; в сайдбаре,
  рейке, экране входа/мастера, портале помощи — без акцентной/тёмной подложки,
  цветом текста темы (--n-1); favicon без фона, цвет по prefers-color-scheme
- видимое имя сервиса — Chatballs (заголовки, тексты, title); внутренние ключи
  (localStorage, postMessage, id виджета) пока прежние — переименование проекта позже

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-05 21:22:19 +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 ведёт, ждёт оператора, ведёт сотрудник, закрыт, спам, архив), метки, приоритеты, заметки, шаблоны ответов, голосовые (живая речь из открытого датасета Mozilla Common Voice, CC0), портал поддержки со статьями, звонки, уведомления и история использования AI за 30 дней. Видимая часть повторяет кадры дизайн-базлайна v2 один в один. Набор покрывает каждую модель системы — это проверяет тест 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%