Клиент - белорусский магазин цифровых товаров PlayStation. Пользователи покупают игры и их издания, подписки PS Plus и EA Play, внутриигровую валюту и пополнение кошелька PSN, платят в белорусских рублях, товары выдаются через зарубежные регионы PS Store - Украина, Турция, Индия, Польша.
Цель - перенести продажи в Telegram и получить полноценный e-commerce внутри мессенджера: Mini App на React.js (Redux Toolkit, Vite, Tailwind CSS), backend на Nest.js (Node.js, TypeScript) с PostgreSQL и Prisma, отдельный парсер PS Store на Node.js, админ-панель на React.js и инфраструктура в Docker на AWS.
Ключевые требования:
- каталог на десятки тысяч позиций с актуальными ценами, скидками и метаданными из PS Store - без ручного ведения базы;
- очереди и фоновые задачи на Redis + BullMQ: парсинг, рассылки, автоотмена заказов;
- онлайн-оплата через эквайринг и ручные переводы по карте с подтверждением чеков;
- автоматизация выдачи: пулы кодов-ваучеров по регионам и ручная выдача через аккаунты;
- админ-панель, из которой управляется весь бизнес: цены, заказы, рассылки, промокоды;
- маркетинговая аналитика (GA4, Meta Conversions API) с атрибуцией рекламных кампаний.
Ключевая сложность - каталог живёт на стороне PlayStation и постоянно меняется: цены, скидки, издания, региональная доступность.
Монорепозиторий из 4 приложений и общего пакета: backend на Nest.js 10 (Node.js, TypeScript) + Prisma + PostgreSQL 16 с очередями Redis + BullMQ, отдельный Node.js-сервис парсера, Mini App на React.js 19 + Redux Toolkit + Vite + Tailwind CSS, админ-панель на React.js с JWT-авторизацией.
Парсер PS Store: обход GraphQL API по 4 регионам - игры и издания (Standard, Deluxe, Ultimate), цены и скидки со сроками действия, цены для подписчиков PS Plus, метаданные (жанры, языки озвучки и субтитров, обложки, PS4/PS5, предзаказы), внутриигровая валюта отдельным циклом. Режимы полного обхода и только новинок, финализация цикла: удаление пропавших из стора позиций, сброс истёкших скидок. После прогона бот присылает админу дамп базы, при сбоях - алерты.
Ценообразование: настраиваемая лестница наценки по каждому региону, автопересчёт в белорусские рубли, поддержка минорных единиц валют (турецкие куруши, польские гроши).
Выдача товара: Украина - вручную через аккаунт клиента (логин, пароль и резервные коды шифруются AES-256-GCM) или новый аккаунт; Турция, Индия, Польша - пулы кодов-ваучеров, жадный алгоритм подбирает комбинацию номиналов под сумму корзины с минимальным остатком и учётом склада. Коды резервируются при заказе, при низком остатке админу приходит алерт.
Платежи: эквайринг bePaid с подписанными вебхуками + ручной перевод по карте - бот выдаёт реквизиты из пула карт, клиент присылает чек, админ подтверждает инлайн-кнопками. Конечный автомат статусов заказа, автоотмена неоплаченных по расписанию, промокоды, реферальная программа.
Telegram-бот внутри бэкенда (Telegram API): HMAC-проверка initData (приложение не работает вне Telegram), deep links на игру, издание, корзину, избранное и реферальные ссылки с рекламной атрибуцией, уведомления клиенту и админу, массовые рассылки с картинкой, кнопкой и статистикой доставки.
Mini App: полноэкранный режим, safe-area, тёмная и светлая тема с подхватом схемы Telegram до первой отрисовки, скелетон-загрузчики, анимации Framer Motion, бесконечный скролл, нечёткий поиск на pg_trgm с автодополнением, фильтры по платформе, цене, жанрам, скидкам и русскому языку, избранное с уведомлением о скидках, корзина с автоподбором ваучеров.
Админ-панель: каталог и лестницы цен, подписки, ваучеры с массовой загрузкой кодов, заказы с фильтрами, промокоды и рефералка, пользователи, карты для ручной оплаты, FAQ и инфостраницы, рассылки с историей, управление парсером с логами, аналитика поисковых запросов.
Инфраструктура: Docker Compose (PostgreSQL, Redis, backend, парсер, Nginx, certbot), AWS EC2 с ежедневными снапшотами, SSL Let's Encrypt, DNS на Cloudflare, CI/CD на GitHub Actions с деплоем по пушу в main. Переезд проекта с VPS на AWS без потери данных. Аналитика: GA4 с UTM из параметров запуска, Meta Conversions API с серверной отправкой событий покупки и дедупликацией, прелендинг с Meta Pixel.
Проект в продакшене, с реальными платежами и клиентами. Каталог порядка 18 000 изданий игр, тысячи пользователей, сотни выполненных заказов, 4 региона и несколько типов товаров.
На практике это работает так: парсер сам поддерживает каталог в актуальном состоянии, алгоритм без оператора подбирает комбинации ваучеров под сумму корзины, бот ведёт клиента от заказа до выдачи и уведомляет админа на каждом шаге. Владелец управляет бизнесом из одной админ-панели: цены и наценки, ваучеры, заказы, промокоды, рассылки, парсер.
Отдельно выполнен переезд проекта с VPS на AWS без потери данных, с плановым режимом техработ на время миграции.