hiregora
19 марта 2026 г. · 3 мин чтения

С чего я начал писать систему доставки


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


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

Домен не наш. Сервер не наш. Вообще ничего не наше.

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


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


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

Я просто пошёл в лоб.


Я открыл Claude, загрузил туда кучу скриншотов — витрину сайта, интерфейсы, всё, что видел — и своим языком объяснил, что я хочу получить. Без формальностей, как есть.


После этого я пошёл в Claude Code и дал ему логин и пароль от админки. Он запустился, поднял браузер через Puppeteer и довольно долго что-то делал — ходил по страницам, перехватывал сетевые запросы. В итоге он нашёл все API endpoints.


Если перевести на человеческий язык — он подобрал ключи ко всей бизнес-логике проекта.

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


У меня появилась возможность не просто «посмотреть», как это работает, а вытащить базу данных и разобрать систему целиком. Я попросил его всё это проанализировать и загрузил этот анализ обратно в Claude.


Дальше началось самое интересное.

Claude сам предложил, как строить работу. Он сказал: создай проект и загрузи туда всё — скриншоты витрины, админки, техническую информацию по API, весь анализ. То есть собрать единое «знание проекта».


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

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


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


Первые дни прошли без проблем. Потом начались нюансы.

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


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


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

И в какой-то момент я поймал себя на простой мысли: если сейчас это всё развалится — я не соберу это обратно.


И в этот момент начинается неприятное ощущение.

Ты уже слишком далеко зашёл, чтобы остановиться.

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

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

И единственное, что у тебя есть — это ощущение, что оно пока не развалилось.

И вот на этом ощущении ты продолжаешь идти дальше.


Где-то к десятому дню стало заметно, что я начинаю уходить от первоначального плана. Пришлось лезть обратно в «знание проекта» и править его, чтобы он меньше галлюцинировал.


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


Так прошли 30 дней.

По факту был написан весь проект — фронт, бэк, логика. Что там внутри — я не имел ни малейшего понятия.


Дальше всё просто: домен, сервер, деплой. Я дал команду — выложить и запустить.

И оно запустилось.


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

И вот тут началась реальность.

Работало почти ничего. Но сайт был.


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


Дальше — баги. Много. Очень много.

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

Но постепенно видно, что багов становится меньше.


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


Ты зовёшь человека. Он заходит. Регистрируется. Делает заказ.

И цепочка проходит: заказ создан, диспетчер получил, водитель доставил, всё зафиксировалось в системе.

И ты сидишь и не веришь.


Дальше — переход.

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

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

Это состояние сложно описать.


После этого начался настоящий прод.

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


К чести моего товарища — он ни разу не надавил. Просто ждал.

А когда ему предложили вернуться назад, он ответил очень просто: заплатите сороковочку за проект и платите по пять в месяц — и мы вернёмся.

На этом разговор закончился.


И вот в этот момент стало окончательно понятно:

это вообще не про код. и не про нейронки.

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

Полный стек проекта. Pharmacy Delivery.

Я не знал, что именно написал.

Спустя пару недель после запуска ко мне прилетела дочка. Мы пошли тусоваться, она что-то про меня сказала, и один парень — айтишник — вышел со мной покурить.

Начал спрашивать:

— на чём пишешь? — какой стек? — как устроено?

Я сказал честно: не знаю.

Достал телефон. Спросил у Claude Code — на чём я вообще пишу?

Ответ меня остановил.

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

Ниже — то, что он мне выдал.

Бэкенд NestJS 10 · TypeORM · PostgreSQL 16 · Redis 7 Auth: JWT + Passport + bcrypt WebSocket: Socket.IO + Redis adapter Валидация, rate limiting, cron, Swagger

33 модуля · 35 сущностей · ~150 эндпоинтов

Интеграции Email — Brevo SMS — свой Android-шлюз WhatsApp — мультинодовый шлюз Push — Pushover Crypto — BTC, ETH, USDT, USDC, TRC-20

Фронтенд Витрина — Next.js 14, SSR, en/ru/es ️ Админка — React 18 + Zustand Мини-аппы (диспетчер, водитель, продажи) — React 19

Telegram-боты — 3 штуки Python 3.12 · aiogram · asyncpg · Redis

Инфраструктура Docker multi-stage · GitHub Actions CI/CD · GHCR nginx (SSL, WebSocket, gzip) · Cloudflare 10+ сервисов в docker-compose

Я это не «выбирал». Я это не «проектировал». Я даже половину этих слов не знал.

Я просто решал задачу.

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

Это не значит, что теперь можно ничего не понимать.

Это значит другое:

вход больше не там, где его раньше рисовали.

Если раньше нужно было сначала выучить стек, а потом что-то делать —

то сейчас ты можешь сначала сделать,

а потом разбираться, что именно ты сделал.