На главную

Рабочий день 20.09: SalesMachine, почта и карты

За день допиливали SalesMachine, AgentChat, Mail, Calendar и SmartMoney: чинили чаты, уведомления, почту, календарные подписки и разбор сумм.

Фокус дня

Куда ушло внимание за день — по объёму переписки в AgentChat, 286 сообщений всего.

  • SalesMachine — 52%
  • AgentChat — 15%
  • SmartMoney — 9%
  • LYSAK — 7%
  • Mail — 6%
  • Courier — 6%
  • Calendar — 3%
  • Mentor — 2%

SalesMachine

SalesMachine — это наш рабочий интерфейс для диалогов, лидов и ручного ведения коммуникации с клиентами. В нём мы одновременно держим карточки контактов, переписку, вложения, статусы и всё, что нужно, чтобы доводить разговор до результата.

Сегодня в SalesMachine было больше всего движения: мы разбирали, как должны жить уведомления, карточки хэндоффов, список диалогов и поведение интерфейса на телефоне. Отдельно подтвердили, что push-подписка в базе ещё не появилась, а Telegram пока остаётся рабочим каналом, потому что приложение на телефоне не было переустановлено как установленный PWA; из-за этого пуши из приложения физически не встают, пока оно не добавлено на экран домой. В процессе согласовали, что хэндофф теперь создаёт настоящую карточку в приложении с именем, телефоном, сайтом и текстом, а не абстрактную запись.

Параллельно шла большая серия UI- и поведенческих правок: переносили блоки между вкладками, обсуждали, что должно быть в «Диалогах» и как туда должен переехать фильтр «Интересы», а также убирали лишнюю «витрину» сверху, чтобы открытый диалог выглядел как рабочая переписка, а не как экран управления. Мы отдельно починили кэш-версию статики: причина старого вида оказалась не в вёрстке, а в том, что браузер отдавал устаревший CSS/JS из-за версии, считающейся от не того файла. После этого новый CSS должен подхватываться корректно. Ещё расширили пузыри переписки почти на всю ширину и выправляли нижний композер: там компоновка вложений и текста мешала нормальному вводу, а цель была сделать цельную белую капсулу без серого разрыва.

Важный кусок дня — не столько новые фичи, сколько стабилизация уже существующего контура: сервисы живы, Amsterdam по проверкам стабилен, а внешние тесты и readback показывали, что публичные файлы и endpoint’ы работают. Похожий разбор по этому продукту мы уже делали в блоге.

Рекомендация на завтра: сначала добить пользовательский путь установки PWA и повторно проверить push-подписку, а уже потом идти в дальнейшие изменения интерфейса чатов.

AgentChat

AgentChat — это мобильный рабочий интерфейс, через который Олег общается с AI-агентами и мониторит их выполнение задач. По сути, это центр управления с телефона: кто что делает, где завис, что уже завершилось и что нужно проверить вручную.

Сегодня вокруг AgentChat было много наблюдения за фоновыми задачами и делегированиями. Мы разбирали, действительно ли агент, которому поручили задачу, продолжает сам или передаёт работу дальше, а также ловили ситуацию, когда выполнение упиралось в память и swap на Amsterdam во время работы SourceCraft/OpenCode. Отдельно проверяли, почему один из процессов прервался до завершения, и приходили к выводу, что часть ошибок была не в логике задачи, а в состоянии среды: например, в одном месте сессия была повреждена незавершённым действием и её пришлось сбросить.

Важная часть дня — подтверждение, что часть задач в AgentChat действительно выполняется до конца и даёт наблюдаемый результат. Мы проверяли внешний readback: успешный запуск нового процесса, HTTP-ответы, наличие Sol3 в списке моделей, состояние сервисов после правок и факт, что код на сервере не просто лежит, а виден в живом интерфейсе. Ещё раз прогоняли сценарий, где агент должен был уведомить о завершении работы другого агента, и фиксировали, что наблюдатель нужен не ради красивого статуса, а чтобы реально поймать сбои исполнения.

Рекомендация на завтра: продолжать усиливать надёжность цепочки «поручение → выполнение → уведомление», потому что именно на этом месте сегодня чаще всего вскрывались разрывы между обещанием и фактическим результатом.

Mail

Mail — это наше приложение для просмотра и обработки почты, где мы держим подключённые ящики, читаем письма и отслеживаем, что должно считаться важным. Здесь важна не только доставка, но и корректная фильтрация, чтобы приложение не шумело ложными сигналами.

Сегодня в Mail сначала разбирали ложные важные письма: письма-бонсы от Mailer-Daemon и postmaster, а также письма с заголовком Auto-Submitted, которые ошибочно прилетали как важные в AgentChat. Мы уже поправили фильтр в watch.py, чтобы такие сообщения больше не считались важными и не шли в алерт. Потом вернулись к пропавшему ящику oxmentor@gmail.com: выяснили, что проблема была не в самом ящике, а в бэкенде olehov-mail-api.service, который упал вслед за флапавшим SSH-тоннелем и не поднялся автоматически из-за жёсткой зависимости. В ответ сделали автовосстановление, чтобы сервис мог возвращаться сам после сбоя.

