Commit Graph

160 Commits

Author SHA1 Message Date
wasrusgen
6e0e85db86 ux(cabinet): объединить Этап 1+2 в «Разговор с Еленой» — клиент не теряет контекст (4 шага вместо 5) 2026-06-03 13:43:17 +03:00
wasrusgen
492b1adae4 fix(cabinet): Этап 2 — рабочий чат с Еленой (продолжение беседы), вместо заглушки 2026-06-03 13:35:36 +03:00
wasrusgen
5ded2c7312 feat: предложения клиента — фиксация и триаж
Отдельный backlog «Предложения» (не отклонения): Елена ловит идею в диалоге
(record_suggestion) + кнопка «Мои идеи» в кабинете. Статусы new/discussion/
accepted/rejected + решение. CRM-вкладка «Предложения» с триажем, клиент видит статус.
2026-06-03 13:18:39 +03:00
wasrusgen
4be49a25fb feat(chat): авто-обновление канала Консультант (polling 15с, GET /api/operator-chat) 2026-06-03 12:57:47 +03:00
wasrusgen
865b87e664 feat: живой канал «Консультант» (клиент ↔ руководитель проекта)
Отдельный человеческий канал рядом с Еленой (AI):
- backend: /api/operator-chat (channel=operator), уведомления в Telegram обеим сторонам
- кабинет: раздел «💬 Консультант» (чат с Русланом, мик)
- CRM: вкладка «Чат с клиентом» + бейдж непрочитанных + мик
2026-06-03 12:36:32 +03:00
wasrusgen
9c4f68cf55 feat(ux): микрофон везде + документы у оператора + полировка интерфейса
🎤 голос: «Спросить Елену» и профиль (кабинет), заметка и задачи (CRM) — переиспользуемая кнопка-мик
📎 документы: вкладка «Документы» в CRM (просмотр+загрузка оператором), открытие/скачивание файлов,
   прикрепление файла к вопросу Елене (кабинет), backend /api/doc
🖥 интерфейс: модалка «Новый клиент» (имя/ниша/контакт/источник) вместо prompt(),
   inline-правка цены этапа, тосты вместо alert()
2026-06-03 12:17:48 +03:00
wasrusgen
43fe230d58 security: remove leaked bot token from deploy.sh (now from env) 2026-06-03 10:27:18 +03:00
wasrusgen
5a94b2cea3 security: remove backend/ from public repo (leaked bot token, prod code)
- backend/elena_app.py contained hardcoded Telegram bot token (now revoked)
- backend/ is production code, does not belong in public mockups repo
- added backend/ to .gitignore; local files preserved (--cached)
2026-06-03 10:25:22 +03:00
wasrusgen
7c79cd305a security(crm): закрыть операторские роуты + авто-токен на все вызовы CRM
- gate /api/project/crm|tasks|approve|delete под is_operator() (только crm.html их зовёт)
- crm.html: обёртка window.fetch — X-Operator-Token на все /api/ вызовы оператора
2026-06-02 07:05:04 +03:00
wasrusgen
a3fc1b6d9d feat: операторская авторизация (Telegram initData + пароль) + MiniApp + каркас Sber PAY
- backend: /api/operator/auth (initData HMAC | пароль), gate /api/projects,
  бот /myid + кнопка «Открыть CRM» для оператора (ADMIN_TG_IDS)
- crm.html: Telegram SDK + гейт (вход через TG на телефоне, пароль на десктопе),
  X-Operator-Token на /api/projects
- каркас Sber PAY: mTLS из .p12, OAuth-токен, /api/payment/sber-invoice,
  /api/payment/sber-status — активируется по .env (SBER_PAY_ENABLED + пароль + secret)
