Рабочий день 18.10: HovAi, SEMVO и инфраструктура
День ушёл на правки HovAi, SEO-автоматизацию SEMVO, уведомления AgentChat, защиту Securiter и точечные продуктовые фиксы.
Фокус дня
Куда ушло внимание за день — по объёму переписки в AgentChat, 328 сообщений всего.
- HovAi — 30%
- SEMVO — 21%
- Instagram — 13%
- AgentChat — 11%
- Securiter — 9%
- SEO — 7%
- LYSAK — 5%
- Music — 2% · +1 рег.
- Aba — 1%
HovAi
HovAi — это наш рабочий интерфейс для общения с агентами, админки и внутренних операций, где мы постепенно доводим продукт до состояния, когда им можно пользоваться без ручных обходов. Сегодня по нему было больше всего движения: от аварийного восстановления и Ops до правок входа, админки и визуала.
Главный блок дня вокруг HovAi упёрся в безопасность и порядок доступа. Агент несколько раз остановился на классификаторе безопасности: он не стал обходить блокировки, не создавал ключи и не менял серверные файлы, а честно зафиксировал, что ни app/ops.py, ни authorized_keys, ни деплой не были затронуты. После этого мы разложили сценарий восстановления на понятный порядок: сначала Recovery, потом Ops в HovAi, а если не отвечает вообще ничего — уже панель Timeweb. Отдельно закрепили, что публичный /ops не должен светиться наружу: анонимный запрос даёт редирект на главную, а статусная ручка без админской сессии отвечает 401.
Параллельно в HovAi двигались более прикладные вещи. В приложении появился пункт «Ops: восстановление» в боковом меню и в профиле рядом с админкой, причём только для админа. В админке уведомлений стрелка назад теперь возвращает именно туда, откуда вошли, а не в случайное место, и это правило мы отдельно записали в память и в скилл, чтобы другие агенты не ломали навигацию по пути. Ещё один кусок работы — аудит экранов внутри HovAi: исправили несколько кривых возвратов, включая кошелёк, новости, карточки App Store и сценарии создания/просмотра, где «назад» раньше вёл не по origin. Отдельно проверяли экран «Уведомления»: логику истории, доступность журнала и поведение кнопок в тёмной теме.
Визуально тоже не стояли на месте. На профиле убрали ощущение «смешанных» настроек и действий, заменили отключённые списки языка, страны и валюты на текстовые строки, чтобы они не выглядели как кликабельные элементы, а в озвучке перенесли выбор моделей вниз. В диалоге и меню поправили аватар: вместо буквы на месте фото теперь снова показывается круглый аватар с изображением. Отдельной веткой довели карточки и иллюстрации в стиле стекла и серебра, а на мобильных размерах проверили, что интерфейс не расползается.
Рекомендация на завтра: продолжать добивать HovAi как цельный продукт: меньше разрозненных экранных исключений, больше сквозных правил навигации и восстановления, чтобы агентам не приходилось объяснять одно и то же по несколько раз.
SEMVO
SEMVO — это наше AI-приложение для быстрого знакомства, квалификации контактов и продолжения живого диалога. Сегодня по нему было много «внешней» работы: не столько новые фичи, сколько публичная упаковка, SEO-автоматика и доводка пользовательских сценариев внутри чата.
Самый заметный результат — SEO-блог уже живёт и работает как отдельный канал привлечения. Первая статья вышла и открывается по внешнему URL, а публикации дальше пойдут автоматически раз в сутки. Мы проверили, что semvo.ru/blog, sitemap.xml и robots.txt отдают 200, статья попадает в sitemap и видна на странице блога. Для домена также выровняли canonical и og:url, а на semvo.olehov.com публичные страницы вроде /blog, /ai-match, /delovye-znakomstva и /networking-onlayn перенаправляются туда, куда нужно. Отдельно проверяли подтверждение Яндекса и Google: для Яндекса заработали и метатег, и HTML-файл, для Google добавили TXT-запись в DNS, а потом дали инструкции по ручной проверке sitemap в Search Console.
Ещё одна важная часть дня — разбор меню по долгому нажатию на сообщение. Сначала сделали аудит, потом уточнили, что жест должен быть как в Telegram, с удержанием около 450–500 мс, а затем внесли изменения в сам интерфейс: теперь задержка настраивается через ?lp= или localStorage, добавлены правки под Safari, а системное выделение на пузырях отключено. Мы также доработали визуал меню: убрали жёсткий прямоугольник и серые пятна, улучшили скругления, тени и размытие, чтобы это выглядело аккуратно в светлой и тёмной теме. В отдельной ветке проверили анимацию нижнего меню — активная вкладка теперь плавно скользит между пунктами и выглядит живее.
Ещё SEMVO сегодня касался контента и поведения ассистента. Мы прогоняли план по взаимодействию AI-ассистентов у конкурентов и закрепили направление: не просто отвечать, а помогать клиенту доводить вопрос до результата. Для закреплённого чата убирали излишнюю «продажность» и делали его полезнее по существу вопроса, а не по механике оплаты. Параллельно в каталоге шаблонов исправляли фильтр, который путал рабочие копии SEMVO с новыми приложениями: временные каталоги с PWA-манифестами больше не должны лезть в очередь шаблонов.
Рекомендация на завтра: не распыляться на новые SEO-страницы, пока не станет понятна первая отдача от уже запущенного блога. Следующий логичный шаг — смотреть, какие запросы и страницы действительно приводят людей, и от этого строить очередь тем.
AgentChat
AgentChat — это наш мобильный рабочий интерфейс, через который мы с телефона общаемся с агентами, запускаем задачи и следим за статусами. Сегодня здесь было много инфраструктурной работы вокруг уведомлений, очереди и восстановления сессий.
Важная часть дня — перезапуск и проверка уведомительной системы. Мы поднимали общий компонент уведомлений, проверяли, что журнал истории работает, что удаление записей отвечает корректно, и что каталог тумблеров отдается целиком. Сквозная проверка тоже прошла: переключатель Snipe Daily выключили через API, убедились, что это дошло в базу, а потом включили обратно тем же способом. Отдельно починили проблемный origin-check для /api/notification-history/read: раньше с чужого домена шёл 403, теперь запрос с https://agentchat.semvo.ru проходит, а значит «Прочитать все» и «Удалить все» будут работать с нашего домена нормально.
Ещё одна полезная вещь — восстановление сессий после обрыва. Мы прогоняли запуск задач, которые падали на лимите тяжёлых мест, и AgentChat сам показывал статус очереди без лишнего шума. Когда Codex прерывался, сессия «Semvo ии ассистент закрепить» была возобновлена по журналу, а не потеряна. Это не выглядит как большая внешняя фича, но на практике именно так и держится рабочий ритм: не терять контекст, если агент или сессия временно упали.
В связке с этим мы продолжили аккуратно строить уведомления как часть продукта, а не как набор случайных плашек. С одной стороны, есть журнал, каталог и управляемые каналы; с другой — сама логика в интерфейсе уже учитывает, что пользователь должен быстро найти, что произошло, и при желании сразу добраться до нужной записи.
Рекомендация на завтра: продолжать докручивать именно сквозной сценарий: уведомление → история → переход к объекту → действие. Если цепочка закончится без тупиков, AgentChat станет заметно полезнее и для нас, и как шаблон для других продуктов.
Securiter
Securiter у нас отвечает за защиту, лимиты и безопасный доступ к серверной части. Сегодня это был день про жёсткие ограничения, но без попытки их обходить — и это важно само по себе.
На Amsterdam поставили и проверили fail2ban. Конфиг вынесли в отдельный файл, не трогая стандартные настройки, и задали понятные правила: после 5 неудачных попыток за 10 минут бан на час, а при повторных нарушениях срок растёт до недели. При этом сам Amsterdam, Moscow и три наших адреса из белого списка не банятся. За первые минуты логика уже сработала на реальном мусоре, то есть защита не просто «включена», а реально живёт.
Отдельной веткой шла история с SSH и откатом. Попытка отключить вход по паролю в SSH не прошла: классификатор безопасности заблокировал весь скрипт, включая резервную копию, временный конфиг, таймер отката и перезагрузку ssh. После этого мы не стали давить дальше и не утверждали то, чего не произошло. Позже из этого же направления родился понятный режим: если нужно что-то менять раньше, сначала говорим «разреши», потом выполняем с откатом и только после этого проверяем.
Параллельно в Recovery мы выстроили полезную механику для лимитов Sonnet: поскольку Claude показывает остаток только внутри живого ответа, остаток нужно снимать по rate_limit_event и показывать как последнее известное значение. Для этого добавили таймер замера лимита, чтобы состояние не было «в голове у агента», а фиксировалось как наблюдаемый факт.
Рекомендация на завтра: держать фокус на наблюдаемой безопасности, а не на абстрактных ограничениях. То, что можно проверить по событию, журналу и readback, приносит больше пользы, чем попытка угадать лимит или состояние заранее.
SEO
SEO сегодня — это не отдельный эксперимент, а прикладной слой к продуктам, особенно к SEMVO. Мы смотрели, как наращивать органику без ручной рутины, и сразу проверяли, чтобы публикации действительно доходили до sitemap, canonical и поисковиков.
Самая конкретная вещь — поставили напоминание на проверку новых статей PULSE и индексации, а по SEMVO закрепили механику автоматического блога. Мы уже видим, что блоговая часть может работать как постоянный поток: статья опубликована, страницы видны, sitemap обновлён, robots открыт, canonical в порядке. Это важнее любой разовой «SEO-идеи», потому что дальше остаётся только поддерживать очередь тем и следить, чтобы пустой каталог не выглядел как нормальное состояние.
Ещё в SEO-дне был практический аудит каталога продуктов и связанных с ними блогов: сверяли, у кого уже есть автоматические статьи, а у кого нет. Отсюда и родился вывод, что для ряда продуктов надо строить не «разовые посты», а механику постоянной публикации с контролем последней статьи, запаса тем и причины остановки выпуска.
Рекомендация на завтра: не плодить новые направления, а довести уже запущенную SEO-механику до состояния, где она сама показывает, когда поток статей остановился, и почему.
LYSAK
LYSAK — это отдельная витрина для художественных работ с QR-кодами и страницами картин. Здесь день был спокойный, но очень конкретный: работали не над идеей, а над готовыми страницами и доставкой результата адресату.
Мы сделали и отправили художнику письмо с QR-кодом в PNG и SVG, плюс ссылку на страницу картины. Потом добавили изображение «Большой панды» на готовую страницу, убрали чёрные поля и сохранили авторскую надпись. Загрузка проверена и на мобильной, и на десктопной ширине, то есть страница уже не просто существует, а нормально выглядит в основных сценариях.
Параллельно готовили задел под следующие работы: отдельные страницы и QR-коды для новых картин, с сопоставлением фотографий и описаний. По одной из работ уже было понятно, что изображение соответствует «Граням познания», а для «Большой панды» страница осталась на том же адресе и с тем же QR.
Рекомендация на завтра: продолжать собирать галерею как системный продукт, а не как разовые отправки файлов. Тогда каждая новая работа будет добавляться почти без ручного трения.
Music
Music — это наш продукт с релизами, обложками, треками и проверкой входящих материалов. Сегодня по нему было немного сообщений, но они были по делу.
Сначала поставили напоминания на будни для проверки договора и почты, потому что в выходные это всё равно не проверяется. Затем по новому треку «Мир — зеркало» разобрали план и довели его до действия: трек добавили в альбом «Поток», сделали избранным, подтянули присланную обложку и сохранили текст песни из метаданных. Входящие после этого очистили, а существующую версию ремастера не трогали.
Это не был большой день для Music, но по факту здесь был сделан ровно тот минимум, который нужен продукту: не просто держать файл в переписке, а превратить его в нормальную сущность внутри каталога и не потерять исходный материал.
Рекомендация на завтра: если появятся новые треки, сразу держать в голове связку «файл → альбом → обложка → избранное», чтобы не копить серые ожидания во входящих.
Instagram в этот день использовался как канал для контента про HovAi, а не как отдельная экспериментальная площадка. Мы не просто «делали ролик», а собирали воронку вокруг продукта и проверяли, что публикации можно ставить на ритм.
Сначала собрали ролик 1 с корректной длительностью, аудио и субтитрами, затем подготовили ролик 2 и поставили его на отложенную публикацию. По рилу 2 отдельно отметили качество озвучки и формат — 1080x1920, субтитры, музыка и нормальная громкость. После этого пришли к логичному выводу: если два ролика прошли успешно, можно включать автомат публикации каждые 12 часов, в 09:00 и 21:00 МСК.
Параллельно мы договорились о следующем шаге по контентной машине: собрать банк тем на неделю и дальше чередовать подходы, не останавливаясь на одном удачном варианте. Это уже не разовая публикация, а рабочая схема, в которой продукт и контент двигаются вместе.
Рекомендация на завтра: продолжить строить не отдельные рилы, а повторяемую контентную воронку с чётким ритмом и заранее подготовленным банком тем.
Итог дня
День вышел очень инфраструктурным и при этом прикладным: мы одновременно чинили HovAi, укрепляли безопасность, поднимали уведомления в AgentChat и раскатывали SEO-механику для SEMVO. По ощущениям это был день не про одну большую фичу, а про то, чтобы у нескольких продуктов перестали ломаться базовые рабочие сценарии.
Самый сильный итог — у нас стало больше системности: «назад» возвращает туда, откуда вошли, уведомления живут в истории, блог SEMVO публикуется автоматически, а аварийный путь для восстановления AgentChat и HovAi теперь можно пройти без угадываний. Это хороший день для соло-основателя: много разных продуктов, но каждый получил что-то, что делает его чуть ближе к живому использованию, а не только к разработке.
SEMVO — это страница, где мы развиваем SEO-слой и автоматическую публикацию контента для продуктов.
Рассылка новых статей
Новые статьи — на email. Push приходит в приложение Blog. Telegram-рассылка отключена.
Чтобы получать статьи на email, сначала привяжите email в личном кабинете.
Уведомления в приложении: blog.olehov.com → колокольчик.
Получайте новые статьи и разборы
Подпишитесь через email — без спама, только новые материалы.