Лог работы

На этой странице я положил все посты из моего ТГ-канала про этот проект и рандомные заметки по ходу работы.

Первая попытка

Первая попытка работы над ботом была в ноябре 2024 года.

Мне не нравилось то, как я работаю с базой клиентов.

База клиентов и лидов — это это люди, которые уже выбрали вас однажды. Одни решили написать вам, другие заплатили деньги. База клиентов и лидов — это деньги.

Особой мотивации добавила одна ситуация.

Я созваниваюсь по заявке на оформление Геткурс. Там девушка, мы с ней болтаем и ждем основателя школы. Он подключается и происходит такой диалог:

— О, Даня, ты что-ли?
— Миша, привет! Как дела, вы решили ещё одну школу оформить?
— Ага, слушай, мы тебе проект передаем тогда, создавай чат и документы, все оплатим.
— Договор.

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

И так может быть с любым клиентом или лидом из вашей базы. У меня их 900 человек. Я возможно потерял много денег из-за того, что просто не напоминаю о себе.

Ниже я приведу свои сообщения из телеграма, где я делился работой над этим ботом.

Рассказ из телеграма

Сегодня поднялся на одну ступеньку выше в изучении ИИ.

На скриншоте показал, как ИИ автоматически заполнил карточки лидов в Notion.

Максимум что я делал — кодил там и для чего-то личного использовал gpt и claude. Получалось тоже неплохо, но хотелось чего-то большего.

Сегодня сделал связку Telegram + Notion + Claude.

Искусственный интелект:

1. Берет телеграм-ник из Notion

2. Идет в диалог в телеграме, проводит анализ,

3. Возвращается в Notion: проставляет теги и пишет краткое содержание диалога, ставит дату первого и последнего контакта

Это было ощущение волшебства)

Я когда увидел, что он про цену написал, выставил правильный статус и причину отказа — охренел)

Всю неделю кручу-верчу связку Notion + Telegram + ИИ. Нащупываю инструмент, который поможет автоматизировать работу с базой лидов/клиентов.

Всё это добро написано на языке Python, кстати. Знаю ли я Python? Nope.

Играюсь с нейронками, пропал там и не могу ничего с собой поделать 😂

На телеграме лимиты, но у меня чешутся руки поделать что-нибудь.

Значится так, надо обрабатывать базу в Notion.

Я хотел в будущем делать рассылку, а в базе у меня есть английские имена.

Будет выглядеть странно, если я буду их использовать.

Так как в базе 950 человек, делать руками мне это не хочется.

Попросил написать Claude на python скрипт, который анализирует все контакты и проставляет тег у тех, у кого имя латиницей.

На скрине то, как он отчитывается и как это выглядит в Notion.

Следующий шаг — перевод и установка нового имени с помощью GPT.

Я остановился на том, что проставлял метки для имен, которые написаны латиницей, чтобы их перевести.

Код обработал 861 запись и проставил 135 записям метку name-fix.

Это тестовая метка, которую я использую, чтобы потом по ним работать, а не п овсем контактам.

Дальше надо будет использовать GPT, чтобы он перевел имена на русский язык.

Теперь надо переводить

Работает не идеально, но в 95% случев делает то, что я ожидаю.

Теги или ники — не переводит. По именам пишет обоснование.

Я использовал для этого GPT-ассистента.

Туда можно проставить инструкции (промпт) по обработке данных, не передавая их в коде каждый раз.

Это экономит деньги при оплате «услуг» GPT.

GPT для работы использует токены.

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

Если нифига не поняли — это нормально. Я сам пока не понимаю, что тут происходит 😁

Поняв, что он нормально переводит имена, выключаю обоснование и запускаю перевод для ~140 имен.

Статистика

🕑 5 минут

🤑 Денег на GPT: 12₽

🍑 Деревянная задница: в подарок

Результат — охренеть 🤯

Я бы задолбался сидеть вручную переписывать. Тут ещё 140 имен. Если переводить 2000 имен — потратишь всего 180₽.

Использовал для этого самую дешевую модель 3.5-turbo. Перевести имя много ума не надо.

Идем дальше.

Для рассылки мне нужно имя. А у некоторых контактов есть имя и фамилия.

Было бы странно в рассылке использовать обращение: «Марина Федорова, добрый день!»

Попросил написать код, который без GPT это делает.

Запустил в режиме тестирования. Если 2 слова в имени, берет только первое имя, а вторую часть удаляет.

Но срабатывает так себе. Потому что где-то имя клиента написано как: «Фамилия Имя».

На скрине из «Довгуша Александра» он взял только «Довгуша».

А имя всё-таки Александра.

Тут спортный момент. 90% скорее всего нормальные.

Но все же хочется потестить GPT и посмотреть, как хорошо он это сделает и сколько на это уйдет средств.

Запустил, отделяет нормально.

Обработка 28 человек обошлась мне в 0.67₽. Меньше рубля.

Экстраполируем на 500 человек → 75₽

Сделал херню

Начала переписывать Name и удалять фамилии.

Если я буду в Notion создавать проект. Там надо выбирать клиента. И я обычно запоминаю клиентов по фамилии.

Например: «Петр Петипак».

Я его помню не как «Петра», а как «Петипака».

И так как скрипт все переписал, по «Петипак» он ничего не найдет.

Введу «Петр» и охренею от того, сколько Петров у меня. Поди найди нужного.

Придется искать по нику телеграма, а это мутная схема.

Создал отдельное поле «Имя». Чтобы он туда проставлял и не трогал старые имена.

Если имя уже стоит, без фамилии — его переносим в поле Имя без использования GPT, чтобы деньги не тратить.

Итоговый результат

✅ Сохраняет изначальное имя

✅ Для тех, где уже имя, просто переносит

✅ GPT использует там, где есть имя и фамилия

Стату по переносам нормально пишет. Но GPT-анализов почему-то пишет с минусом.

На обработку всей базы из 910 человек потратил может быть рублей 200₽.

И 3−4 часа работы. Но это время был занят отладкой кода.

Саму работу скрипт делает быстро.

Как нейронка помогает мне формировать персонализированную рассылку.

Последнюю неделю, в свободное от рабочих проектов время я ковырял связку notion + telegram + gpt.

Результат на видео.

🔥 Автоматический менеджер работы с базой

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

Когда у меня нет заказов, я бегу искать новых клиентов. В это время база клиентов из-за угла такая: «Псс, парень, я вообще-то тут!»

Допродать клиенту всегда проще, чем продать новому. Лиды или клиенты вам уже доверяют.

Я решил исправить это. Сейчас я начал работать над кодом, который управляет моим рабочим телеграм-аккаунтом, работает с базой и пишет сообщения с помощью нейронки.

Что он будет делать

1. Из конкретных папок в телеграме добавляет всех клиентов в Notion

2. Анализирует диалоги с ними.

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

4. Устанавливает рабочие теги: «design, code, getcourse»

5. Устанавливает тег игнора, если ваш лид или клиент уже долго вам не отвечает. Таким он не будет больше писапть

6. Устанавливает резюме диалога: о чем общались, к чему пришли

7. Устанавливает статус отказа, если лид вам отказал: нашел другого спеца, по цене.

8. Устанавливает дату последнего общения

9. Ставит формат обращения: ты/вы.

10. На основании всей информации пишет сообщение-напоминание клиенту о себе.

11. Ставит новую дату последнего обращения и запускает повторную проверку через 3 месяца.

На выходе мы получаем автоматизированную систему, которая работает с вашей базой клиентов.

Вам нужно только раскидывать лидов и клиентов по папкам. Ну и пополнять баланс GhatGPT.

Я уже проделал это со своей базой. Я потратил примерно 500₽ на то, чтобы обработать всю свою базу. Это с тестами, после калибровки все будет стоить меньше.

Пока у меня отдельно лежат все функции. Да, это пока не полный код, но они отдельно работают. Осталось собрать их вместе, закинуть на сервер и запускать раз в неделю например.

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


Менеджер клиентов в Telegram 💬

Сегодня я продолжил работу над системой, которая позволяет автоматизировать взаимодействие с клиентами.

Я решаю проблему, когда у меня много лидов и клиентов, а они просто лежат мёртвым грузом в Telegram или в базе данных. А ведь это — потенциальные заказы. Многие клиенты и лиды забывают об исполнителях уже на следующий день.

Я решил запустить эту систему после случая, когда ко мне пришёл менеджер за оформлением школы на Геткурс. Мы созвонились, и на звонке оказался основатель школы, с которым мы уже оформили одну из его школ. Он просто обо мне забыл. Нужно сделать так, чтобы не забывали.

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

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

Ниже опишу, как система работает по частям. Некоторые имена и процессы буду упрощать. Детали — в отдельных постах.

Из чего состоит система

0. Я вручную сортирую людей в Telegram по папкам: «Лиды», «Клиенты».

1. Добавляю людей из этих папок в базу Notion.

2. Беру форму обращения из диалога, добавляю в Notion.

3. Получаю дату первого и последнего сообщения — тоже добавляется в базу.

4. Получаю рабочий тег — по какой теме мы работали. Анализ делает нейросеть и проставляет отметку.

5. Проставляю статус — как прошла работа. Анализирует нейросеть.

6. Резюме диалога — нейросеть делает краткое описание общения в 3−4 предложения.

7. Исправление имён — Vyacheclav → Вячеслав. Чтобы сообщения выглядели правдоподобно.

8. Генерация сообщения: на основе всей информации создаётся текст. Там имя, месяц работы, тема и предложение, сформированное под клиента. Я выделил ~5 ниш: Tilda, GetCourse, дизайн и т. д.

9. Отправка сообщений — отдельный скрипт шлёт их в Telegram.

Следующим постом расскажу, как улучшил 1 и 2 функции.

Перемещение людей из папок в Notion 💬→📝

Как это работает?

Я указываю скрипту папки, из которых нужно взять контакты. Это папки с клиентами и лидами.

Скрипт проходит по каждой папке, берет каждый контакт и проверяет, есть ли он уже в Notion.

Если контакта в базе нет, скрипт добавляет его с такими данными:

— ник;

— имя;

— дата первого сообщения;

— дата последнего сообщения;

—с какого аккаунта найден.

Что значит «с какого аккаунта найден»?

У меня два Telegram-аккаунта: личный и рабочий.

Допустим, вы хотите проанализировать 400 диалогов. Если не знаете, через какой аккаунт шло общение, вы подключитесь сначала к личному и сделаете 400 запросов. Потом — к рабочему и снова 400 запросов. Это неэффективно.

Гораздо проще, когда сразу известно, с какого аккаунта был контакт. Тогда скрипт проверяет только там, где человек точно есть.

Например:

— 80 клиентов в личном аккаунте;

— 320 в рабочем.

Такой подход экономит время и снижает риск попасть в бан.

Ограничения Telegram

Главная сложность — лимиты Telegram. Нельзя обработать тысячу контактов за секунду. Если Telegram заметит аномальную активность, он отправит вас в бан. Тогда в течение суток ничего сделать не получится.

Чтобы этого не произошло, скрипт делает рандомные паузы между запросами. Это снижает риск блокировки.