2026-06-02 07:01:13 +03:00
wasrusgen
835b6a05df feat(crm): индикатор баланса AI-движка
/api/ai-status — пинг в 1 токен, ловит low_balance. В CRM: точка в шапке
(зелёная/красная) + плашка «AI-движок недоступен — пополните баланс».
Без названия вендора (публичный репо + правило конфиденциальности).
2026-06-02 06:28:15 +03:00
wasrusgen
ca9bdc8e0c fix(spec-client): обязательные риски отклонений в open_questions ТЗ под клиента 2026-06-02 00:24:02 +03:00
wasrusgen
5e67ddb286 feat: орг.слой в CRM + Организация в смете + Phase 3 (ТЗ под клиента) + выгрузка
1. Операторская CRM: вкладка «Организация» (оргструктура+должностные) с пересборкой
2. Смета: «Организация» — оплачиваемый этап (org:10000) во всех массивах стадий
3. Phase 3: /api/build-spec-client — ТЗ под вариант клиента (учёт отклонений+орг),
   переключатель «Эталон Елены / Вариант клиента» в ТЗ-вкладке CRM
4. Должностные+оргструктура в выгрузку ТЗ (PDF в CRM, MD+JSON в кабинете)
2026-06-02 00:14:52 +03:00
wasrusgen
024c3fb500 fix(cabinet): чат интервью открывается сразу внизу, без «пролёта» сверху
Причина: addMsg скроллил .chat (без своего скролла), реальный контейнер .scroll
оставался вверху, потом уезжал вниз скролл-анкерингом. Теперь скроллим .scroll,
прыжок вниз после показа sv1 (rAF), overflow-anchor:none против дрейфа.
2026-06-02 00:09:05 +03:00
wasrusgen
a27ab5b27e fix(jobs): max_tokens 3500->8000 + лаконичность — должностные не обрезались 2026-06-01 23:53:56 +03:00
wasrusgen
149f02da37 feat: организационный слой — оргструктура + должностные инструкции (между IDEF0 и ТЗ)
- backend: генераторы build-orgchart (из IDEF0 mechanisms) и build-jobs
  (должностные с учётом отклонений клиента), артефакты orgchart/jobs в state
- кабинет: вкладка «🏢 Организация» на этапе 4 — оргструктура (роли, штат,
  подчинённость, узкие места) + должностные (ответственность, KPI, полномочия)
2026-06-01 23:48:34 +03:00
wasrusgen
940cf3484f fix(backend): init_db() на уровне модуля — миграции идут под gunicorn
Раньше init_db() звался только в __main__, gunicorn импортирует модуль —
ALTER-миграции (колонка channel) не применялись. Теперь идемпотентно при импорте.
2026-06-01 23:42:50 +03:00
wasrusgen
9558c8b423 feat(crm): вкладка «Отклонения» — эталон Елены против выбора клиента
Оператор при внедрении видит расхождения: решение клиента (внедряем) +
рекомендация Елены (флажок) + причина клиента. Бейдж со счётчиком.
2026-06-01 23:38:38 +03:00
wasrusgen
cf5e4f050a feat(cabinet): «Спросить Елену» на этапах 3-5 + память + фиксация отклонений
- backend: канал messages (interview/qa), /api/ask с полным контекстом
  (интервью + документы + артефакт этапа + Q&A), tool record_deviation
