votapil
Денис Липатов

Денис Липатов

Senior бэкэнд-разработчик · PHP / Laravel · LLM-функции в проде

Пишу бэкэнд на Laravel и встраиваю в него функции на LLM. В профессии с 2012 года, на Laravel с 2016-го. В этом году в одиночку сделал и выпустил VotaWallet, приложение для учёта трат в Сербии.

Белград, Сербия (CET) · удалённо с командами из Европы и США или переезд

Открыт к предложениям: senior бэкэнд

Беру проекты
VotaWallet: позиции чека разложены по категориям (демо-данные)
VotaWallet, мой продукт. Уже в Google Play.

Мой продукт

VotaWallet: от первого коммита до Google Play

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

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

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

Веб-версия, бот в Telegram и Android в Google Play. iOS на проверке в App Store.

Делаю один с февраля 2026 года: 1 200+ коммитов. На английском, русском и сербском. VotaWallet участвует в программе Google for Startups Cloud.

votawallet.app (откроется в новой вкладке)
VotaWallet: сканирование QR-кода на сербском чеке (демо-данные)
VotaWallet: позиции чека разложены по категориям (демо-данные)
Демо-данные

Стек

Laravel 13, PHP 8.4, Octane, Horizon, Reverb, Passport, Filament, PostgreSQL, Redis, Pest · Nuxt 4, Vue 3, Vuetify (Material Design 3), Capacitor · Python FastAPI + OpenCV · Terraform, Google Cloud Run, GitHub Actions.

Подключите своего AI-ассистента к кошельку

Пока приложение ждало проверки Apple, я добавил в него MCP-сервер. Подключите к своему кошельку Claude, ChatGPT или Gemini и спросите, куда ушли деньги. Считает сервер, модель только разговаривает.

  • 17 инструментов с авторизацией через OAuth 2.1. У AI свой узкий доступ, и отозвать его можно в один клик.
  • Итоги и пересчёт валют приходят с сервера, поэтому цифры сходятся с приложением.
  • Прежде чем добавить запись, сервер ищет возможные дубли. Если находит похожую, ничего не пишет, пока вы не подтвердите.
  • Всё, что добавил AI, помечено в приложении, а импорт от AI можно откатить.
Как это строилось

Код закрыт. Покажу его на созвоне.

Опыт

Работал на senior-позициях в продуктовых компаниях: последние годы полностью удалённо в GrowFood, до этого в Alyce с командой из США.

Для меня важно, как код читается и как работает. Аккуратная агрегация данных или кэш на своём месте - и день удался.

GrowFood · Senior бэкэнд-разработчик сентябрь 2022 - июнь 2026 · Полностью удалённо

Вёл направление R&D внутри команды разработки: обновления PHP и Laravel во всех сервисах, очереди на Redis, Kafka, Datadog и 10+ ботов в Telegram, которые работают в проде на одной платформе.

  • Свёл интеграции с маркетплейсами и розничными сетями, а ещё с Jira и 1С, за одну точку входа, которую с самого первого партнёра строил под нескольких. Второй и третий партнёры подключились без большой переделки.
  • Оптимизацию начинал с p90 времени ответа, дальше профайлер или EXPLAIN: убрал N+1-запросы, и ключевые эндпоинты стали быстрее в разы.
  • Выпустил функции на LLM в проде (боты поддержки, распознавание блюд на фото, самообучающийся классификатор тикетов) и настроил для команды разработку с AI: правила, скиллы и MCP-серверы, которые связали Cursor, Claude Code и Antigravity с внутренними базами знаний.
Alyce · Senior Laravel-разработчик сентябрь 2021 - июль 2022

B2B SaaS из Бостона. Делал новые функции и принимал архитектурные решения в коде, который уже работал в проде. С командой из США каждый день говорил по-английски.

Coalition Education Center (matetech.ru) · Senior PHP-разработчик июль 2019 - сентябрь 2021

Запустил matetech.ru с пустого репозитория: мультитенантная платформа обучения с дочерними компаниями и поддоменами. Построил систему кодогенерации и внедрил git-flow.

Media Target (pushex.io) · Бэкэнд-разработчик декабрь 2017 - июнь 2019

Построил pushex.io с нуля на Laravel, с микросервисами на Go и собственной моделью воркеров, чтобы персональные пуши доходили быстрее. Нанимал инженеров.

TriLan (diler.ru) · Бэкэнд-разработчик, фриланс август 2017 - декабрь 2017

Сделал diler.ru с нуля на Laravel и Vue, а к нему парсер каталогов, который под каждый сайт-источник настраивает менеджер без навыков программирования.

legko.com · Laravel-разработчик ноябрь 2016 - июнь 2017

С нуля запустил сервис: архитектура, база данных, админка, личный кабинет и тесты.

Начало карьеры · Руководитель проектов, PHP- и Android-разработчик 2012 - 2016

Опыт руководителя проектов пригодился в работе с AI: писать понятные спецификации и внимательно проверять, что выдала модель.

Три продукта запустил с пустого репозитория, вместе с архитектурой и базой данных: legko.com, diler.ru и matetech.ru.

Основной стек

PHP 8, Laravel, Go, MySQL, PostgreSQL, Redis, Kafka, ClickHouse, Docker, Kubernetes, Linux, REST API и OpenAPI.

Образование

Университет «Синергия», прикладная информатика (бакалавр). Учился и в НИЯУ МИФИ (компьютерные системы и технологии), в Летней компьютерной школе и в Мытищинской школе программистов.

Языки

Русский (родной), английский B2 (есть сертификат), сербский (базовый).

Открытый код и свои проекты

