Що просив клієнт

Клієнт торгує ігровою валютою, подарунковими картами й ключами до ігор. До нас це виглядало так: людина писала в особисті, менеджер вручну питав гру, регіон, ID акаунта, суму, вручну виставляв реквізити, вручну перевіряв оплату і вручну робив поповнення. Один менеджер фізично тягнув 30–40 замовлень на добу, а вночі магазин просто не працював.

Задача звучала просто: зробіть так, щоб клієнт купував сам, а ми лише дивилися на цифри. Далі — як ми це зробили.

Головний екран — це не «сайт про компанію», а одразу робочий інструмент. Людина бачить рядок пошуку, свої ігри й блок моментального поповнення: обрав гру, вписав ігровий ID, обрав пакет — і кнопка оплати вже активна. Жодних реєстрацій і жодних «залиште заявку, ми з вами звʼяжемось».

Каталог: 60+ позицій у трьох різних механіках

Найцікавіше тут те, що «поповнити гру» — це три абсолютно різні технічні сценарії, і кожен треба було робити окремо.

Поповнення за UID — людина вводить ігровий ID, і товар прилітає на акаунт автоматично через API постачальника. Найшвидший шлях: 30–60 секунд і готово.

Поповнення через вхід — для ігор, які не вміють приймати донат по ID. Тут замовлення після оплати йде в чергу до оператора, а клієнт передає дані для входу через захищену форму.

Подарункові карти та ключі — видача коду з бази або від постачальника.

Кожна гра в адмінці налаштовується окремо: тип поповнення, регіони, набір полів, які треба запитати у клієнта, і головний перемикач — «працюємо через API постачальника» чи «віддаємо оператору». Перемикач можна клацнути на живому магазині: якщо в постачальника впав API, власник переводить гру на операторів і продажі не зупиняються.

Сторінка гри, де хочеться купити

📷 ФОТО → 05-storinka-gry-popovnennya.webp

Зробили сторінку так, щоб вона працювала як вітрина: пакети з цінами, перекреслена стара ціна, відсоток знижки, бейджі «швидко / безпечно / 24-7», інструкція для новачків і відгуки покупців. Усе, що зазвичай змушує людину піти «подумати», ми прибрали з дороги.

Пакети підтягуються з бази з реальними залишками й знижками, а кошик рахує вигоду: видно, скільки людина зекономила на цьому замовленні. Промокоди працюють з обмеженнями по сумі, кількості використань і конкретних іграх.

Подарункові карти та ключі до ігор

Окремі напрямки з власними каталогами: карти iTunes, Xbox, PlayStation, Roblox, Netflix, TikTok, Discord і ключі до великих ігор. Технічно це той самий рушій замовлення, але з іншою видачею — кодом.

Головне, чого не видно на скріншотах: 16 станів замовлення

Ось тут починається справжня робота. Замовлення в цій системі — не «оплачено / не оплачено». Це кінцевий автомат на 16 станів: створено → оплачено → чекаємо дані клієнта → дані отримано → маршрутизація → відправлено постачальнику → обробка → чекає оператора → внутрішня обробка → чекаємо код підтвердження → виконано. Плюс окремі гілки на скасування, повернення, помилку API і проблему оператора.

Навіщо так складно? Бо кожен із цих станів — це реальна ситуація, у якій раніше губилися гроші. Клієнт оплатив, а постачальник не відповів. Оператор узяв замовлення й зник. Гра попросила код підтвердження з пошти. Тепер кожен такий випадок має свій статус, свій таймер і свого відповідального — нічого не «висить у невідомості».

Під це ми зробили панель оператора: черга вільних замовлень, взяття замовлення в роботу, чат із клієнтом прямо в замовленні, передача секретних даних і кнопки завершення чи повернення коштів. Дані для входу в ігровий акаунт шифруються (AES-256-GCM) і розшифровуються лише тому оператору, який веде це замовлення.

Реферальна програма, гаманець і підтримка

Щоб магазин ріс без бюджету на рекламу, додали механіки, які працюють самі: реферальна програма з 11 рівнями (VIP 0–10), де що більше активних друзів, то вищий відсоток кешбеку; внутрішній гаманець із балансом, історією транзакцій і заявками на виведення; купони й промокоди, зокрема стартові для нових користувачів; підтримка — тікети з операторами й чат по конкретному замовленню.

Вхід — через Google або Facebook, тож реєстрація займає один дотик.

Адмінка, у якій власник не залежить від розробника

Це та частина, за яку клієнт сказав окреме спасибі. У панелі керування є все: ігри й товари, перемикачі API, замовлення та їхні статуси, оператори і їхні баланси, промокоди, банери, FAQ, блог, тікети, заявки на виведення. Ціни, знижки, нові ігри, тексти — власник змінює сам, без жодного рядка коду і без нас.

Десктопна версія — не «сайт, стиснутий у телефон», а окрема сітка: ширший каталог, більше товарів на екран, свій хедер.

Технічна частина, коротко

Next.js 14 (App Router) + TypeScript, Tailwind, Prisma + PostgreSQL, деплой на Railway з автозбіркою з GitHub. Окремим шаром — адаптер постачальника з тестовим режимом: нову інтеграцію можна прогнати на тестових замовленнях, не чіпаючи живі продажі. Чутливі дані клієнта шифруються, секрети живуть тільки у змінних оточення.

Результат

Магазин працює 24/7 без менеджера в переписці: людина заходить, обирає гру, платить і отримує поповнення за 30–60 секунд. Оператори підключаються лише там, де гра технічно не вміє автоматичної видачі, і бачать чергу замовлень замість купи особистих переписок. Власник керує цінами, іграми й акціями сам.