- хранилище отклонений (артефакт deviations: эталон Елены + выбор клиента + причина)
- кабинет: свёрнутый док «Спросить Елену» на этапах 3-5, контекст этапа
2026-06-01 23:36:28 +03:00
wasrusgen
30160a0999 feat(воронка): drag-and-drop смены этапа, суммы по колонкам, степпер+бейдж на картах, моб.скролл
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 22:59:40 +03:00
wasrusgen
0a9d924d58 feat(CRM): мобильный адаптив — гамбургер-меню, drawer-сайдбар, KPI/гриды в 1-2 колонки
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 21:52:20 +03:00
wasrusgen
11486ce8a8 feat(кабинет): мобильный адаптив — гамбургер-меню + выезжающий сайдбар (Telegram на телефоне)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 21:23:06 +03:00
wasrusgen
509ce225b9 fix(смета): «Получено» и разблокировка ТЗ считаются по всему реестру платежей, не только по этап-привязанным (устранён рассинхрон чисел)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:22:07 +03:00
wasrusgen
d0010320b1 ops(deploy): py_compile guard перед рестартом + проверка живости сервиса + Telegram-алерт при сбое
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:15:13 +03:00
wasrusgen
c7c91d9dbe feat(дашборд): поиск по клиентам + сортировка (имя/сумма/этап/статус)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:12:41 +03:00
wasrusgen
d8036dbdb3 docs: шаблон .env для активации СБП Сбера 2026-06-01 09:13:38 +03:00
wasrusgen
c56d7ebf00 feat(СБП): динамический QR Сбера — кнопка на этапе, демо-режим, webhook + ручное подтверждение
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 09:12:11 +03:00
wasrusgen
2fc91433da feat(платежи): автозадачи-напоминания о сроках оплаты этапов
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 09:02:00 +03:00
wasrusgen
066a628695 feat(платежи): нераспределённый остаток, сроки этапов (график), нал/безнал, клиент видит даты
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 08:54:07 +03:00
wasrusgen
b965d689d8 fix(backend): whitelist stage_prices + complexity в /api/project/crm — смета теперь персистится
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 08:16:31 +03:00
wasrusgen
a621f301ce ui: правка существующих платежей в реестре (дата/сумма/назначение) + sync со сметой
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 08:14:24 +03:00
wasrusgen
9b0d0af277 ui: полное редактирование сметы — правка цены этапа, отмена оплаты, синхронизация с реестром
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 08:00:44 +03:00
wasrusgen
24bd0e29d5 ui: сворачиваемые секции (динамика свёрнута) + фильтры клиентов и задач
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 07:55:10 +03:00
wasrusgen
984ead3f2f ui: вкладка Сделка — плотный обзор клиента (прогресс+финансы+контакт+заметка)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 07:48:35 +03:00
wasrusgen
6828ecfeb3 ui: компактный дашборд — таблицы вместо карточек, степпер в строку
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 07:38:32 +03:00
wasrusgen
5b146fb7e5 feat: смета проекта — гибридная модель оплаты (вход 0₽ + модули)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 07:27:31 +03:00
wasrusgen
1a1dd83cbb Revert "feat: 3 color themes (green/gray/dark) + switcher in header"
This reverts commit 7be9b4e14b.
2026-05-31 19:45:38 +03:00
wasrusgen
7be9b4e14b feat: 3 color themes (green/gray/dark) + switcher in header 2026-05-31 19:36:57 +03:00
wasrusgen
31f39bd36e legal: add 8.6 reverse license — anonymized business model structure for market templates
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 14:03:10 +03:00
wasrusgen
ffa56b1d18 add: Mokap mockups, CLAUDE.md, project structure
- 15 HTML mockups (admin, assembler, manager, owner и др.)
- CLAUDE.md с политикой работы с файлами
- .claude/launch.json

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 13:39:30 +03:00
wasrusgen
2095c56307 legal: update phone to +7 993 079-45-42 (virtual work number)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 13:27:23 +03:00
wasrusgen
9e351b2b61 legal: full address from EGRIP — 198412, СПб, Ломоносов, ул. Ломоносова, 2, лит.А
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 13:24:01 +03:00
wasrusgen
d6923e5ad1 fix: payment stages from client progress (5 analysis stages), no generator; rule: 100% paid = ТЗ unlocked; backend adds stage_payments
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 01:22:46 +03:00
wasrusgen
78b3e22eb6 feat: payment plan (schedule) bound to analysis milestones — flexible per-client schemes (100%/50-50/staged), mark stage paid creates registry payment; backend whitelists payment_schedule 2026-05-31 01:14:24 +03:00
wasrusgen
9a349fe21e crm dashboard: client rows show billing type + 5-stage stepper + current stage; backend adds has_selection
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 00:01:07 +03:00
wasrusgen
37c7486cc0 crm: screen mockup table full-width + horizontal scroll (nowrap cells, no 640px cap)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 23:56:00 +03:00
wasrusgen
1d9d4ef9c8 cabinet: Telegram WebApp init (expand + start_param token), add Политика ПДн to signing docs
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 16:59:48 +03:00
wasrusgen
e61ae25647 legal: add Политика обработки ПДн (152-ФЗ) — third doc, referenced by oferta 4/10
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 16:56:06 +03:00
wasrusgen
e0ee138b2b fix: tg webhook route /api/tg/webhook (nginx strips /consulting prefix)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 16:54:49 +03:00
wasrusgen
435f9b9a4d crm: functional client card — top main-tabs (Сделка/Цена/Платежи/Задачи/Анализ) with badges, pricing for paid+free, Telegram invite button
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 16:49:26 +03:00