Как я ускорил скрипт

Первая версия работала медленно. Она проверяла каждый контакт в папке.

Представьте: в папке 400 человек, но за последний месяц вы добавили только 10 контактов. Скрипт всё равно идет по всем 400. Это долго и бесполезно.

Нейросеть сначала утверждала, что проверять пачками нельзя — только по одному. Но сегодня мне удалось решить эту проблему —теперь скрипт проверяет пачками по 30 человек. Это сильно ускоряет работу.

Еще одно улучшение: я добавил выгрузку базы Notion для предватительной проверки. Теперь при запуске скрипт сначала получает всю базу Notion и сохраняет её в файл.

Потом при обработке новых контактов сверяет их с этим файлом. Это сокращает количество запросов.

👨‍🎨 Результат

Функция работает как задумано: добавляет контакты из папок в Notion, работает быстро и не попадает в бан. К ней я буду подцеплять остальные функции. Фундамент заложен.

Видео на 3 часа

Для своего клуба я записал видео на 3 часа, неотмонтированное от слова совсем.

Вторая попытка

Я вернулся к проекту спустя несколько месяцев. Я хочу его закончить, но мне сложно это дается. Это происходит, потому что в проекте много функционала, это в целом сложная задача, где много нюансов и деталей.

Цель проекта — автоматизировать общение с базой лидов и клиентов.

Лидам и клиентам нужно напоминать о себе. Лиды забывают ответить, клиенты забывают о тебе на следующий день.

Напоминать нужно не шаблонно, а с личным подходом, обращаться по имени, напоминать контекст общения.

Кроме этого нужно саму базу пополнять. Для этого из телеграма нужно выгружать все в Notion. Это рутинная работа, которую хочется передать другому.

Напоминаем себе о функциях

До этого я работал с Cursor. В этот раз я решил взять подписку за Claude Code за $ 100, чтобы наконец закончить эту задачу и отбить с новых заказов эту подписку.

В Claude Code реализована интересная функция — Claude.md. Это файл, где лежат инструкции для нейронки, правила и описание проекта.

Я попросил сделать этот файл и описать все то, что лежит внутри проекта. Потому что я уже не помню.

Он создал папку docs и внутри 3 файла. Один про архитектуру и файлы, другой про изменения, третий про статус проекта.

  • architecture — тут лежит описание всех технологий и описание работы файлов. Я хоть могу понять и вспомнить, что я там натворил с Cursor.
  • changelog — здесь последние изменения в проекте, что и какого числа было изменено.
  • project_status — здесь план по проекту и отметки чебоксами, что выполнено, что осталось

План по работе

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

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

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

Описание функционала

С нейронками написание кода уходит на второй план. В большей части ботов я не знаю, что в коде. Это наводит нас на важную работу — принятие решений.

Нужно решить, что, как должно работать. Определить важный и неважный функционал.

Этим и займемся.

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

После этого надо было собрать в кучу промты ассистентов из openai. Чтобы claude code видел все, что я сделал по проекту.

Я создал отдельный файл и указал там все промпты ассистентов.

Определение первой функции

Надо определиться, какая функция должна быть первой.

Самая важная функция — функция напоминания. Именно там лежат деньги: клиент вспомнил обо мне → понял, что хотел мне передать работу → заказ → деньги.

Но это конечная цель ИИ-менеджера, конечный результат.

Глобально я разделил бы работу нашего менеджера на 3 части:

  1. Добавление в базу с анализом
  2. Проверка, кому надо написать
  3. Формирование и отправка сообщения
  4. Фоновый анализ диалогов, которые обновились

Первый шаг: добавление контактов из телеграма в ноушн.

У меня сейчас много функций анализа диалога лежат отдельно.

Хотя их можно объединить изучение диалога:

  1. Берем Username
  2. Берем имя аккаунта
  3. Берем дату последнего сообщения
  4. Определяем форма обращения
  5. Проверяем на игнор
  6. Анализируем первые и последние 20 сообщений
  7. Понимаем work tag, по какой теме работали
  8. Смотрим результат работы, как поработали
  9. Определяем статус работы
  10. Составляем короткий саммари диалога для поля «доп.инфа»
  11. Фиксим и упрощаем имя

Это большой список, но лучше четко определить спектр работ на первый этап, оттестировать все функции и собрать их. А не дробить весь проект на кучу функций и ломать голову, как их потом соединять.

Разработка анализа диалогов

Описываю всю ситуацию claude code в режиме планирования, прикладывая ссылку на этот же кейс.

Он все проанализировал и предложил план

Я прочитал план, он все правильно понял и что важно, действительно прочитал кейс. Это можно понять по определению общих задач бота.

В терминале он предложил ответить на пару вопросов, как будем двигаться. Как по мне, здесь он промахнулся, потому что я описал, что я хочу: начать постепенно делать его и первая задача — анализ. А он в первом же вопросе про приоритет делает несколько вариантов, в котором есть единый пайплайн.

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

Продолжение следует. Я продложаю работать над проектом. Кейс заполняется по ходу работы

Он расписал план и пошел претворять его в жизнь

Составил список todo и идет работать по нему

Он работал безостановочно 14 минут и интегрировал все недостающие модули

Первый запуск с плохим результатом.

============================================================
2026-01-10 12:12:32 - INFO - РЕЗУЛЬТАТЫ ТЕСТА:
2026-01-10 12:12:32 - INFO - ============================================================
2026-01-10 12:12:32 - INFO - Контакт: @nickname
2026-01-10 12:12:32 - INFO - Аккаунт: Рабочий
2026-01-10 12:12:32 - INFO - Имя: Светлана Атех -> Светлана Атех
2026-01-10 12:12:32 - INFO - Сообщений: 68
2026-01-10 12:12:32 - INFO - Первый контакт: 2025-12-28 11:55:44+00:00
2026-01-10 12:12:32 - INFO - Последний контакт: 2026-01-06 14:10:34+00:00
2026-01-10 12:12:32 - INFO - Форма обращения: Вы
2026-01-10 12:12:32 - INFO - Рабочий тег: ???
2026-01-10 12:12:32 - INFO - Игнор: Нет
2026-01-10 12:12:32 - INFO - Статус: Напомнить о себе
2026-01-10 12:12:32 - INFO - Summary: N/A...
2026-01-10 12:12:32 - INFO - Notion page: 2e4af360...

Тег не определен, хотя в переписке мы обсуждали оформление. Статус «Напомнить о себе», хотя по переписке можно понять, что мы ещё работаем.

Была ошибка с айдишниками ассистентов, все проверил, настроил полное логирование.

