Overview
Company
Profile match
Impact
Conditions
Benefits
Hiring process
Similar jobs

Ddq

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

Обязанности:

  • Разработка и развитие модулей: каталог, карточки товаров, ценовые предложения, атрибуты и фильтры, кабинеты продавцов, биллинг
  • Развитие конвейера обработки товарных данных: парсеры прайсов и фидов, алгоритмы идентификации и сопоставления товаров
  • Оптимизация работы с базой: профилирование и переработка тяжёлых SQL-запросов, проектирование индексов и структур таблиц
  • Развитие REST API для админки и кабинета продавца
  • Развитие серверного рендеринга публичной витрины
  • Работа с фоновыми задачами: CLI-команды, Job-классы, очереди на Redis, воркеры
  • Интеграции с внешними системами: ЭДО (Диадок), Яндекс.Маркет, IndexNow, платёжные и почтовые сервисы
  • Написание миграций (Phinx) и тестов (PHPUnit)
  • Настройка и поддержка логирования, мониторинга и алертинга (Sentry)
  • Постепенное улучшение архитектуры и снижение техдолга - у нас нет иллюзий по поводу состояния некоторых частей системы
  • Участие в код-ревью, планировании задач и выработке архитектурных решений
  • Совместная работа с frontend-разработчиками и QA
Требования:
  • Опыт коммерческой разработки на PHP от 3 лет, уверенное знание PHP 8.x
  • Уверенная работа с MySQL: написание и оптимизация сложных запросов, чтение планов выполнения (EXPLAIN), индексы, блокировки, транзакции
  • Опыт работы с нативным SQL и PDO без ORM: подготовленные выражения, защита от инъекций, осознанная работа с транзакциями
  • Опыт работы с миграциями БД (Phinx, Doctrine Migrations или аналоги)
  • Опыт проектирования и разработки REST API
  • Опыт работы с Redis (кэш, сессии, очереди)
  • Опыт написания CLI-команд и фоновых воркеров, понимание особенностей долгоживущих PHP-процессов: потребление памяти, идемпотентность, поведение при падениях
  • Опыт обработки больших объёмов данных: пакетная обработка, потоковое чтение файлов, контроль памяти
  • Опыт реализации интеграций по HTTP (Guzzle или аналоги), работа с нестабильными внешними API: таймауты, ретраи, обработка ошибок
  • Опыт написания unit- и функциональных тестов (PHPUnit) Знание Composer, Git
  • Умение читать и анализировать логи backend-сервисов
  • Способность разбираться в чужом коде и дорабатывать существующую систему без полного переписывания
  • Умение самостоятельно разбираться в сложных задачах, принимать решения и аргументировать выбранный подход
  • Ответственное отношение к архитектуре, качеству кода и долгосрочной поддержке продукта

Плюсом будет

  • Опыт работы с агрегаторами, маркетплейсами, крупными каталогами или e-commerce
  • Опыт написания парсеров прайс-листов и товарных фидов (YML, XML, XLSX, CSV), задач сопоставления и дедупликации товаров
  • Опыт реализации фасетного поиска и фильтрации по большому числу параметров
  • Опыт постепенного рефакторинга легаси: выделение слоя доступа к данным, снижение связанности, покрытие тестами
  • Знание Doctrine DBAL/ORM - рассматриваем поэтапное внедрение
  • Опыт работы со статическим анализом (Psalm, PHPStan)
  • Опыт работы с очередями (RabbitMQ, Kafka) - на случай развития текущей очереди на Redis
  • Опыт настройки CI/CD (GitHub Actions), Docker
  • Опыт работы с системами мониторинга (Grafana, Prometheus, Sentry)
  • Понимание SEO для крупных каталогов и серверного рендеринга
  • Опыт работы с мультитенантными платформами

О проекте :

Costo.ru - агрегатор интернет-магазинов и маркетплейсов России: каталог товаров, сравнение цен от десятков магазинов, характеристики, рейтинги и отзывы.

Под капотом - собственная платформа на PHP 8.3, на которой работает не один проект: помимо Costo на том же движке живёт второй бренд со своей базой, своим сервером и своей темой оформления. Каждое изменение в ядре затрагивает оба бизнеса - это накладывает отпечаток на то, как мы работаем.

Проект состоит из трёх приложений:

costo.ru - публичная витрина, рендерится на сервере (PHP + собственный шаблонизатор)

admin.costo.ru - административная панель (Vue 3 SPA)

seller.costo.ru - кабинет продавца (Vue 3 SPA)

Backend обслуживает все три и отвечает как за HTML-рендеринг витрины, так и за REST API для админок.

Чем интересна задача