VotaCrudGenerator

Мой пакет для Laravel, который генерирует CRUD по схеме базы данных: 850+ установок на Packagist.

votaboilerplate

Заготовка на Laravel 13 и Nuxt 4 для проектов, которые будут писать вместе с AI-агентами. Собрана по опыту VotaWallet.

VotaMonad

Собрал за один день на Monad Blitz Belgrade в августе 2026: отслеживание товаров в блокчейне, где 100 000 кодов фиксируются в сети за две транзакции через один корень дерева Меркла.

Пивонатор

Акинатор, только для пива. Байесовский движок выбирает вопрос, который сильнее всего сужает выбор, а задаёт его бармен Брю. В базе больше 11 000 сортов, проект ещё в разработке.

В разработке

Как я работаю с AI

В VotaWallet модели пишут черновики и проверяют друг друга, а что попадёт в прод, решают тесты и моё ревью.

План от модели звучал убедительно

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

  1. Модель

    Долгий разговор с Gemini о том, как сделать MCP-сервер для VotaWallet.

  2. Я

    Каждое утверждение сверил с кодом, с продовой базой (только на чтение) и с документацией MCP-клиентов.

  3. Проверки

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

  4. Модель

    Вторая модель проверила план, ничего в нём не меняя: 25 замечаний.

  5. Я

    По каждому замечанию сначала смотрел код, потом принимал или отклонял.

  6. Проверки

    Сначала тесты, потом код: Claude Code писал его по задачам из спецификации.

  7. Я

    Выкатил и проверил вживую с Claude, ChatGPT и Gemini.

Четыре правила, которых я держусь

Сначала спецификация

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

Не принимаю код, который не могу объяснить

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

Вторая модель проверяет первую

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

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

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

Инструменты

Агенты и ассистенты

  • Claude Code (основной)
  • Cursor
  • Antigravity
  • Gemini CLI
  • NotebookLM
  • OpenClaw

Метод

  • Spec Kit (разработка от спецификации)
  • TDD на Pest
  • Хуки: тесты после каждой правки
  • Перекрёстное ревью разными моделями
  • Проверки через Playwright

MCP-серверы

  • VotaWallet (мой, для пользователей)
  • Postgres
  • Redis
  • Context7
  • Google Stitch
  • Playwright

Локальные модели

  • Parakeet (речь в текст)
  • Ollama (эмбеддинги)

Скиллы, которые я написал

  • Забрать баг-репорты из прода со скриншотами и логами консоли, починить, выкатить и ответить автору
  • Залить демо-данные и проверить, что они выглядят правдоподобно, прежде чем снимать скриншоты и видео к посту
  • Собрать черновик девлога из коммитов за день
  • Сгенерировать API-эндпоинт от схемы базы данных моим пакетом VotaCrudGenerator

73 скилла для агентов в репозитории VotaWallet. Большинство из них - готовые наборы от сообщества, которые я выбрал и настроил, а скиллы под сам проект написал я.

Агенты, которых я настроил для себя

VotaClaw

Личный ассистент

Живёт в одном чате в Telegram, раскладывает то, что я присылаю, по заметкам в Obsidian и следит за CI и ошибками VotaWallet в проде.

Правила, по которым он работает

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

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

Так это устроено. Настоящие сообщения остаются у меня.

Пришло
Голосовое
Что делает
Расшифровывает его локальной моделью без интернета и раскладывает как обычную текстовую заметку.
Ждёт меня
Ничего
Пришло
Афиша
Что делает
Вытаскивает название, дату, время и место и заводит заметку о событии.
Ждёт меня
«Добавить в календарь?»
Пришло
Свежие коммиты
Что делает
Пишет черновик поста для девлога моим голосом.
Ждёт меня
Публикация
Пришло
Ошибки VotaWallet
Что делает
Смотрит прогоны CI и логи ошибок в проде и собирает всё в одно сообщение.
Ждёт меня
Что чинить
Пришло
Страница с инструкциями внутри
Что делает
Пересказывает её, а команды со страницы так и остаются просто текстом.
Ждёт меня
Ничего не запускается
Пришло
Ничего не случилось
Что делает
Молчит.
Ждёт меня
Ничего

Агентный пайплайн для документов

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

Беру проекты

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

MCP-сервер для вашего продукта

Ваши клиенты подключают Claude, ChatGPT или Gemini к своим данным в вашем сервисе и дают ассистенту узкий доступ, который можно отозвать. Итоги считает ваш сервер, и цифры сходятся с тем, что видно в сервисе. Записи, добавленные AI, помечены, а импорт от AI отменяется одной кнопкой.

Где это видно: VotaWallet

Функции на LLM и боты в вашем продукте

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

Где это видно: GrowFood VotaClaw

MVP с пустого репозитория

Laravel и Nuxt с интерфейсом на Material Design, одна кодовая база для веба и мобильного приложения. Google Cloud поднимаю через Terraform, а CI работает с первого дня.

Для действующей команды настраиваю агентную разработку: правила, скиллы и MCP-серверы, как уже сделал для команды разработки в GrowFood, и добавляю проверку в CI для кода, который пишут агенты.

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

Кроме кода

D&D 5e

Волшебник школы Воплощения и монах-кенку, который режет руны.

Актёр

Снимался в кино: пять ролей, 2009-2013.

Кинопоиск

Белград

Живу здесь и хожу на местные стартап-события: на Startup World Cup Serbia был как основатель VotaWallet, на Monad Blitz Belgrade за один день собрал проект.

Ещё аниме и кино, когда-то фехтование, а пиво как данные живёт в Пивонаторе.