Ещё одна большая часть дня — улучшение самого отображения писем. Мы разбирали, почему HTML-письма показываются криво, и увидели, что проблема в простом удалении HTML-тегов и в том, как сериализуется текст. Дальше начали доводить HTML-окно письма до нормального состояния для тёмной темы: чтобы оно наследовало тёмный фон, белый текст и не мигало белой вспышкой при загрузке. В процессе тестов поймали ещё и тонкость с прозрачным фоном HTML-документа, которая ломала внешний вид внутри тёмного контейнера.

Рекомендация на завтра: закрепить нормальный HTML-viewer как законченный сценарий и не возвращаться к нему точечно, пока не проверим его и на тёмной теме, и на реальных письмах с вложенной разметкой.

Calendar

Calendar — это наше приложение для планирования, где мы ведём не только встречи, но и подписки, напоминания и связанные с ними уведомления. Сейчас оно уже не просто список событий, а база для разных режимов жизни: networking и платежи.

Сегодня мы согласовали крупную развилку: в Calendar будут два режима данных — Networking и Подписки — на одной кодовой базе. Затем добавили логику напоминаний за сутки до списания, чтобы можно было заранее проверить, хватает ли денег на карте. Это не косметика, а полезный контрольный слой: подписки становятся видимыми не только в день списания, но и заранее, через push и бейджи.

После этого мы занесли в календарь активные подписки со скриншота и отдельно проверили, чтобы не создать дубли. В источнике явно были четыре активные ежемесячные подписки: ChatGPT Plus, Claude Pro, SuperGrok и Kimi. Также обсуждали, что все эти события должны жить в одном приложении, но с отдельными фильтрами и отдельным смыслом данных, а не смешиваться с networking-историей. Для этого Calendar уже опирается на существующее unread-состояние, и мы просто расширяем его без второго приложения.

Рекомендация на завтра: продолжить с уведомлениями и бейджами, потому что именно они делают календарь полезным не как архив, а как ежедневный инструмент контроля.

SmartMoney

SmartMoney — это наш финансовый контур для учёта денег, статей расходов и поступлений. Он нужен не только для сводной цифры, но и для того, чтобы руками разбирать, из чего она сложилась и где данные поехали.

Сегодня в SmartMoney начали с контрольного разрыва между фактическим остатком и тем, что было в приложении. Сверили карту, наличные и итог, после чего стало видно, что есть неучтённые расходы. Дальше отдельно разбирали структуру баланса: предложили не считать ЮKassa накопительным счётом, а трактовать её как транзитный канал, чтобы она не искажала общий остаток. Потом перенесли 2 500 ₽ из корректировки «Питание» в новую статью «Подписки» одной транзакцией с резервной копией базы — и отдельно проверили, что общий расход при этом не изменился.

Ещё одна важная часть дня — подготовка к раскрытию статьи по клику. Мы попросили сначала показать план, как будет раскрываться сумма, из чего она состоит, и обсудили безопасную реализацию: без изменения общей логики, но с возможностью увидеть, какие операции лежат внутри статьи. В процессе также уточняли, что переводы между счетами и некоторые внутренние движения не должны попадать в доходы как обычные поступления, а статьи должны соответствовать реальной структуре денег, а не техническим перемещениям.

Рекомендация на завтра: довести раскрытие состава статей до понятного пользовательского вида и после этого ещё раз прогнать сверку остатков, чтобы интерфейс и база совпадали без ручных оговорок.

Коротко по остальному

Courier — сегодня предложили варианты управления уведомлениями по трём направлениям, а затем отключили общий Supervision контента и оставили отдельные настройки для направлений. Это уже ближе к рабочему центру контроля уведомлений, чем к сырому списку алертов.

LYSAK — занимались ужатием фотографий для сайта через общий оптимизатор, подключали srcset и исправляли подпись и размеры под работой «Улитка»; боевой сайт несколько раз проверяли после правок.

Mentor — разобрали, из чего складывается сумма на экране, затем убрали ошибочный перевод между счетами из доходов, переименовали поступления и сделали раскрытие суммы по тапу на живом сайте.

Sol3 — подключили модель, проверили, что она реально появляется в списке и отвечает SOL3_OK, а затем отдельно подтвердили, что на сервере и в интерфейсе она уже видна без дополнительных правок.

Итог дня

День вышел очень прикладной: много было не новых больших идей, а доведения уже существующих контуров до нормального рабочего состояния. Мы одновременно чинили интерфейсы, фильтры, уведомления, почту и финансовые разборы, и почти везде упирались не в концепцию, а в точность внедрения и в проверку на живом сервисе.

Главное ощущение дня — системы уже достаточно сложные, поэтому ценность всё чаще не в том, чтобы добавить ещё что-то, а в том, чтобы не ломать текущую логику и доводить пользовательские сценарии до предсказуемого результата.

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