Конвейер товарных данных. Магазины присылают прайс-листы и фиды в разных форматах (XLSX, CSV, XML/YML). Их надо распарсить, идентифицировать товары, сопоставить с карточками каталога, собрать ценовые предложения, отсеять мусор и ошибки, обновить цены и наличие. Всё это - регулярно, по расписанию, на больших объёмах. Задача сопоставления товаров нетривиальная и никогда не бывает «доделанной».

Фасетный поиск. В каталоге 3000+ атрибутов в 23 разделах, семь типов значений (булевы, числовые с единицами измерения, строки с размерами вида 500x100x200, даты), пять типов фильтров (чекбоксы, радио, range, больше/меньше, исключение) и их комбинации через И/ИЛИ. Всё это работает на нативном SQL и должно отвечать быстро.

SEO как инженерная задача. Витрина рендерится на сервере, поэтому скорость ответа backend напрямую влияет на позиции. Плюс ЧПУ-ссылки, sitemap, IndexNow, генерация SEO-полей, виртуальные категории, теги с

динамическими подборками по сохранённым фильтрам.

Честно о проекте

Мы не будем делать вид, что у нас идеальный код.

Архитектура самобытная. Это не Symfony и не Laravel, а собственный фреймворк поверх FastRoute, PHP-DI и компонентов Symfony. Роутинг автоматический, по файловой системе: URL /api/admin/seo/read соответствует файлу app/modules/admin/seo/entry/read-api.php . У модуля три типа точек входа: -web (HTML), -api (JSON) и -inner

(вызов из других модулей через роутер). Ядро приложения - Singleton + Service Locator. ORM нет, весь SQL нативный. Шаблонизатор публички - собственный, со своим синтаксисом.

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

При этом инфраструктура зрелая. Миграции и сиды на Phinx, unit- и acceptance-тесты с фабриками на все основные сущности, статический анализ (Psalm, PHPCS, PHPMD), Sentry, GitHub Actions с раздельными пайплайнами под production, staging и test, пять окружений с изолированными базами, включая песочницы для экспериментов с массовыми обновлениями данных.

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

Для нас особенно важно

Мы ищем разработчика, который не просто быстро пишет код, а понимает, как этот код будет жить в продукте

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

«переписать всё с нуля», а последовательно улучшает её, не ломая работающий функционал, и понимает цену

изменения, которое затрагивает два бизнеса одновременно.

Мы нормально относимся к использованию AI-инструментов как к вспомогательным. Но нам принципиально

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

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

Наш стек

Язык: PHP 8.3

Фреймворк: собственный - FastRoute, PHP-DI, компоненты Symfony (String, Mailer, Translation)

База данных: MySQL 8, PDO и mysqli (нативный SQL), миграции и сиды - Phinx

Кэш, сессии, очереди: Redis, собственная реализация очередей на Job-классах, воркеры

Интеграции: Guzzle, Диадок (ЭДО, OpenID Connect), Яндекс.Маркет, IndexNow

Работа с данными: PhpSpreadsheet, SimpleXLSX, opis/json-schema

Изображения: Imagick

Качество кода: PHPUnit, Psalm, PHP_CodeSniffer, PHPMD

Мониторинг: Sentry

Инфраструктура: Ubuntu, nginx, Selectel, GitHub Actions, раздельные контуры (production / staging / test)

Frontend (для контекста): Vue 3 + Ant Design Vue в админках, серверные шаблоны + Tailwind на витрине

Формат работы

Мы работаем в офисе по понедельникам и пятницам, ориентировочно с 10:00 до 17:30. Офис находится в собственности компании - это не арендное пространство. Мы постарались сделать его максимально комфортным и уютным: скорее он напоминает небольшой бутик, чем классический офис.

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

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

Recommended for you based on this role

Similar stack
Same company
In your city
$28k per year (net) • Remote • 3+ years exp • Saint Petersburg
JavaScript
PHP
TypeScript
Node JS
Node JS
Axios
Databases
MySQL
Redis
Frontend
Ant Design
ApexCharts
ESLint
Less
npm
Pinia
Prettier
Sass
Tailwind CSS
Vite
Vue Router
Vue.js
Yup
React.js
DevOps
CI/CD
Git
GitHub Actions
Rest API
QA
Cypress
Playwright
Vitest
Apply
Career impact
Discover how this job can transform your career
Get a personal career forecast for this job - salary uplift, next-level role, skill boost and a 3-year financial impact, all calculated from your profile.
Personal salary uplift vs. your current pay
Your 3-year career trajectory
Skills you will level up in this role
3-year financial impact in dollars
Create free account
Free forever • Less than a minute • No credit card

Work setup

Location
Saint Petersburg
Remote work
Remote (Russia)

Compensation

Salary
$34k per year (net)