На полностью удалённую постоянную работу ищем опытного PHP-разработчика.
Задача: развитие сервиса публикации коллекционных лотов в Ozon, Wildberries, Яндекс Маркет и Монетник. Код пишет Claude, а вы решаете, каким ему быть.
В двух словах
Проект забирает коллекционные лоты (монеты, банкноты, значки) из источников и публикует их на Ozon, Wildberries, Яндекс Маркете и Монетнике. Один лот становится карточками на нескольких площадках сразу, и все они должны жить синхронно. Лот продали в источнике — остаток везде уходит в ноль. Лот подешевел — меняется цена. Пришёл заказ — его нужно собрать, отгрузить и провести по деньгам.
Ошибка здесь стоит дорого и видна не сразу. Площадка может ответить «импорт прошёл успешно» и отклонить карточку в личном кабинете. За запрещённый товар магазин получает штраф или блокировку, поэтому есть стоп-лист который работает по принципу fail-closed: всё, что система не может распознать, не публикуется.
Проект начался в мае 2026 года. Он уже работает в бою: публикует карточки, отправляет остатки и цены, принимает заказы и возвраты, а у продавцов есть свой кабинет. То есть проект уже даёт реальную выручку и прибыль.
Главное условие: код пишется только через Claude
Весь код проекта пишет Claude Code, агент Anthropic. Ручного кода в IDE нет, и это осознанное решение, а не эксперимент.
Что это значит на практике:
- Вы ставите задачу, проектируете решение и проверяете результат. Агент пишет код, тесты, миграции и документацию. Вы читаете дифф, находите, где агент ошибся, и не пропускаете ошибку дальше.
- Стандарт команды — это файлы правил в репозитории (CLAUDE.md). Если агент повторяет одну и ту же ошибку, правим правило, а не только код. Каждое правило записано с датой и причиной.
- Без зелёного гейта коммита нет. Перед каждым коммитом проходят PHPStan, PHP_CodeSniffer и PHPUnit. Перед релизом крупной фичи по диффу ветки проходит отдельный агент-ревьюер, и его замечания закрываются до сквоша.
- Писать код руками вы не будете. Если это для вас главное удовольствие в профессии, эта вакансия вам, скорее всего, не подойдёт. А если интереснее проектировать, ревьюить и сразу выпускать результат, она как раз для вас.
Опыт работы с Claude Code или другим агентом на реальном проекте — большой плюс. Готовность работать только так — обязательное условие.
Объём данных: сейчас
Лотов в базе~38 000, опубликованных карточек~35 500
Фото~139 000 файлов, 32 ГБ
Ограничения внешних систем здесь важнее железа. API источника отдаёт список лотов целиком, без пагинации, а детали лота — по одному запросу в секунду. Поэтому полная синхронизация деталей 20 000 лотов идёт около 5,5 часа и почти не укладывается в собственный период. Задачи такого рода решаются расписанием, лимитерами и идемпотентностью, а не покупкой сервера помощнее.
Объём данных: куда растём
- Лоты: прирост ускоряется. В августе добавилось 7 800 лотов, в сентябре 11 900, в октябре 17 200.
- Фото: от 300 тысяч до 1 миллиона. Сейчас их 139 тысяч, и каждый месяц прибавляется 55–65 тысяч. В темпе октября 300 тысяч будет через три месяца, миллион — примерно через год. Под фото на сервере 200 ГБ, а миллион кадров займёт около 230 ГБ, поэтому на очереди отдельный поддомен. Платные ИИ-шлюзы на таком объёме невыгодны на два порядка, поэтому кадры уже обрабатывает наш собственный ML-сервис.
- Площадки: Ozon, Wildberries, Яндекс Маркет, Монетник. У каждой свой API и свои правила карточки. У одной из площадок нет ни списка товаров, ни пакетных методов, поэтому идемпотентность и восстановление после потерянного ответа целиком на нашей стороне.
Стек
Бэкенд
- PHP 8.5: асимметричная видимость private(set), array_find / array_any, final readonly сервисы, типизированные константы.
- Symfony 8.0: Messenger, Scheduler, RateLimiter, Lock, Security, HttpClient, ObjectMapper, Serializer, Validator.
- Doctrine ORM 3.6 и Migrations, все запросы строятся через QueryBuilder.
- PostgreSQL 18: ltree для дерева категорий, jsonb для payload карточек, журнал изменений на триггерах.
- RabbitMQ 4 (очередь на каждый обработчик) и Redis 8.
- OpenAPI-контракт выгружается из кода (NelmioApiDoc), фронтенд генерирует по нему клиент. Два API: админка и кабинет продавца.
- dompdf (лист подбора), poppler (PDF-этикетки Ozon превращаются в картинку для телефона).
Фронтенд (отдельный репозиторий):
Vue 3, Quasar 2, TypeScript, Vite, pnpm, клиент генерирует orval, моки — MSW, графики — echarts. Две SPA: админка и кабинет продавца.
Вокруг
- image-processor: свой ML-сервис на FastAPI и onnxruntime, server side ИИ модель обработки фото.
- ИИ-шлюзы: DIT.ai, OpenAI, Gemini — разбор названий и обработка кадра.
- Внешние API: API площадок (Ozon Seller API и другие).
- Инфраструктура: Docker Compose для dev и prod, Caddy со строгим CSP, GitLab CI (сборка и деплой), рецепты just.
Качество
- PHPStan, PHP_CodeSniffer, PHP CS Fixer.
- PHPUnit: наборы Unit и Integration, интеграционные тесты идут на настоящем PostgreSQL.
- Тестов больше, чем кода: ~61 тыс. строк в src/ и ~67 тыс. в tests/.
Что уже ждёт в бэклоге
- Публикация товаров в новые площадки: Wildberries, Yandex Market, Monetnik.ru. У каждой площадки свои карточки, фото и остатки.
- Хранилище для миллионов фото: отдельный static-поддомен.
- Импорт заказов realFBS через СДЭК: отгрузка, этикетка, акт, ПВЗ.
- Модерация карточек Ozon после импорта и ежедневная сверка «наши строки ↔ товары Ozon».
- Финансы: начисления, прибыль заказа, отчёты.
- ИИ-разбор лота одним вызовом: название, модель, описание.
- Перевод оставшегося кода на новую раскладку слоёв.
Кого ищем
Обязательно
- Уверенно знаете PHP 8 и Symfony, работали с Doctrine. Можете прочитать дифф агента и аргументированно его отклонить.
- Знаете PostgreSQL: индексы, планы запросов, jsonb, транзакции.
- Понимаете очереди: идемпотентность, повторы, порядок сообщений, память долгоживущих воркеров.
- Готовы работать через Claude Code.
- Точно пишете по-русски: правила, документация и коммиты на русском.
Будет плюсом
- Работали с API маркетплейсов (Ozon, Wildberries, Яндекс Маркет), FBS / realFBS.
- Работали с Claude Code или другим агентом на живом проекте.
- Знаете Docker, GitLab CI, Caddy или nginx.
- Писали на Vue 3 / TypeScript, чтобы читать фронтенд.
Чего не будет
- Десятилетнего легаси. Проекту полгода, PHP 8.5 и Symfony 8 с первого дня.
- Митингов ради митингов: решения и их причины записаны в репозитории.
Преимущества работы у нас:
- Удалённая работа (при желании с вашей стороны возможна работа в офисе г. Москва, м. Дмитровская);
- Есть отлаженный gitflow с CI и автотестами;
- Можно начать с еженедельной оплаты;
- Свободный график работы, но не менее 40ч в неделю;
- Бизнес постоянно развивается: ассортимент, новые товарные категории и новые каналы продаж регулярно добавляются;
- Стабильный рост: и в пандемию и в последние годы мы выросли по прибыли, платим вовремя все зарплаты, премии, вкладываемся в обучение и развитие команды;
- Оплата необходимых онлайн-сервисов для работы;
- Корпоративные подарки от компании на годовщину работы.