Продукт студии
Play&Buy
Магазин зарубежных подписок и игр для Беларуси: каталог, заказы, шифрованные ключи, курс Нацбанка и админка на пятнадцать разделов.
- маршрут API
- 141
- таблицы в базе
- 23
- разделов админки
- 15

Магазин зарубежных подписок, игр и сервисов для Беларуси: каталог с фильтрами, корзина, промокоды, заказы с мгновенной выдачей ключей, отзывы и большая административная часть.
Бэкенд — Go: 55 файлов, 13 379 строк, 141 маршрут. Фронтенд — Next.js: 128 файлов, 26 384 строки.
Товар здесь — это ключ, и он лежит зашифрованным
Магазин цифровых товаров устроен не как обычный: на складе не коробки, а строки активации. Утечка базы в таком магазине означает не «украли адреса покупателей», а «украли весь непроданный товар».
Поэтому ключи хранятся в базе зашифрованными AES и расшифровываются в момент выдачи. Склад ключей — отдельный раздел админки со своей моделью: ключ привязан к варианту товара, резервируется под заказ и после выдачи не возвращается в оборот.
Цены в рублях по курсу Нацбанка, а не по вчерашнему
Товар закупается в валюте, продаётся в белорусских рублях. Курс, вбитый руками, начинает врать на следующий день — и либо магазин работает в минус, либо покупатель видит цену выше рынка.
В проекте есть фоновый работник, который забирает официальный курс USD и RUB из API Национального банка и обновляет его в базе. Цена в каталоге пересчитывается от текущего курса, а не от того, что помнил администратор.
Админка — половина проекта
Пятнадцать разделов, и это не «таблица товаров с кнопкой удалить»:
- товары, категории деревом, варианты со своими ценами;
- склад ключей и их движение;
- заказы и их статусы;
- промокоды с проверкой срока, лимита использований и минимальной суммы;
- модерация отзывов — одобрить или отклонить;
- пользователи, роли, блокировка;
- журнал действий администраторов — кто что поменял и когда;
- мониторинг, настройки, FAQ, произвольные страницы;
- конструктор главной страницы и раздел оформления.
Последние два стоит выделить: владелец меняет состав и порядок блоков на главной сам, не обращаясь к разработчику. Для магазина, где витрина перестраивается под каждую распродажу, это разница между «напишу вам в пятницу» и «поменяю за пять минут».
Поддержка живёт в Telegram, а не в отдельной панели
У магазина есть бот, и поддержка работает через него: покупатель отправляет /support,
создаётся тикет, дальше переписка идёт в Telegram — со статусами, назначением на оператора
и историей сообщений в базе.
Логика простая и правильная: покупатель цифровых товаров и так сидит в Telegram, а оператору не нужно держать открытой ещё одну вкладку. Активный тикет у человека может быть только один — иначе одна и та же проблема расползается по трём обращениям.
Почему бэкенд на Go
141 маршрут, 23 таблицы, фоновые работники, шифрование, выдача ключей в момент оплаты. Это не тот случай, где важна скорость написания первой версии, — здесь важна предсказуемость под нагрузкой и строгая типизация на границе с деньгами и товаром.
Слои разделены: обработчики, сервисы, репозитории, модели. Обработчик не ходит в базу напрямую — это та же дисциплина, что позволяет потом поменять хранилище, не переписывая логику.
Что видит покупатель
Каталог с фильтрами по категории, цене, типу доставки, рейтингу и скидкам, поиск, сортировка, две раскладки и постраничность. Страница товара с галереей, выбором варианта, отзывами и похожими товарами. Корзина с промокодами и пересчётом. Оформление заказа с выдачей ключа и инструкцией по активации.
Отзыв можно оставить и без регистрации — иначе у магазина цифровых товаров, где половина покупок гостевые, отзывов не будет вовсе.
Как это стоит
Шесть контейнеров в одном описании: база, кеш, бэкенд, фронтенд, nginx и выпуск сертификатов. Развёртывание на чистом сервере — это клонировать репозиторий, заполнить переменные окружения и поднять всё одной командой.
Go 1.22 · Fiber · GORM · PostgreSQL 16 · Redis 7 · Next.js 16 · React 19 · TypeScript · Tailwind CSS 4 · Docker · nginx