2026-01-10 12:29:12,431 - DEBUG - ================================================================================
2026-01-10 12:29:12,431 - DEBUG - НАЧАЛО ТЕСТА: @nickname
2026-01-10 12:29:12,431 - DEBUG - Время: 2026-01-10 12:29:12
2026-01-10 12:29:12,431 - DEBUG - ================================================================================
2026-01-10 12:29:14,364 - DEBUG - ============================================================
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: АНАЛИЗ РАБОЧЕГО ТЕГА
2026-01-10 12:29:14,365 - DEBUG - ============================================================
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Входящих сообщений для анализа: 3
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Исходящих сообщений для анализа: 1
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Сообщение 1: Добрый день! Я хочу увидеть шаблоны. Как они выглядят на моб версии....
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Сообщение 2: Добрый день! К сожалению, так и не нашла((...
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Сообщение 3: Даниил, подскажите, пожалуйста, мы сможем применить в оформлении наш фирменный стиль (цвета, шрифты)...
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Сообщение 4: Светлана, добрый день! 

Получил вашу заявку на оформление GetCourse на сайте Remake.space.

Скажите...
2026-01-10 12:29:14,365 - DEBUG - WORK_TAG: Используем ассистента: asst_Al52EeCQUhIYbOEM39OALs1Z
2026-01-10 12:29:15,162 - DEBUG - WORK_TAG: Создан thread: thread_hZaHRxrDD71vhd7wqlCLCspF
2026-01-10 12:29:16,661 - DEBUG - WORK_TAG: Запущен run: run_TQPJG8Esz2GTkzXwmwTkyfPx
2026-01-10 12:29:17,044 - DEBUG - WORK_TAG: Статус run: queued
2026-01-10 12:29:18,430 - DEBUG - WORK_TAG: Статус run: in_progress
2026-01-10 12:29:19,790 - DEBUG - WORK_TAG: Статус run: completed
2026-01-10 12:29:20,071 - DEBUG - WORK_TAG: Ответ ассистента: TAG: getcourse
REASONING: В исходящем сообщении упоминается оформление платформы GetCourse.
2026-01-10 12:29:20,071 - DEBUG - WORK_TAG: Извлечённый тег: getcourse
2026-01-10 12:29:20,071 - INFO - WORK_TAG: Финальный тег: getcourse
2026-01-10 12:29:20,071 - DEBUG - ============================================================
2026-01-10 12:29:20,071 - DEBUG - IGNORE: ПРОВЕРКА НА ИГНОРИРОВАНИЕ
2026-01-10 12:29:20,071 - DEBUG - ============================================================
2026-01-10 12:29:20,071 - DEBUG - IGNORE: Всего сообщений: 68
2026-01-10 12:29:20,071 - DEBUG - IGNORE: Последнее сообщение от: меня
2026-01-10 12:29:20,071 - DEBUG - IGNORE: Текст: Хорошо...
2026-01-10 12:29:20,071 - DEBUG - IGNORE: Последовательных сообщений от меня: 1
2026-01-10 12:29:20,072 - DEBUG - IGNORE:   1. [2026-01-06] Хорошо...
2026-01-10 12:29:20,072 - DEBUG - IGNORE: Только 1 сообщений подряд (нужно 3+) - не игнор
2026-01-10 12:29:20,072 - DEBUG - ============================================================
2026-01-10 12:29:20,072 - DEBUG - STATUS: ОПРЕДЕЛЕНИЕ СТАТУСА ДИАЛОГА
2026-01-10 12:29:20,072 - DEBUG - ============================================================
2026-01-10 12:29:20,072 - DEBUG - STATUS: Взяли первые 15 + последние 15 (всего 68)
2026-01-10 12:29:20,072 - DEBUG - STATUS: Последнее сообщение от: Я
2026-01-10 12:29:20,072 - DEBUG - STATUS: Диалог для анализа:
2026-01-10 12:29:20,072 - DEBUG - ----------------------------------------
2026-01-10 12:29:20,072 - DEBUG -   [Я]: Светлана, добрый день! 
2026-01-10 12:29:20,072 - DEBUG -   
2026-01-10 12:29:20,072 - DEBUG -   Получил вашу заявку на оформление GetCourse на сайте Remake.space.
2026-01-10 12:29:20,072 - DEBUG -   
2026-01-10 12:29:20,072 - DEBUG -   Скажите пожалуйста, вам удобно было бы созвониться в понедельник и обсудить оформление? 
2026-01-10 12:29:20,072 - DEBUG -   
2026-01-10 12:29:20,072 - DEBUG -   Если да, в какое время?
2026-01-10 12:29:20,072 - DEBUG -   [Клиент]: Добрый день! Я хочу увидеть шаблоны. Как они выглядят на моб версии.
2026-01-10 12:29:20,072 - DEBUG -   [Я]: Хорошо, я чуть позже отправлю вам ссылку на мобильную версию.
2026-01-10 12:29:20,072 - DEBUG -   [Я]: На главной странице есть блок «Как выглядят страницы готового оформления»
2026-01-10 12:29:20,072 - DEBUG -   
2026-01-10 12:29:20,072 - DEBUG -   Ссылка для перехода к этому блоку
2026-01-10 12:29:20,072 - DEBUG -   https://remake.space/#remake-screenshots
2026-01-10 12:29:20,072 - DEBUG -   
2026-01-10 12:29:20,072 - DEBUG -   Там можете посмотреть как выглядит на компьютере, мобильном и в приложении Геткурса.
2026-01-10 12:29:20,072 - DEBUG -   ... и ещё 30 строк
2026-01-10 12:29:20,072 - DEBUG - ----------------------------------------
2026-01-10 12:29:20,072 - DEBUG - STATUS: Отправляем запрос в GPT-4...
2026-01-10 12:29:22,055 - DEBUG - STATUS: Ответ GPT: '🔄 In progress (в работе): "Работаем"'
2026-01-10 12:29:22,055 - DEBUG - STATUS: Поиск точного совпадения для '🔄 in progress (в работе): "работаем': None
2026-01-10 12:29:22,055 - DEBUG - STATUS: Найдено частичное совпадение: 'работаем' -> 'Работаем'
2026-01-10 12:29:22,055 - INFO - STATUS: Финальный статус: Работаем
2026-01-10 12:29:22,055 - DEBUG - SUMMARY: Взяли первые 15 + последние 15 сообщений (всего 68)
2026-01-10 12:29:22,055 - DEBUG - ============================================================
2026-01-10 12:29:22,055 - DEBUG - SUMMARY: ГЕНЕРАЦИЯ SUMMARY ДИАЛОГА
2026-01-10 12:29:22,055 - DEBUG - ============================================================
2026-01-10 12:29:22,055 - DEBUG - SUMMARY: Текст диалога для анализа:
2026-01-10 12:29:22,055 - DEBUG - ----------------------------------------
2026-01-10 12:29:22,055 - DEBUG -   [Я]: Светлана, добрый день! 
2026-01-10 12:29:22,055 - DEBUG -   
2026-01-10 12:29:22,055 - DEBUG -   Получил вашу заявку на оформление GetCourse на сайте Remake.space.
2026-01-10 12:29:22,055 - DEBUG -   
2026-01-10 12:29:22,055 - DEBUG -   Скажите пожалуйста, вам удобно было бы созвониться в понедельник и обсудить оформление? 
2026-01-10 12:29:22,055 - DEBUG -   
2026-01-10 12:29:22,055 - DEBUG -   Если да, в какое время?
2026-01-10 12:29:22,055 - DEBUG -   [Клиент]: Добрый день! Я хочу увидеть шаблоны. Как они выглядят на моб версии.
2026-01-10 12:29:22,055 - DEBUG -   [Я]: Хорошо, я чуть позже отправлю вам ссылку на мобильную версию.
2026-01-10 12:29:22,055 - DEBUG -   [Я]: На главной странице есть блок «Как выглядят страницы готового оформления»
2026-01-10 12:29:22,055 - DEBUG -   
2026-01-10 12:29:22,055 - DEBUG -   Ссылка для перехода к этому блоку
2026-01-10 12:29:22,055 - DEBUG -   https://remake.space/#remake-screenshots
2026-01-10 12:29:22,055 - DEBUG -   
2026-01-10 12:29:22,056 - DEBUG -   Там можете посмотреть как выглядит на компьютере, мобильном и в приложении Геткурса.
2026-01-10 12:29:22,056 - DEBUG -   [Я]: Добрый день!
2026-01-10 12:29:22,056 - DEBUG -   Посмотрели мобильный вид оформления? Вам подходит?
2026-01-10 12:29:22,056 - DEBUG -   [Клиент]: Добрый день! К сожалению, так и не нашла((
2026-01-10 12:29:22,056 - DEBUG -   [Клиент]: Даниил, подскажите, пожалуйста, мы сможем применить в оформлении наш фирменный стиль (цвета, шрифты)?
2026-01-10 12:29:22,056 - DEBUG -   [Клиент]: Я правильно поняла, что все наши 800 уроков будут оформлены в одном стиле?
2026-01-10 12:29:22,056 - DEBUG -   ... и ещё 25 строк
2026-01-10 12:29:22,056 - DEBUG - ----------------------------------------
2026-01-10 12:29:22,056 - DEBUG - SUMMARY: Используем ассистента: asst_0zTb3Eu34QhYbnL3jtuZRTUg
2026-01-10 12:29:22,441 - DEBUG - SUMMARY: Создан thread: thread_adKbthzZpuQa1AXNnNBcf8XJ
2026-01-10 12:29:23,778 - DEBUG - SUMMARY: Запущен run: run_EifjmZAYZPD1sCui8O8p20tx
2026-01-10 12:29:24,170 - DEBUG - SUMMARY: Статус run: queued
2026-01-10 12:29:25,648 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:27,033 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:28,449 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:29,954 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:32,171 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:33,590 - DEBUG - SUMMARY: Статус run: in_progress
2026-01-10 12:29:35,198 - DEBUG - SUMMARY: Статус run: completed
2026-01-10 12:29:35,502 - DEBUG - SUMMARY: Результат: 1. Имя и должность/роль: Светлана, клиент
2. Основная информация: Светлана обратилась к нам для оформления GetCourse на сайте Remake.space.
3. История взаимодействий: 
   - Начало общения началось с обсуждения желания Светланы ознакомиться с шаблонами и увидеть мобильную версию.
   - Обсуждение включало вопросы о фирменном стиле и переоформлении существующих уроков.
   - Обсуждение также включало в себя вопросы об оплате и возможности возвращения к прежнему оформлению.
   - Произошел звонок для обсуждения всех вопросов.
   - Обсуждался вопрос о проблеме с доступом к файловому хранилищу и необходимости освободить место.
   - Светлана оплатила услугу.
4. Текущий статус отношений: Светлана выполнила оплату и в процессе решения проблемы с файловым хранилищем.
5. Потенциал для сотрудничества: Взаимодействие продолжается, Светлана вовлечена в процесс и она активный клиент.
2026-01-10 12:29:35,502 - INFO - SUMMARY: Длина: 879 символов
2026-01-10 12:29:35,502 - DEBUG - ============================================================
2026-01-10 12:29:35,502 - DEBUG - NAME: ПРОВЕРКА/ПЕРЕВОД ИМЕНИ
2026-01-10 12:29:35,502 - DEBUG - ============================================================
2026-01-10 12:29:35,502 - DEBUG - NAME: Исходное имя: 'Светлана Атех'
2026-01-10 12:29:35,502 - INFO - NAME: Имя уже на русском: Светлана Атех

Пока не нравится резюме диалога, слишком подробное. Нужно упростить. Попросил Клод изменить промт ассистента.

Был такая иструкция

Ты - помощник для создания кратких описаний контактов. Твоя задача - создать 
            структурированное и информативное краткое описание контакта на основе предоставленных данных.
            
            Формат описания должен быть:
            1. Имя и должность/роль (если указаны)
            2. Основная информация (компания, сфера деятельности)
            3. История взаимодействий (когда и по какому поводу общались)
            4. Текущий статус отношений
            5. Потенциал для сотрудничества
            
            Пиши кратко, но информативно. Используй только факты из предоставленных данных.
            Если каких-то данных нет, опусти соответствующий пункт.
            """
            
            user_prompt = f"""
            Создай краткое описание для контакта на основе следующих данных:
            
            Имя: {contact_data.get('name', 'Не указано')}
            Телеграм: {contact_data.get('telegram', 'Не указано')}
            Компания: {contact_data.get('company', 'Не указано')}
            Должность: {contact_data.get('position', 'Не указано')}
            Первый контакт: {contact_data.get('first_contact', 'Не указано')}
            Последний контакт: {contact_data.get('last_contact', 'Не указано')}
            Статус: {contact_data.get('status', 'Не указано')}
            Категория: {contact_data.get('category', 'Не указано')}
            Теги: {', '.join(contact_data.get('tags', []))}
            Заметки: {contact_data.get('notes', 'Нет заметок')}
            История взаимодействий: {contact_data.get('history', 'Нет истории взаимодействий')}

Стала такая

Прочитай переписку и напиши краткое summary в 2-3 предложениях.

Пиши простым языком, без официоза и списков. Просто опиши суть: кто клиент, что хотел,  как проходила работа, чем закончилось.

Примеры хороших ответов:
- "Светлана хотела оформить школу на геткурсе. Не могла найти скриншоты мобильной версии на сайте. Обсудили детали, она оплатила, работаем, сейчас ждем от неё, когда разберется с файловым хранилищем"
- "Обратился за лендингом на тильде. Созвонились, я отправил КП, клиент взял паузу и перестал отвечать. Не отвечает уже 15 дней"
- "Спрашивал про редизайн сайта, но оказалось дорого для него. Отказ."
- "Заказал виджет для геткурса, сделали, доволен. Обещал вернуться за оформлением."

После исправления резюме стало выглядеть человечнее и понятнее

Светлана хотела оформить курсы на GetCourse. Ей было сложно найти примеры мобильной версии оформления, но после того, как я отправил ей ссылку, она ознакомилась с ними. Светлана задала множество вопросов о работе сервиса и оплатила услуги. Но на текущий момент возникли проблемы с хранилищем для установки шрифтов и логотипа, и мы ждем, когда она сможет их решить.

Ещё проверил, чтобы добавлялись поля Telegram ID и Имя, они почему-то отваливались.

Telegram ID — это числовое значение, которое не меняется у аккаунта. У меня 10% базы потерялось, потому что люби поменяли свои ники. Когда руками добавляешь в базу людей, не думаешь об этом. А по Telegram ID вы сможете найти человека, даже если он поменял никнейм и номер телефона.

Имя — тоже важное поле. Когда бот создает карточку, он пишет Светлана Атех. Потом же мы должны это имя использовать в написании сообщений, чтобы не подрубать нейронку для анализа, что из название имя, а что фамилия, мы один раз делаем это при создании карточки.

Оптимизация всех файлов внутри integrated

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

Так долго он ещё не работал

На одном контакте бот отработал хорошо. Теперь надо протестировать на трех аккаунтах, который х нет в базе notion, работу с лимитами телеграма.

Тестирование на 3 аккаунтах

Пишем промпт для тестирования на нескольких аккаунтах.

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

Я запустил его в plan mode, потому что задач несколько:

  • написать файл
  • запустить
  • просмотреть логи
  • дать вердикт

Это не просто написание кода.

После внедрения я решил проверить код, попросил Клода запустить его и он ушел работать на целых 33 минуты

В итоге Клод завис, команда выполнялась бесконечно долго. На отметке 40 минут работы редактор просто вылетел.

Мне не нравилось, что я не вижу, что там происходит.

Я запустил команду и увидел это

2026-01-11 11:57:35 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:57:36 - INFO - Got 66 valid contacts from 'Leads Re'
2026-01-11 11:57:36 - INFO - Processing folder: Лиды
2026-01-11 11:57:37 - INFO - Folder 'Лиды': 129 peers
2026-01-11 11:57:38 - WARNING - Rate limit reached (30/30). Waiting 54.7s
2026-01-11 11:58:33 - WARNING - Rate limit reached (30/30). Waiting 0.1s
2026-01-11 11:58:33 - WARNING - Rate limit reached (30/30). Waiting 0.2s
2026-01-11 11:58:34 - WARNING - Rate limit reached (30/30). Waiting 0.1s
2026-01-11 11:58:34 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:34 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:34 - WARNING - Rate limit reached (30/30). Waiting 0.5s
2026-01-11 11:58:35 - WARNING - Rate limit reached (30/30). Waiting 0.1s
2026-01-11 11:58:35 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:35 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:35 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:35 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:36 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:36 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:36 - WARNING - Rate limit reached (30/30). Waiting 0.6s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:37 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:38 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:38 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:38 - WARNING - Rate limit reached (30/30). Waiting 0.0s
2026-01-11 11:58:38 - WARNING - Rate limit reached (30/30). Waiting 54.7s

Он делал запрос по каждому диалогу, вместо того, чтобы сделать сразу запрос на диалоги оптом. Из-за этого он влетал в лимиты по запросам и бесконечно долго ждал завершения выполнения кода.

Я попросил это исправить и вместо 40 минут код выполнялся за 70−130 секунд. Он делал запросы оптом и получал больше информации за раз.

Сначала он просто сделал тест без анализа диалогов. Проверка базы, проверка новых, добавление.

Уже после донастроили код так, чтобы он анализирвоал диалоги. Время выполнения увеличилось.

Все промпты лежали в OPENAI ассистентах. Это отдельные пространства, где можно было настраивать и тестирвоать работу нейронок.

Третья попытка

Оркестр функций

Раньше был десяток функций анализа, функция генерации и функция отправки. Теперь функции анализа склеились в одну и всего их стало 3 функции. Они были в отдельных файлах. Я решил обьединить их в один. Он дальше будет управлять функциями. Пока это делаю я вручную.

Вариативность напоминания

Проверив, понял, что одно и тоже сообщение будет восприниматься как спам. Нужно расширить вариативность напоминаний. Отправил Клод найти стратегии напоминания.

Мы не просто напоминаем, а создаем ценность: рекомендуем продукт, спрашиваем как дела, предлагаем бесплатный аудит.

Немного страшно то, что это может работать неправильно. Например написать человеку, с которым мы перестали общаться или клиенту, которому мы закончили работу 2 дня назад.

Заполнение доп. услуг

В отдельном файле будут заполнять услуги, изменения, новости, чтобы он мог их использовать в сообщениях.

Теперь он учитывает количество напоминаний и выбирает то, что мы ещё не использовали.

Официоз в сообщениях

Я в сообщениях придерживаюсь простоты. Не надо сыпать лишние слова словно бисер, важно говорить четко и по делу.

Было

Стало

Ольга, добрый день!

Мы обсуждали с вами оформление раздела клуба на Геткурсе — меню, навигацию, структуру главной страницы.

Напомню о себе. Если тема оформления школы или клуба на Геткурсе всё ещё актуальна — можем обсудить детали и бюджет.

Ольга, добрый день!

Напоминаю о себе. Мы обсуждали оформление раздела клуба на Геткурсе в марте прошлого года.

Если проект всё ещё актуален, можем вернуться к обсуждению.

Учёт давности контакта

Написал контакту, с которым мы общались 3 года назад.

Олег, добрый день!

Напоминаю о себе. 

Если у вас сейчас есть проекты по сайтам, где нужен дизайн или верстка — напишите, обсудим.
 
Как вам работа с заказчиком, которому вы передавали мои контакты? Удалось тогда с ним связаться и обсудить проект?

Это странно, потому что по прошествию 3 лет я могу не помнить человека, а тем более кому я давал его контакты и что там был за клиент.

Скорректировал его поведение в зависимости от разрыва в общении.

Олег, добрый день! Напоминаю о себе.

Если у вас сейчас есть задачи по сайтам - дизайн, редизайн, создание промостраниц или оптимизация скорости - напишите, обсудим.

Также, если есть знакомые, кому нужна помощь с дизайном сайтов - расскажите о нашей партнёрской программе.

Ссылки в сообщениях

Я добавил упоминание виджетов и новостей в сообщения. Но они вставлялись полностью.

Они большие и некрасивые. Надо было их сократить. В телеграме с помощью api можно вставлять зашитые в слова ссылки. Теперь они стали аккуратнее.

А в контекстном файле это записывает в маркдаун стиле:

А ещё добавил к новым услугам теги, чтобы он клиентам по дизайну не отправлял виджеты от Геткурса. Это разные аудитории.

Тестирование

Рано или поздно надо будет прийти к запуску. Это страшновато. Почему? Потому что нейронка сгенерирует сообщения и отправит их 250 людям. Да, я уже давным давно работаю над этим проектом. У меня уже перепроверено и перенастроено все 100 раз. Но все равно страшновато. А что если напишет какую-то глупость?

Даже если он напишет 10% людей немного странные сообщения — ничего страшного.

Настрока расписания работы

  • Воскресенье, 3 утра — импорт контактов из папок
  • Каждый день в 4 утра — сканирование, кому написать
  • Каждый день в 5 утра — генерация сообщений
  • Каждый день в 11 утра — отправка сообщений

Лимит работы

Когда я думал: «о как круто, мой менеджер сможет писать каждый день куче людей, напоминать обо мне».

Потом реальность снизошла на меня: а что если он напишет 250 людям и 40 из них начнут предлагать проекты. Я смогу оценить? Нет.

Сколько диалогов у меня новых появится? Охренень как много.

Поэтому я обновил работу скрипта. Он будет каждый день анализировать 15−20 человек и писать столько же сообщений. Чтобы я смог физически их обработать.

Учёт давности контакта

Поведение меняется в зависимости от того, сколько времени прошло с последнего контакта:

  • Менее 3 месяцев — можно спрашивать про конкретные детали из переписки.
  • 3−12 месяцев — уточнить актуальность, не давить на детали. «Если проект ещё в планах — напишите».
  • 1−2 года — не ссылаться на детали старых разговоров как будто они ещё актуальны. Писать как возобновление контакта.
  • 2+ года — почти холодный контакт. Никаких «как там с тем проектом» — человек давно забыл детали.

Добавил стратегию напоминания «А ещё можем помочь»

В прошлой итерации у меня были сообщения типа:

Дарья, добрый день!

Напоминаю о себе. В марте 2023 мы с вами обсуждали оформление Геткурса.

Если проект ещё актуален, напишите.

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

То есть кроме основного напоминания мы накидывали ещё тем, где можем помочь. Это важно, потому что если клиент или лид уже нас выбрали.

Я встроил это в стратегии, поэтому добавился ещё один пункт к вариативности.

Микс нейронок

Мне порой не нравится как работает Дипсик. Она хороша для анализа, но сообщения порой пишет странно, не так хорошо как Клод. Словно неуверенный в себе школьник подкатывает к красотке.

Я попробовал сгенерировать одно сообщение для лида, получилось 4 цента. Это в районе 3 рублей. Круто, но я думаю можно оптимизировать расходы.

Рассуждение на примере реального контакта:

Рассуждение Anthropic (Claude)

Последний контакт - июль 2025, сейчас февраль 2026, прошло около 7 месяцев. Было 3 предыдущих напоминания (июнь, июль, ноябрь), поэтом у выбираю стратегию ЧЕК-ИН или НОВИНКА. В актуальной информации есть несколько новых виджетов для Геткурса - это релевантно тегу клиента. Выбираю НОВИНКУ: упомяну один конкретный виджет, который может быть п олезен для курса из 12 уроков с прогрессом и заданиями. Виджет прогре сс-бара с маскотом или рейтинга учеников - хорошо вписывается в конте кст (клиент упоминала шкалу прогресса и бейджики). Возьму виджет прог ресс-бара с маскотом - он про прогресс и геймификацию, что прямо из з апроса Ольги.

Сообщение для напоминания:

Ольга, добрый день!

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

Если курс уже готов и оформление Геткурса снова в планах — напишите, обсудим старт.

Фраза «прогресс-бар с маскотом» в сообщении будет выделена ссылкой, которая ведет на страницу этого продукта.

В переписке эта девушка указывала, что ей нужен прогресс-бар для учеников и что курс они ещё в разработке.

Анализ от Дипсика, сообщение от Клода

Решил попробовать анализ делать через Дипсик, а написание сообщения через Клод. Баланс между экономией и качеством.

Дипсик читает диалог, читает файл контекста, передаёт саммари клоду, тот уже пишет сообщение. Попробую такой вариант.

Получилось полная ерунда.

Дипсик передал Клоду это

Стратегия СЕЗОН — привязка к началу весны как активному времени для запуска онлайн-курсов. Три предыдущих напоминания без ответа на последнее — нужно короткое, ненавязчивое касание с мягким CTA и упоминанием готового решения Remake как быстрого старта.

А Клод уже написал это

Ольга, добрый день!

Март — традиционно активный месяц для запуска онлайн-курсов. Если проект с оформлением на Геткурсе снова в планах, есть готовое решение Remake — можно запустить быстро, без долгой разработки с нуля.

Если актуально — напишите, расскажу подробнее.

Переход на Клод в сообщениях и завершение тестирования

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

Я понял, что дело в Дипсике. Он стоит в 20 раз меньше, но и качество в несколько раз хуже. При анализе нет критической проблемы. Но при написании сообщения есть. Если человек поймет, что пишет нейронка, отновится будет иначе.

Для меня рубеж — 20 хорошо-написанных сообщений подряд. Когда я даю диалог за диалогом и там отличные сообщения. Тогда мы можем считать, что тестирование завершено и мастшабировать. Ошибки будут. Но лучше иметь 10% ошибок, чем 0% отправленных сообщений.

Сообщения классные, покажу парочку.

Александр, добрый день!

Давно не общались — написал напомнить о себе. В марте работали над страницей оплаты, вы тогда упоминали, что планируете пересмотреть подход к оплатам в целом.

Если эта тема ещё актуальна или появились новые задачи — напишите, обсудим.

Даниил, добрый день!

В июне смотрели виджеты — хотел уточнить, не нашли ничего подходящего или просто руки не дошли?

Из того, что сейчас популярно у школ: виджет допродажи курсов — размещается в боковой панели, ученик сам выбирает нужные продукты и оформляет заказ без участия менеджера.

Удобно, если хотите увеличить средний чек без лишних касаний. Страница виджета.

Если актуально — напишите, обсудим.

Елена, добрый день!

Понимаю, что сейчас у вас много изменений с приходом продюсера и проект на паузе.

Если будет нужна помощь с оформлением Геткурса — дай знать, с радостью помогу.

Буду на связи, как только решите продолжить.

Алёна, добрый день!

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

Спасибо, что готовы порекомендовать меня коллегам. Если будут вопросы или задачи — буду на связи.

Я в восторге! Ощущается как магия!

Адаптивность

Я решил проверить, как он напишет сообщение для клиентки, которая заказала виджет, но несколько дней забывает его оплатить.

Мы отправили ей приложение к договору и счёт на оплату. Ждем оплату.

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

Рассуждение

В переписке уже было 2 напоминания о себе (24 и 26 февраля).

Клиент сказала «только завтра смогу» — то есть 25 февраля, но так и не ответила.

Счёт отправлен 23 февраля, клиент в курсе. Нужно мягко напомнить про оплату счёта и договор.

Стратегия — ВОПРОС, конкретный: про счёт и готовность двигаться дальше.

Предыдущие напоминания были безликими («напоминаю о себе»), поэтому сейчас добавлю конкретику.

Сообщение

Надежда, добрый день!

Счёт и договор отправили 23-го — хотел уточнить, удалось ли посмотреть?

Как только подпишете и оплатите — сразу ставим виджет.

Наглядность для кейса

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

Чтобы он там показывал, что он взял контакты из папки, обработал их, проанализировал, потом сходил, посмотрел, кому надо написать и составил сообщение и отправил их.

Собрал дашборд, который показывает как менеджер работает, в какой последовательности.

Конечно, это не та наглядность. Это просто костыль, который позволяет хоть как-то показать, как система работает. Сложно показать как работает терминал наглядно.

Отказ от шага генерации сообщений

Сейчас у меня скрипт работает из 4 больших функций:

  1. Подгрузка контактов из папок Телеграма
  2. Анализ и добавление в Ноушн
  3. Генерация
  4. Отправка

Последние две похожи друг на друга.

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

Этот шаг был бы уместен, если бы я проверял сообщение перед отправкой, но я не хочу их проверять. Я хочу чтобы бот работал автоматизированно без моего вмешательства.

Функция отправки берет контакт человека, смотрит его карточку в базе, читает диалог, генерирует и отправляет сообщение.

Получается что функция отправки делает тоже самое, но дополнительное отправляет сообщения.

Логично обьединить их в одну. Чтобы скрипт смотрел переписку, читал карточку в базе, генерировал сообщение и отправлял.

Последние приготовления перед запуском

Остался последний шаг — запуск агента на сервере. Но перед этим нужно постелить газетку:

  1. Отлепить последнюю версию от остального кода. Сейчас папка с проектом — это нахламление файлов. С каждой попытки я условно создавал папку: «final_result», «final_result1», «final_result_точно последний». И сейчас это лежит всё в одном месте. Надо выделить оттуда рабочий код. Загружать всю папку с кучей файлов и функций — глупо.
  2. Упаковать это в докер. Загрузка проекта на сервер без докера — это боль. На локальной машине все библиотеки тонко настроены, а сервер — совсем другая машина по содержимому библиотек. Если загружать без докера, можно тронуться, будет десятка ошибок о несостыковках версий. Докер позволяет этого избежать.
  3. Дашборд состояний системы. Вся работа агента — под капотом. Это 3 питон файла, который регулярно запускаются на сервере. Я не увижу, что сейчас происходит, кому были отправлены сообщения, нет ли ошибок. Оно просто невидимо на сервере будет что-то делать и сообщения будут отправляться.

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

Дашборд

Что мне нужно в дашборде?

  1. Лог работы. Как система работает, что запускает, какие сообщения пишет.
  2. В порядке ли файлы сессий телеграма. Работает ли авторизация.
  3. Статистика: добавлено контактов, проанализировано, отправлено сообщений.
  4. Редактирование файла crm_context.md, чтобы я мог новые услуги добавлять не в коде, а в удобном окне.

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

Первоначальная версия дашборда. Пока мне не нравятся «последние события» и список услуг в «Контексте».

Последние события содержат всякий мусор, отчётливо видеть что происходит без шума в глазах сложно. Надо будет переделать.

В Контексте услуги сливаются друг с другом, редактировать их неудобно.

Такое необычное чувство запускать цикл работы с помощью кнопки в веб-интерфейсе. Я все время работал в терминале и веб-интерфейс ощущается словно из подземелья вышел на солнце.

Подправил послдение события, визуально стало приятнее. Но много линий и повторяющего текста, можно обойтись без них.

Стало чище, меньше линий и повторяющегося текста.

Логотип

В итоге пришел к анимированному варианту

Гибкость в рассылке

Кроме обычного напоминания есть и другие задачи, более гибкие:

  • пушить недавним лидам, которые ушли подумать
  • запросить у клиентов отзыв
  • у клиентов попросить контакты знакомых, кому я могу предложить свои услуги

Это задачи, которые сейчас я делаю руками. Напоминания о себе — это фоновая задача, которая будет выполнятся медленно и постепенно.

Я решил обернуть этот функционал в «Задачи». Мы можем давать агенту одноразовую и переидическую задачу. Чтобы он написал один раз или неделю.

Я хочу иметь 2 варианта: персонализированно и по-шаблону.

Персонализированно — когда я даю задачу, что мне нужно написать, а нейронка уже на основании переписки сама решает, как написать сообщение.

По-шаблону — когда я даю шаблон сообщения, а нейронка меняет там только обращение к человеку.

Тестирую на друзьях.

Но на этом этапе писал Дипсик + не было настроено понимание ты/вы.

Переключил на Клод и настроил определение обращения.

Лимиты и достижение задачи

Давайте представим, что надо запросить отзыв. Запрашивать будем раз в неделю. Что делать, если человеку уже написали 5 раз, а он игнорит? Наверное нужно перестать ему писать.

Надо вводить лимиты. Чтобы агент мог написать человеку только 5 раз. Значит это надо добавить как настройку в задачу.

Теперь по достижению. Например мы дали агенту 50 человек и сказали запрашивать отзыв. Через неделю 20 человек оставили, а 30 нет. Как потом тормознуть агента, чтобы он не продолжал отправлять тем 20, кто уже отправил.

Лимиты добавляются просто. Так как мы кодом отправляем сообщение, сразу после отправки в базе данных в задаче у пользователя добавляем одно отправленное сообщение.

Надо вводить достижение задачи. Если человек отправил нам видео, а мы поблагодарили его за отзыв → мы ставим ему в базе данных чекбокс о достижении и больше ничего не отправляем.

Для достижения сложнее. Пришлось добавить поле успеха и неуспеха. Чтобы нейрнонка понимала, что такое отказ, а что успех.

Пробуем лимиты и достижения цели

Создам задачу написать самому себе с рабочего на личный аккаунт. Задача — запросить отзыв.

Поставим лимит в 3 сообщения. А критерием успеха будет считывание видео.

Написал первое сообщение и обновил логи

Я ответил ему

Запускаем второй раз

Продолжает мягко напоминать

Отправлю ему видео, проверим как считает выполнение. Обман чистой воды 😂

Запускаем ещё раз

Не понял видео, поэтому продолжил спрашивать.

Добавляем подпись к дополнительным форматам.

Перезапускаем

Я бы ещё добавил, чтобы добавлять к задаче действие после отказа, действие после выполнения.

Потому что действовать надо по-разному. И я не могу предсказать, какие будут задачи.

Действие после результата

Добавим просьбу отзывить отзыв и напишем такие критерии

Долго не хотел понимать, что задача выполнена. Спустя час получилось сделать так, чтобы он помечал выполненным.

Отказ он понимать вообще не хочет.

Внёс изменения, теперь он не попрошайничает отзыв

Дизайн раздела задач

Когда полей было меньше, дизайн выдерживал. Сейчас нет.

Форма стала огромной и неудобной. Её нужно сделатькомпактнее и удобнее. Отдаём её Figma Make на исправление.

Тоже самое проделываем с карточкой задачи

И со списком задач

Генерируем с Figma Make макеты и отдаём Клоду на верстку

Результат первой итерации редизайна. Считай 1 в 1)

Оказывается MCP Figma был не подключен. Он вызывал функции получения дизайн из фигмы, но видимо прикинулся, что работает.

На примере карточкию. Вот так он делал с отключенным MCP, несколько раз переделывал, всё одно.

Стало лучше, но иконки всё равно не подтянул.

Понял, что ему надо подробно описывать задачу по дизайну и указывать проблемы. Частая — не подтягивает svg иконки. Прогнал ещё раз, стало лучше.

Теперь дизайн раздела задач выглядит гораздо лучше

Ассистент оплаты

В моём продукте Remake поялась проблема: сложно уследить за отправой, проверкой счётов и актов.

Клиентов по подписке все больше, мы продолжаем так же работать по дизайну, разработке, привлечению клиентов, но тут ещё добавляется работа со счетами.

Каждому клиенту за несколько дней нужно отправить счёт, проконтроллировать чтобы он его оплатил. Если не оплатил, напомнить. После оплаты выслать акт.

Так пришла идея сделать бота, который будет делать всё сам.

Схема работы

Бот должен в нужный день каждого месяца отправлять счет, который он сам сгенерирует в банке Точка.

Для генерации счёта этого у него должна быть информация:

  • о группе, куда высылать;
  • кого отмечать, ответственного;
  • данные контрагента для формирования счета;
  • основание документа, позицию и стомость.

После отправки счета бот ждет 3 дня, это период для оплаты счёта. Через 3 дня он запрашивает статус оплаты в банке.

Если счёт оплачен, пишет об этом в чат и благодарит клиента за оплату.

Если счёт не оплачен, напоминает об оплате. И снова ждет 3 дня. Этот цикл он повторяет до тех пор, пока счёт не будет оплачен.

После оплаты он отправляет в чат «Отчёты» сообщение, чтобы я или моя команда могла пометить в системе, что оплата получена.

Весь процесс работы бота

Путь общения в реальном проекте

Самое прекрасное, что я в этот чат даже не заглядывал и все произошло автоматически.

Отправление акта

За неделю до отправки следующего счёта он отправляет акт по текущему периоду.

После отправляет в группу «Отчёты» задачу отправить акт клиенту в ЭДО.

Хранение данных

Все данные хранятся в базе данных. Группы, их счета, даты проверки статуса счета, акты. Всё хранится в базе данных бота.

Особенности решения

Когда я задумывал бота, он казался мне простым. Но на деле как всегда подвезли вагон и маленькую тележку деталей. Каждая трансформировалась в фичу.

Добавление в группу из бота

Чтобы бот отправлял сообщение его нужно добавить в группу. С добавлением в группу есть рутина: добавить бота, дать ему права. Мелочь, но бесит.

Я сделал так, чтобы при добавлении его в группу он уже мог писать сообщения и был админом.

Сообщение в одно время и по будням

Я увидился, когда увидел отправленный счёт от бота в субботу в 4:30 утра. Сразу понял, где ошибся при разработке и пошел переделывать. Теперь бот пишет в 12:00 по мск и только в будние дни.

Отправка раз в несколько месяцев

Клиенты оплачивают счета раз в месяц, раз два месяца, раз в три месяца. А бот был настроен только на ежемесячные.

Теперь бот при настройке спрашивает периодичность отправки счёта.

Отсутствие статуса оплаты счёта

Насколько я понял, Точка банк понимает, что счёт оплачен, если при оплате указали основание — счет. Иногда оплата приходит и статус счёта в банке не меняется.

В итоге получается так, что счёт оплачен, но бот этого не знает. За этим последовало 2 доработки.

Проверка истории платежей

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

Ручное изменение статуса

Теперь есть отдельное меню счетов. Можно выбрать конкретный счёт и отметить его оплаченным.

Планы

  • Отправка в личку. Некоторые клиенты не смотрят в группе, им надо в личку кидать счета, чтобы они их оплатили. Но для этого им надо будет один раз зайти в бота и забыть. При настройке группы можно добавить настройку, дублировать ли в личку.
  • Отправка нескольких счетов. Сейчас отправка счетов идет по одному. Но у некоторых клиентов есть по две услуги. Это надо как-то решать. Можно конечно разбить на 2 дня, но тогда бот будет слишком часто долбить сообщениями в группу.

Сервис оценки проектов «Посчитайте пожалуйста»

Друзья, впереди вас ждет охренеееееено большой кейс про слегка отбитый продукт похожего на него автора. Если дочитали до конца, то заслуженно ловите →

Моя боль на фрилансе с оценкой проектов

Я часто оцениваю проекты для клиентов. Когда работаешь на фрилансе и активно рекламируешься, поток заявок идет и часто надо оценивать разные проекты, порой из десятков позиций. Когда проектов много, от оценки проектов начинаешь уставать.

Из чего состоит оценка проекта

  1. Заполнять задачи и прописывать стоимость
  2. Считать все работы: почасовые и фиксированные
  3. Считать общие сроки и стоимость
  4. Вписать туда все модификаторы: партнер, налоги, нда, на рекламу
  5. Написать всё это клиенту в красивом формате

Ещё бывает в пятом блоноте где-то ближе к концу у тебя есть посчитанная работа, а тебе её не найти. Или в заметках на компьютере так куда-то запихал такую заметку, что перебрав все ключевые слова не можешь найти. Ух, аж в пот бросило 😂

Мой опыт

Я делал это сначала с блокнотом и ручкой. Потом понял, что на бумаге далеко не уедешь и начал искать другие решения.

Попробовал гугл-таблицы. Там клёво всё считает, но организовывать хранение оценок проектов в гугл-таблицах то ещё приключение. Под каждый делать файл? Или вкладку в одном файле? Посчитать посчитаешь, когда всю эту громадину настроишь, а ведь надо ещё сообщение написать красивое, с разложенными позициями. Не пойдет, ищем другое.

Я пользовался Notion для заметок и увидел там функционал таблиц, где можно считать значения разных строк. Я такой: «О, а это может мне подойти». Настроил страницу-шаблон с таблицами и оценил там больше 100 проектов.

Детальная страница выглядела из заметки и таблицы. Там я выстроил такую структуру:

  • наименование
  • количество часов
  • сумма
  • количество дней (расчитывается автоматически)

Проблемы таблиц в Notion

  • Неудобно считать «доходы-расходы=прибыль». Надо было делать отдельную таблицу с расходами и руками одно из другого вычетать.
  • Коряво добавлялись бы модификаторы: срочность, НДА, маркетинг, партнёрские.
  • Нельзя было одним кликом скопировать сообщение с работами, сроками, часами, днями и всеми надбавками.

Разработка своего сервиса

Если бы не нейронка — я никогда бы не начал делать такого монстра. Навыки программирования есть, но не настолько. Я не видел такого сервиса раньше, поэтому решил делать сервис для себя.

Основатели студии Signal37 в книге говорили: «Надо делать сервисы для себя, они получаются первоклассными, потому что ты сам будешь их пользователем и будешь знать, что туда стоит добавлять, а что нет».

Я решил сделать такой сервис. Мне важно было иметь пространство, где хранились бы все оценки моих проектов.

Чтобы я мог:

  • быстро добавлять работы и расходы
  • добавлять модификаторы
  • копировать сообщение одним кликом

Первая версия получилось такой и почти до конца хранилась просто на хостинге, а проекты сохранялись в хранилище браузера.

Настроил подсчет, все работало хорошо. На это конечно пришлось убить довольно много времени. Но все завелось. Сервис мог посчитать только один проект. Но у меня он не один, поэтому надо расширяться.

Надо было сделать список проектов, чтобы по нему можно было ориентироваться, и видеть, что есть в проектах. Добавил боковую панель с проектами.

Снизу были кнопки экспорта расчета и управление данными:

Сделал отдельное окно настроек, куда перенес все галочки модификаторов. Управление данными положил в кнопку в правом нижнем углу. Список работ «Работы проекта» в правой колонке свернул по-умолчанию, потому что они и так есть слева.

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

Поле для количества рабочих часов

Было бы классно, чтобы исходя из количества часов в проекте мы сразу считали дни. Чтобы не просто у человека в итоге был срок: «3 дня и 16 часов», а чтобы это конвертировалось.

В итоговом расчете он показывает количество часов и срок работы: 33 часа / 8 часов в день = 4 рабочих дня.

При формировании сообщения пишет и количество часов и срок работы.

Упростил работу со списком работ

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

После — все настройки работы открыты. Клик по названию включает режим переименования работы. Да, стало занимать больше пространства, но зато стало меньше кликов и переименование стало проще.

Сортировка по цене и поиск проектов и работ в левой панели

Когда отправляешь 10 пунктов оценки, клиенту бывает важно понять, что получилось самое дорогое, поэтому тут поможет сортировка. Сортировка меняет расположение работ, выстраивая их по стоимости. Эта сортировка будет влиять на сообщение, в нем работы тоже будут отсортированы.

Проектов точно будет становится больше, значит нужен поиск. Часто по названию проекта не вспомнишь, а вот по работам можно попытаться найти проект. Поиск в левой панели работает не только по названию проектов, но и по работам. Если я помню, что где-то делал «прогресс-бар», я начну вводить этот текст и поиск выдаст те проекты, в которые я прописывал эту работу.

Авторизация

Теперь можно авторизоваться через Google-аккаунт и все данные хранить там.

Заметка

Важно использовать продукт, который ты делаешь. Только тогда ты поймешь все его проблемы и неудобные нюансы.

Мне нужно было оценить проект. Я пошел в своей сервис и такой: «А не, не буду. Надо заметку оставить, что за клиент, от кого пришел.» Нужно было дать контекст. А в сервисе не было заметки о проекте. За работу!

Добавил поле заметки в правый столбец. Теперь можно вставить короткую заметку, которая даст больше контекста о проекте.

Изменение порядка элементов

Блок авторизации убрал влево, предупреждения поднял наверх. Блок копирования сообщения положил в плавающее окно с возможностью посмотреть сообщение.

Экспорт в PDF

Некоторые клиенты хотят, чтобы смету им отправили в PDF. Поэтому теперь появилась кнопка экспорта в виде файла. Пришлось серьезно понейро-вайбкодить, чтобы PDF выглядела хорошо. Наверное я раз 30 объяснял нейронке, что и как должно отображаться, чтобы мы пришли к нужному результату. PDF-файлы требовательны к стилям и разметке.

Проблемы

Нельзя чтобы проекты лежали в столе. Их можно допиливать постоянно и с каждым разом что-то захочется изменить, улучшить. Проект уже несколько месяцев лежит и не видит пользователей, потому что есть проволочки, которые я не могу быстро и просто решить.

Сейчас я столкнулся с тремя проблемами и хотел о них рассказать.

Первая — авторизация и база данных. Я планировал сделать простую авторизацию через гугл, но есть проблема — закон о трансграничной передаче данных. Я не могу использовать ничего гугловского без кипы бумаг. По закону даже при использовании яндекс метрики нужно подавать заявку в ркн о том, что я обрабатываю персональные данные. Короче, на каждый чих по документу и заявлению. А с базой данных тоже надо возиться и выбрать тот сервис, с которым точно все будет хорошо.

Вторая — дизайн. Я делал этот проект с нейронкой. Дизайн под моим руководством делала нейронка, он получился сносным, но руки дизайнера там нет. Я хочу сделать его более интересным и удобным.

Третья — монетизация. Я закрыл эту боль для себя, хочу закрыть её и для других. Инвестирую своё время и токены в то, чтобы это работало для людей. Но бесплатное не ценят, поэтому нужен обмен ресурсами. Энергия там, отправляешь её во вселенную, а она тебе возвращается подпиской за 290₽ ну короче, вы поняли. Я не планирую заработать сто-миллионов-тыщ-до-неба, но если будут пользователи и они будут столь благосклонны и благодарны, что осыпят монет бородатому дизайнеру, кто я такой чтобы их отговаривать? Так вот, чтобы эту подписку сделать и чтобы она нормально работала, надо с Юкассой потратить недельку.

Итог

Все 3 проблемы я просто отложу на будущие обновления. Сервис уже сейчас может приносить пользу. Хранение в куках конечно не настолько безопасно, как база данных, но стабильное. Уже сейчас можно пользоваться сервисом, делать оценки. Информацию можно переносить уже в заметки. Но в моменте здесь и сейчас посчитать — это уже работает.

Домен и название

Рабочее название проекта — projects-costs. Что может быть ещё банальнее, правда? Потом пошли попытки сделать какое-то серьезное название — Estimate. С одной стороны всё четко, с английского ~"Расчет".

Вчера я думаю, господи, ну как же банально. Надо что-то другое.

Я попросил охапку нейронок сделать домены для такого сервиса, креатив выкрутил до конца. Выбрал самые смешные.

Отодвиньте детей от экранов.

Назвать сервис чем-то таким всерьез я не смог, пока ещё в своем уме. Даже не смотря на то, что это «жесткая, но справедливая дихотомия»

Мне понравилось название: «Чё по чём» — прикольная сленговая фраза, хлесткая. Благо я не первый такой умный парень и эти домены давно уже заняли. Стоят по 450 000 за штуку. Мой сервис конечно кайфовый, но 900 000 на два домена не могу пока потратить 😄

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

Я думаю, ну это же бред. А потом понял, что это прикольная штука. Домены универсальные, они могут подойти к куче ниш и использование слова пожалуйста я нигде не видел. Я даже сейчас пишу и смеюсь.

Ощущение от названия вообще разные:

— На каком сайте ты это посчитал?
— Эстимейт точка ру (крик толпы ФУУУУУУУУУУ)

— Где так быстро посчитал проект
— Посчитайте-пожалуйста точка эрэф

Оно забавное, запоминающееся, легкое, без какого-то пафоса.

А на английском calculate-please.ru. Это не совсем корректно с точки зрения языка, подчеркнуто неправильное. Я хотел слово calculate вытащить вперед, чтобы люди начинали писать и находили его. Но и саркастическое неправильное написание мне тоже подходит.

Отказался от авторизации

Убрал блоки авторизации. Теперь всё сохраняется в куки. В левом нижнем углу добавил кнопки импорта и экспорта.

Переделал настройки

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

Собрал все настройки в узкую колонку, которую будем открывать при клике на шестеренку. Сохранение будет автоматическим, без нажатия на «Сохранить и закрыть».

Обновил список работ

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

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

Я уменьшил ширину названия работы и убрал повторение суммы. Теперь сумма в поле и есть итог расчета.

Лого

Подскажите-пожалуйста — это охренеть какое длинное словосочетание. Вместить его в левый угол будет сложно.

Я конечно попробую сделать и большой вариант чтобы на весь экран раскидать, но короткий вариант тоже нужен.

Мне сразу на ум пришло сокращение альбома Хаски — Собачья жизнь. Он сократил его так: сбчь жзнь.

Можно попробовать что-то похожее сделать с моим названием.

  • псчт-пж
  • псчтпжлст
  • псч-пж
  • псчт-пжлст
  • псчтйт-пжлст
  • псчтйтпжлст
  • псчтйтпжлс
  • пст-пжст
  • пщт-пжлст
  • псчт-пжлз

Всё выглядит плохо. «Сбчь жзнь» выглядит лучше. Там такие слова и буквы, которые легко считыватся.

Единственный вариант, который мне понравился — псчт-пжлст. Тут читаются слова и выглядит короче. Сравним.

посчитайте-пожалуйста (20)
псчт-пжлст (9)

Ещё понравилось сокращение «псчт-пж», так как «пж» воспринимается как «пожалуйста» к всех. Но оно довольно рваное по длине получается. Хвостик «пж» бросается в глаза. Сейчас покажу.

Давайте пробовать создать какое-то подобие логотипа. Мне нужно поугорать и сделать запоминающийся лого.

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

Я бы взял его лицо как пиктограмму и добавил к нему наше сокращение.

Теперь надо вставить его короночку в описание

Какая из них лучше, пока не знаю. Надо выбрать что-то одно. А потом вспомнил, как Sims3 оформила свой экран загрузки. Внизу под полосой всегда была смешная надпись о том, как мир игры простраивается.

Здесь тоже можно сделать экран загрузки на пару секунд. Чтобы человек не забывал поуграть немножко.

Я бы выбрал первую фразу, она относится к сервису и как бы от моего лица. А потом, когда будет монетизация, можно не косарь поставить, а сумму подписки.

Отказ от мобильной версии

Я пока не хочу делать мобильную версию, там надо вложить гораздо больше сил, чем в компьютерную. Я не хочу делать паршиво и хочу двигаться по философии «на запуске отрезай лишнее». Пока сделаю нормальную ПК-версию. Если проект пойдет, будет больше пользователей — обновлю весь дизайн и сделаю мобилку.

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

В мобильной вресии надо показать, что она недоступна. Не просто ничего не делать, чтобы пользователи заходили и такие: «ууу, что это за разработчик такой, даже мобилку не сделал». Не просто оставить, а показать, что я её намеренно пока не делал.

Когда я зашел в мобильную версию, у меня в голове сразу возникла мысль: «её били, возможно даже ногами». Ну правда, сами посмотрите:

На том и остановимся. В чем задумка: показываем модалку с анимацией где ноги бьют лого.

Хотел попробовать lottie-анимацию. Думал, что нейронка с ней справится. Спойлер: не справилаcь.

После попыток самой нейронки создать подобие ноги я нашел бесплатный код ноги и отдал нейронке, в родной анимации он топтал, а должен был пинать.

Пришлось даже траекторию написать, но нейронке не удалось переписать родную анимацию лотти-файла:

Решил взять простое SVG и отдал нейронке сделать анимацию с js.

Я уже в какой-то момент подумал, что я быстрее сделал бы мобильную версию. Но я упорный упоротый, надо доделать.

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

Получился вот такой кусок анимации

Через десятки попыток и килограммы токенов нейронки, я понял, что надо оставлять так. Дальше этого шедевра уже сложно прыгнуть. Предел совершенству, определенно, есть. Оставляем.

Страница о проекте

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

Вернемся к странице про проект. У меня на неё 2 задачи: рассказать об этой странице, чтобы люди поняли, как проект развивался. А вторая цель — прорекламировать мой канал Нюансы Фриланса, где я рассказываю про фриланс.

Я подумал, вот что мне написать на странице о проекте. Надо написать про боль. Почему этот проект вообще появился. И про того, кто его сделал и почему)

Потом надо было разделить и написать про канал.

Потом подумал: «Блин, что такого злободневного есть у фрилансера, что бесит каждого». Я понял, что это НДА. К каждому фрилансеру приходили с проектом и такие: НДА. А в этот момент фрилансер, бедняга-доходяга, обливается потом:

Я со своими подписчиками из Нюансов что делаю? Правильно, ***** с вертухи этому НДА. Надо идти делать.

Я думал найти без фона, но это довольно сложно. Поэтому взял цельную картинку. Но надо же НДА на голову прилепить? Как? Спросил у нейронки, та указала на https://ezgif.com/.

Шикарный сайт, разработчикам спасибо. Отвешиваю поклон.

На вкладке Gif maker можно наложить картинку на гифку покадрово. Я сделал простой квадрат с надписью НДА и начал его раскладывать по кадрам.

Итоговая страница о проекте

Порой мне хотелось успокоить дизайн, сделать его проще, дружелюбнее … а потом перехотелось.

Система тикетов

Баги и пожелания от пользователей будут 100%. Нужно их где-то регистрировать. В личке ТЗ замучаешься. Это я уже знаю по проекту madeongc.

Решил сделать её в Yougile. Это российский сервис для управления проектами. Как трелло, но лучше. Там можно сделать доску, которая будет доступна без регистрации и смс. Любой сможет добавлять туда задачи.

Вернул авторизацию

Мудохаться с сервисами не хотелось, делать логин-пароль тоже. Хранить эти пароли, переживать, ну его.

Вспомнил, что у Бюро Горбунова вход по ссылке. Не парит и делает проще.

Сделал базу в mysql и авторизацию по почте. Вводишь почту — приходит письмо, кликнул и вот ты уже авторизован.

Страница статистики

Мне хотелось публиковать статистику как инфоповод, но она должна быть смешной и интересной.

Нижний блок с аватарками будет увеличиваться по мере увеличения количества пользователей.

Проверка «об друзей»

Дал сервис друзьям попользоваться, сразу накидали багов. Шикарно, все по делу. Все обновил, продукт стал сильнее

  • Если не успеть кликнуть вне поля суммы у работы, то обновится на старое значение
  • В расходах у суммы можно вначале написать 0 и он останется
  • Не работает кнопка «Создать проект»
  • Модальные окна перекрывают друг друга
  • Тип налогообложения заменен на процент налога
  • Процент партнеру считался от базовой суммы, а не от итоговой

Вернулся к оплате

Понял, что лучше настроить всё сразу, чем потом при большом количестве пользователей пытаться что-то внедрять. Если на большом количестве пользователей и проектов что-то сломается, будет плохо.

Сначала нужно расположить где-то блок. Я выбрал левый блок, выше кнопки создания проекта.

Вспомнился блок подписки у Grok. У него там ещё анимация звезд.

Пошел в Миджорни сделать что-то похожее. Хотелось сделать знак бесконечности в виде проектов, папок. Что-то такое. Типа вы получаете бесконечные проекты (папки).

Но нейронка как-то не въехала в мою философию:

Потом захотелось что-то виде космоса, как у Grok, нейтрально, завораживает:

После перешел к простому стилю и вставил свои фото:

Выбрал вариант ниже. При наведении на карточку мое лицо сдвигается к кнопке. Хочется сделать такой эффект: когда он наводит на кнопку, у меня появляется реплика. Но как это встроить, чтобы читалось, было видно и понятно пользователю, пока не знаю.

Тариф

В платном тарифе кроме раширения проектов ничего нет. Пока это основная механика проекта и покупка чего-то допом может быть связана только с ней. Но одну её как-то бедновато писать.

Вот такое окно выглядело бы странно, пустовато. Я хочу его разнообразить. Сразу вспомнился мем с Батрудиновым:

А после отправлять письмо с чеком, писать: «Да шучу, вымпел и ручка тоже будут» и прикладывать 6 картинок: вымпел; ручка; почет; респект бесконечный от нашей передачи; просто круто, молодец; просто доказал всем, что ты не тупой.

По большей части все гуглится. Но респект хотелось сделать с стиле GTA, но с русским текстом.

Берем картинку и идем в nanabanana.

Просто круто — ничего не нашлось, но нашлась всратая картинка с налетом одноклассников

Итоговые подарки:

Реализация

У меня есть подозрение, что не въедут. Кто не видел мема не поймет. Все равно выглядит угарно. Пусть останется как концепт. Может быть потом верну, под маркетинговую компанию.

Решил сделать такой вариант. По делу и забавно

Но в конец решил добавить иконку доширака. Этот символ сыграет свою роль.

Добавил блок, где говорится о том, что проекты без авторизации не сохраняются.

Страница спасибо

На странице спасибо мы благодарим пользователя за оплату и поддержку. А что мы обещали с тарифе? Что автору будет что где жить и что поесть: 4 доширака.

Сначала была идея сделать анимацию. как четыре дошика плывут ко мне.

Потом подумал сделать руки, которые забирают дошики. Думал будут анимешние мускулистые руки. Хотя тут похожи на руки Россомахи.

Потом нашел такую руку.

Положение кисти и пальцев сразу навело на размышления о картине «Сотворение Адама»

Подкрутил слегка цветокор моих с дошираком фейсов, чтобы добавить атмосфЭры:

Разделил на 3 картинки и попытался их двигать при изменении экрана.

Потом экспортировал всю картинку целиком и получилось всё как надо.

Мысли в голове Юкассы, которая проверяет проект и включает мне оплату:

Прелоадер

Я сначала думал, что прелоадер не нужен и я буду просто замедлять пользователей попусту. Но с базой данных это не так, делают запросы и одну-две секунды сервис может загружать данные. Поэтому он нужен.

Сейчас это просто кружок и текст. Скучно.

Это изображение имеет пустой атрибут alt; его имя файла - screenshot-2025-10-21-at10.01.35@2x.png

Задумка в том, чтобы надпись внизу постепенно заполнялась. В одну загрузку одна надпись, в другую — другая.

Заполнение сделать через постепенное закрашивание серого цвета.

Это изображение имеет пустой атрибут alt; его имя файла - screenshot-2025-10-21-at10.02.24@2x.png

Казалось бы, ненужная фигня. Но каждая деталь делает проект особенным. Плюс человек не будет загружать страницы часто. Один раз загрузил — пошел работать. Там не будет постоянного обновления страницы.

Но надписи надо менять, чтобы это было смешно и в тему

Долго нейронка соображала, как сделать загрузку строку за строкой. Подробно всё описал.

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

Запуск и привлечение пользователей

Под стать проекту мне надо было записать первое видео. Я выбрал вертикальный формат, чтобы сразу раскидать по соц.сетям.

Идея пришла, когда засыпал и думаю: «Какая же крипота, а». Долго подступался. Вообще мне сложно дается создание видео. Раньше я записывал просто без камеры с пердящим звуком и мне было ок.

А теперь я стал более требователен с себе. Пожаловался друзьям в мужицкий чат и пошел делать. Думаю: «Ладно, какая бы х*йня не получилось, надо сделать».

С болью и мучением пошел делать.

Изначальный текст был такой

Сделал раскадровку (режиссер б**ть)

Было прям больно изнутри снимать, это вообще не моё, я от сторис давно отказался, потому что было как-то все неловко это делать. Но в процессе как-то захватило, было кринжово и мне понравилось. Покажу нарезку того, что было в процессе и какой получился результат.

Чтобы мне отвечал «клиент», пришлось сделать отдельного бота:

Бот на старте удаляет своё сообщение, пишет первое приветственное. Потом с вопросом, может ли отправить мне ТЗ на оценку.

Я могу отправить любое сообщение и он отправляет 5 сообщений с ТЗ.

И в конце пишет «Посчитайте-пожалуйста», чтобы это совпадало с названием проекта.

Когда я отправляю ему оценку, он пишет «Супер! Куда отправлять многа деньгаф?». Это перекликалось с видео.

Сообщения писал с помощью Claude, у него лучше всего получается имитировать человека.

Две проблемы перед запуском

1 проблема — флоу разработки.

Сейчас я локально делаю правку, делаю пуш в гитхаб и он сразу закидывает это на хостинг. На боевую версию сайта, которая доступна пользователям.

Проект сейчас по сути никому не известен. Я не закупал рекламу, не выкладывал рилсы. О нём знает человек 10. И пока все идет хорошо. Но когда будет больше людей, мне уже нельзя позволить себе сразу с локалки кидать обновления в боевую версию.

Нужна отдельная ветка, чтобы я изолированно от всех на сервере мог тестировать обновления или фиксы.

Написал редиректы на отдельную папку на хостинге, куда будет улеатать все файлы. Там полная копия.

Сначала я создаю обновления локально. После этого отправляю изменения в ветку dev, тестирую все на запасной базе данных, по сути на точно таком-же сайте. После проверок создаю pull request и отправляю изменения для всех пользователей.

Всегда хотел научиться так делать. Теперь можно смело разрабатывать и не бояться, что пользователи увидят какой-то хаос.

UPD через пару дней: стало сильно спокойнее работать. Можно сколько угодно вносить правки, реальные пользователи не видят и не словят кучу багов. Прекрасное ощущение.

2 проблема — бэкапы.

Пока проектов и пользователей мало, все окей. Но представьте, что пользователей будет 200 и у каждого 5 проектов. Это 1000 проектов. И что будет, если вдруг это пропадет? Пи*дец будет, что же ещё 😂

Поэтому надо чтобы база бэкапилась регулярно. Как оказалось, хостинг Beget делает снимки базы данные каждые 3−4 дня.

Прекрасная часть пет-проектов

Пет-проект это возможность прокачать те задачи, которые вы даже перед собой изначально не ставили. Вы хотели повеселиться или просто решить свою боль. И вот вы уже разбираетесь в регулярных оплатах Юкасса, ставите базу данные, разбираетесь с Github Actions, делаете резервные копии, снимаете рилсы и закупаете рекламы.

Когда я делал проект Додо-рифма, я тоже с этим столкнулся. По пути начали вылезать задачи, о которых я не догадывался и мне пришлось их решать. Этот проект научил меня многим вещам.

☝️ Делайте пет-проекты, пет-проекты — это хорошо.

Hotfix #2

Добавил в левую колонку количество оставшихся проектов.

Убрал старые уведомления. До этого были какие-то обрубки.

Теперь красотки ❤️

Месяц рилсов

Мне нужно сделать так, чтобы о проекте узнало как можно больше людей. Я хочу попробовать рилсы. Если что-то завирусится, это может сыграть ключевую роль.

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

Но проект требует, так что надо сделать. У меня два друга шарят побольше меня, поэтому я попросил одного из них помочь со съемкой.

Мне надо было только придумать идеи. Чтобы не страдать хуйней синдромом белого листа, я пошел на поклон к нейронкам.

Сами нейронки дали не так много идей, они дали якоря, за которые я цеплялся и развивал идеи. Нейронка даёт какую-то херню, а я вижу там какой-то формат, который можно развернуть иначе. В этом нейронки очень круто помогают.

Лучше всех справился Claude. Реально были классные мысли, которые натолкнули на идеи.

Потратил около 3 часов, чтобы найти, развить и расписать каждый из рилсов.

Потратили ещё пару часов на съемки.

Всего получилось снять 8 рилсов. Капец 😰 Их ещё же смонтировать надо.

Надо снять ещё штук 30 и выкладывать каждый день. Смотреть, есть ли результат и принимать решение о продолжении.

Мне важно чтобы рилсы были:

  • отбитые
  • простые
  • о болях фрилансеров

Хотелось бы конечно о боли оценки проектов, но придумать много смешного про это сложно.

Рилсы и мобильная версия

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

Получается все усилия, что были вложены в рилсы, превратятся в пыль. Пока решение такое: закупить рекламу во фрилансерских пабликах, чтобы проверить свою теорию рублем. Это дешевле, чем рилсы.

Заменяем лицо куряги на сына маминой подруги

Я попробовал зайти с рекламой в Telegram Ads, мне сказали убрать маты и курящего пацана, так что пришлось это порезать. Было больно, но что поделать. Нежные такие все.

За*бался → Задолбался
Хули → ****

А лого поменял так

План продвижения

  1. Выложить в своих каналах
  2. Закупиться в тг-каналах
  3. Зайти в Telegram Ads
  4. Попросить знакомых с каналами
  5. Снять видео на ютуб
  6. Выложиться на Product Radar
  7. Выложить на vc.ru и аналоги
  8. Снять рилсы на месяц

О результатах буду дописывать сюда по окончании рекламных компаний.

Возврат к мобильной версии

Я понял, что отсутствие мобильной версии все-таки может спугнуть. Трафик с мобильных устройств большой. Конечно, я считаю что оценку проекта делать удобнее на компьютере.

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

Есть и другие, кому удобно будет удобнее с мобильного оценить, посмотреть оценку, или что-то быстро подправить. Компьютер не всегда под рукой.

Потратил с нейронкой 2 часа времени и вместе нам удалось собрать сносную мобильную версию. В целом дизайн не является шикарным, потому что его делала нейронка под моим надзором. Но руки моей там нет.

Редизайн я сделаю в будущих обновлениях.

Ты это самое, заходи, если чё

посчитайте-пожалуйста.рф

Готовое решение Remake для Getcourse

В июне 2021 заканчивая очередной проект по оформлению Getcourse, я понял, что по факту мы делаем одно и тоже. Клиенты тратят от 300 000 рублей и от 2 месяцев работы, чтобы оформить геткурс. Надо было упростить жизнь всем. Клиентам меньше платить и быстрее получать результат, нам меньше кодить и дизайнить.

Тогда мы придумали Remake — готовое решение из 22 шаблонов страниц для геткурса. Оформление занимает 3 дня. Стоимость такого решения 12 900₽ в месяц

Мы заранее разработали весь дизайн, всё запрограммировали и настроили. Мой партнёр писал десятки файлов javascript и css-кода, чтобы всё работало корректно и решение можно было подключать на другие аккаунты.

Калькулятор себестоимости

Калькулятор позволяет рассчитать стоимость материалов. Спасибо, что используете его! Я рад, что он приносит вам пользу. Если вам нужен разработчик и дизайнер сайта, пишите в телеграм — @danya_postnov.

🔗 Ссылка на калькулятор

https://dev-postnov.ru/works/count-cost/

Последние изменения

Обновление. Январь 2025. Версия 3
  • Перегруппировал дизайн, сделал вспомогательные функции слева, материалы справа
  • Добавил выгрузку в текстовый файл
  • Добавил возможность отправить расчет в телеграм
  • Добавил предупреждение о том, что информация хранится в браузере
Обновление. Октябрь 2024. Версия 2

Я делал этот калькулятор в 2018 году. Прошло 6 лет. За это время я стал опытнее как дизайнер. Я заметил, что страницу калькулятора начали посещать гораздо чаще. За август 2024 страницу посетили 726 раз.

Я решил сделать его ещё удобнее. 2 октября 2024 обновил код и внес ряд обновлений:

  • При добавлении нового пункта сайт автоматически будет прокручивать к нему.
  • Обновил внешний вид, сейчас блоки с материалами выглядят опрятнее.
  • Раньше при первом посещении было пусто, надо было нажимать плюс. Теперь сразу по-умолчанию будет показываться первый блок материала.
  • Поменял слово «Пункты» на «Материалы».
  • Изменил тексты в полях, чтобы больше подходило под нишу бьюти.
  • Поменял «руб. на единицу» на «₽ на клиента».
  • Сделал сохранение в куки, если вы случайно закрыли вкладку — все сохранится.
  • Добавил кнопку «Добавить ещё», чтобы не надо было тянутся в правый верхний экран.
  • Сделал так, что при клике на поле, на мобильном будет включаться числовая клавиатура

Здесь описал подробнее: https://dev-postnov.ru/count-cost-update-2024/

Поддержать проект

Поблагодарить: https://t.me/daniilpostnov

Порекомендовать друзьям как дизайнера и разработчика.

Подписаться на личный канал или канал о фрилансе

Задонатить: 5536 9137 6097 0190

Как пользоваться?

  1. Нажмите на «+» или кнопку «Добавить ещё» для добавления нового материала
  2. Введите название материала
  3. Введите стоимость всей упаковки
  4. Введите обьем упаковки
  5. Введите количество, которое тратится на на одного клиента

Если вы не введете стоимость, объем и количество на одного клиента, сумма не рассчитается.

Для удаления материала нажмите значек корзины.

Справа показывается количество всех материалов и сумма затрат на одного клиента.

Как разрабатывался

Моя девушка — мастер маникюра, педикюра и депиляции. Она постоянно покупает какие-то новые инструменты, расходники для своих клиентов, с каждым днем их становится все больше 🙂

Иногда появляется необходимость считать себестоимость оказания одной услуги в каждом из трех направлений.

Каждый раз когда мы собирались делать это, мы брали листок, ручку и калькулятор. Выписывали каждый материал на листок и считали в какой бутылке или пачке объем, сколько используется и стоит.

Однажды я подумал: «Я программист или кто?» и решил автоматизировать это процесс.

В качестве практики я сделал для любимой мини-приложение для расчета себестоимости услуг, которым она конечно не пользуется 😂

Я тут понимаете ли стараюсь, а она до сих пор с листом и ручкой 🥶

Демо работы первого варианта.

Демо работы

Если вам нужен разработчик и дизайнер сайта, пишите в телеграм @danya_postnov

Исходный код

Старая версия

https://bitbucket.org/dev-postnov/calc-cost/src/master/

История изменений

2018

Калькулятор

2024

2025

Разработка проекта для «Додо Пицца»

Разработал проект для публикации додо-рифм.

Продумал структуру, задизайнил все экраны. Сделал вёрстку и сделал из неё SPA-приложение, которое работает безе перезагрузки.

Отзыв Федора Овчинникова

Федор рассказал о сайте на своей странице в Вконтакте.

Запись на стене Федора

Результат

1900+ пользователей и 324+ рифм за 9 дней.