Флаг деплоя снёс базу знаний
К синхронизации добавили --delete, чтобы сервер зеркалил репозиторий. Стёрся файл с ценами диагностики, и ИИ-менеджер полдня работал без них.
Я не пишу код. Я сдаю системы. Пропущенный звонок — это не статистика, это клиент, который уже позвонил другим, и я строю то, что ловит его первым.
Это не список пожеланий. Каждая строка ниже — то, что я делал на системе, которая работает в проде прямо сейчас. Поэтому одного человека хватило на шесть систем.
Python 3.11, async SQLAlchemy поверх PostgreSQL, планировщик на 21 задачу, поллеры, очереди, конечные автоматы и скучная аккуратность вокруг денег и времени.
Промпты, которые переживают встречу с реальностью, структурированный вывод, харнесс оценки, вторая модель-судья, стражи, запасная модель, плюс зрение и голос.
Next.js 15 с TypeScript, Prisma и Tailwind для кассы; серверные панели с живым обновлением для цеха; лендинг на GSAP и доска на телевизор.
Docker Compose, nginx с HTTPS, Linux VPS, бэкапы наружу с отрепетированным восстановлением, cron, сканер секретов на pre-commit и выкатка, отказывающая на грязном дереве.
Решать, чего не строить. Посчитать кампанию до написания отправщика, вырубить дашборд, отдававший данные, выбрать, где человек обязан остаться в цепочке.
В каждом репозитории своя карта и свои грабли. 63 состязательных теста на одноразовой базе, офлайн-наборы тестов и паритет переводов, который держит падающая сборка.
Единственный разработчик всего, на чём работает сервис: поллер телефонии превращает каждый пропущенный звонок в долг с эскалацией и SLA, Gemini расшифровывает разговоры, судья Claude закрывает долги по смыслу, «Марк» отвечает клиентам в пяти каналах, веб-панель держит работу цеха, чекап машины на 79 пунктов идёт на четырёх языках, а касса сделана на Next.js.
Проекты под ключ вне автосервиса: польский лендинг акции со своей сборкой без зависимостей, приём заявок за ним и рассылка по ЕС для производителя деревянного декора, которая началась не с кода, а с расчётной модели.
Учусь на программиста со специализацией по искусственному интеллекту. То, что читаю вечером, обычно оказывается в проде в том же месяце: судья на модели, харнесс оценки и работа с изображениями начинались как учебное любопытство, а закончились ответами реальным клиентам.
Пять лет учился. Три месяца — доказывал. Системное обучение программированию и информатике, пройденное до конца. Оттуда неяркая половина профессии: алгоритмы, базы данных и привычка доводить начатое, а не бросать на самом интересном месте.
Девять работ: шесть в проде, остальные в тесте или работают как внутренние инструменты. Откройте строку — или спросите Марка.
Опрашивает телефонию каждые 30 секунд. Завершённый пропущенный звонок становится долгом с ответственным, SLA и эскалацией — менеджер, админ, владелец — пока кто-нибудь не перезвонит. Долг закрывается по сказанному: Gemini расшифровывает, судья Claude выносит вердикт с цитатой.
Марк ведёт почту, Telegram, Instagram, Facebook и WhatsApp на одном ядре: доводит клиента до записи и кладёт лид в ту же очередь, что и заявки с сайта. Называть цены и бронировать время ему нельзя — страж переписывает ответ. Мозг — Claude Opus 5, при пустом балансе подхватывает Gemini, а не молчание.
Все переписки клиента сходятся в одну ленту, сшитую по номеру телефона. Паспорт долга показывает, что понял ИИ, рядом с полной расшифровкой. ТВ-доска висит в цеху: свежие перезвоны сверху, недозвон исчезает на час, чтобы мёртвый номер не набирали двадцать раз.
Механик фотографирует номер и VIN — оба сверяются с нарядом — и проходит 79 пунктов, фото обязательно на всём жёлтом и красном. Работа считается по прайсу владельца, детали подбираются по VIN, к ценам поставщика идёт наценка, выведенная из 136 реальных пар «закупка — продажа». Отчёт уходит клиенту только после того, как его утвердил человек.
В проде с июля. Один бот ведёт ежедневный опрос, экзамен на пятьдесят вопросов с дедлайном в воскресенье и кнопку «спросить регламент». Второй показывает статистику по людям и рейтинг месяца. Третий снимает копию базы в 03:30. Все трое следят друг за другом по сигналам жизни.
Пошаговый помощник на стойке: что спросить, сколько сдачи, чек или фактура, в конце список самопроверки. Схема расчёта — граф в конфиге, который проверяется при старте: битый конфиг не даст контейнеру подняться, вместо того чтобы подвесить расчёт у кассы. Шаг расчёта неизменяем, и это держит триггер в базе, а не договорённость в команде.
Польская страница акции для направления импорта машин: тексты строго по брифу, калькулятор сверен с основным сайтом, форма уходит в систему колл-центра, правила в HTML и PDF. Сборка — чистый Python без зависимостей: всё встраивает внутрь, делает WebP, рисует превью и PDF через headless Chrome и доходит до релиза через проверки.
Пиксельная сцена, где каждая живая сессия и агент — персонаж за столом. Сервер — только стандартная библиотека Python, читает состояние прямо с диска и никуда ничего не пишет. Всё, что уходит из процесса, проходит через маску секретов.
Производителю нужны клиенты в ЕС. Вместо того чтобы начать с кода, я собрал кампанию как модель в таблице — кому пишем, сколько стоит тест, сколько он идёт, что разрешает закон — и два конкретных варианта. Аудиторию взял из OpenStreetMap: 2 881 магазин декора, 6 751 отель и 11 730 ресторанов во Франции с пригодным адресом.
Шесть вещей, которые я уже построил от начала до конца для настоящей компании — это не список услуг, а список того, что уже работает.
Почта, Telegram, Instagram, Facebook и WhatsApp на одном ядре: ведёт диалог, собирает нужное, не называет лишнего и передаёт человеку телефон клиента.
Каждый пропущенный звонок, заявка или лид становится задачей с ответственным, SLA и эскалацией. Напоминает, пока дело не сделано, и закрывается по смыслу разговора, а не по галочке.
Все каналы в одной ленте по клиенту, доска на стену, отчёты, отвечающие на вопрос руководителя одним экраном, и роли, чтобы лишний человек не видел базу клиентов.
Бот-чек-лист для людей с грязными руками: обязательные фото, замеры с настоящими порогами, четыре языка и готовый отчёт клиенту, который сам считает цену по вашему прайсу.
Целые числа вместо float, шаги расчёта, которые запрещает менять сама база, и конфиг, проверяемый на старте: ошибка ломает деплой, а не расчёт у стойки.
Телефония, CRM, почта, каталоги поставщиков, базы деталей, мессенджеры. Чужое API — моя обычная работа, и склейка переживает их падения.
Шесть правил, каждое написано в день, когда что-то сломалось в проде. Обычно эту часть прячут — а именно она и говорит, как человек работает.
К синхронизации добавили --delete, чтобы сервер зеркалил репозиторий. Стёрся файл с ценами диагностики, и ИИ-менеджер полдня работал без них.
Открытым текстом в docker-compose.yml, а значит во всех коммитах. Платное сканирование секретов на этом плане недоступно.
Ранний дашборд показывал телефоны клиентов любому, у кого есть адрес. Удобно и неоправдываемо.
Минимальная толщина диска у каждой машины своя, поэтому одно фиксированное число пропускало диск 22 мм при минимуме 26.
Два поллера на одном токене — и боевой бот теряет апдейты. А в локальном .env лежали боевые токены.
Без зависимостей часть файлов молча пропускала проверки. Локально зелено, в образе сломано.
Четыре шага без сюрпризов. Остановиться можно после любого, и всё построенное остаётся у вас.
Вы рассказываете, где утекают деньги — пропущенные звонки, медленные ответы, ручная бумажная работа. Я задаю скучные вопросы. Без презентаций и продаж.
Вы получаете, что я построил бы первым, сколько это стоит, сколько займёт — и чего не стал бы делать вовсе, с причиной. Последний пункт экономит больше, чем первые три.
Не демо и не прототип: то, чем ваши люди пользуются в настоящую смену, пока остальное ещё строится. Если идея неверна, мы узнаем это рано и дёшево.
Репозиторий, доступы к серверу, документация, бэкапы с отрепетированным восстановлением и обученная команда — на тех экранах, которыми они реально пользуются. Поддержка потом по желанию, а не поводок.
Нажмите — ответит Марк.
Обычно он продаёт чужое. Сегодня продаёт меня. Марк ведёт клиентов в пяти каналах и доводит до заявки. Ядро не привязано к отрасли — его ставят туда, где клиенты теряются в переписке. Здесь он отвечает на вопросы обо мне, вживую.
Чат защищён Cloudflare Turnstile (приватность)
Опишите задачу в двух предложениях — «мы где-то теряем клиентов» уже достаточно — и я пришлю в ответ, как бы её построил: что система делает в первый день, сколько это по времени и чего я делать не стал бы вовсе. Бесплатно и без созвонов.