все проекты / кейс 01
PandaSale — миграция магазина на новый движок

Задача
Магазин работает с 2013 года, и сайт всё это время жил на OpenCart 1.5.4.1: движок без поддержки, привязка товаров к МойСклад по артикулу не работала для модификаций, картинки лежали на диске сервера без оптимизации. Переехать нужно было без потери SEO-позиций — ~3000 товаров и ~3000 заказов в истории.
Решение
Перенос на OpenCart 3.0.5 на чистом сервере (Nginx + PHP-FPM 8.3, MariaDB) с кастомной темой и тремя модулями: хранение картинок в Yandex Object Storage с генерацией WebP трёх размеров при сохранении товара; односторонняя синхронизация остатков и цен из МойСклад по external code — включая комплекты со связанными остатками, где продажа бустера списывает дисплей; 301-редиректы со старых URL. Оплата — Ozon Pay, фискализация 54-ФЗ на его стороне.
Результат
Новый магазин открыт на pandasale.ru: ~3000 игр в наличии, доставка по Ростову за 2 часа, бесплатная доставка от 5000 ₽ по всей России.
// до → после
Как мы это делали
Начали с дизайна: собрали макет магазина — главная, каталог, карточка товара, оформление заказа — и согласовали его целиком, до строчки кода. Дальше на основе макета написали кастомную тему OpenCart 3 с нуля, а не подгоняли покупной шаблон: так в вёрстке нет чужого наследия, а скорость страниц не упирается в лишние библиотеки.
Параллельно переносили данные: около 3000 товаров и 3000 заказов из OpenCart 1.5.4.1, с сохранением URL и 301-редиректами со старых адресов, чтобы не потерять позиции в поиске.
Затем закрыли модулями то, чего в OpenCart нет из коробки. Каждый написан под этот магазин и работает в проде.
Модули, которые мы для него написали
- Синхронизация с МойСклад — односторонняя выгрузка остатков и цен по external code. Главное отличие от типовых решений: правильно работают модификации и комплекты со связанными остатками, когда продажа бустера списывает дисплей.
- Облачные изображения — картинки уезжают в Yandex Object Storage, при сохранении товара автоматически создаются WebP трёх размеров. Диск сервера больше не забивается, страницы грузятся быстрее.
- Умный AJAX-фильтр — подбор по параметрам на странице категории без перезагрузки: число игроков, возраст, время партии, цена.
- Поиск с морфологией и ИИ — ищет с учётом словоформ и опечаток, понимает запросы вроде «игра для компании на вечер».
- Маркетплейсы — выгрузка каталога в Ozon и Яндекс Маркет и подтягивание заказов обратно в админку.
- Экспорт в Avito — генерация фида по требованиям площадки.
- AI-описания товаров — черновики описаний для карточек, чтобы не писать три тысячи текстов руками.
- Парсер поставщиков — забирает карточки товаров с сайтов поставщиков и раскладывает по полям каталога.
- Правила игр — PDF-правила к каждому товару, файлы лежат в облаке и отдаются на карточке.
- Хиты и новинки — витрины на главной, которые собираются автоматически по продажам и дате добавления.
- Определение города — подставляет город покупателя и корректные условия доставки.
- Аналитика посетителей — своя статистика в админке, без внешних счётчиков.
- Мульти-доставка — один метод доставки, отдающий несколько вариантов с разными сроками и ценой.
- Накопительная скидка — постоянная скидка, которая растёт от суммы покупок.
- Менеджер изображений и менеджер категорий — инструменты для админки: массовая работа с картинками и визуальная пересборка дерева категорий.
Что это дало
Магазин работает на поддерживаемом движке, товары и остатки приезжают из МойСклад автоматически, а редактор занимается контентом, а не ручным экспортом по ночам.