Що просив клієнт
Клієнт торгує ігровою валютою, подарунковими картами й ключами до ігор. До нас це виглядало так: людина писала в особисті, менеджер вручну питав гру, регіон, ID акаунта, суму, вручну виставляв реквізити, вручну перевіряв оплату і вручну робив поповнення. Один менеджер фізично тягнув 30–40 замовлень на добу, а вночі магазин просто не працював.
Задача звучала просто: зробіть так, щоб клієнт купував сам, а ми лише дивилися на цифри. Далі — як ми це зробили.
Головний екран — це не «сайт про компанію», а одразу робочий інструмент. Людина бачить рядок пошуку, свої ігри й блок моментального поповнення: обрав гру, вписав ігровий ID, обрав пакет — і кнопка оплати вже активна. Жодних реєстрацій і жодних «залиште заявку, ми з вами звʼяжемось».
Каталог: 60+ позицій у трьох різних механіках
Найцікавіше тут те, що «поповнити гру» — це три абсолютно різні технічні сценарії, і кожен треба було робити окремо.
Поповнення за UID — людина вводить ігровий ID, і товар прилітає на акаунт автоматично через API постачальника. Найшвидший шлях: 30–60 секунд і готово.
Поповнення через вхід — для ігор, які не вміють приймати донат по ID. Тут замовлення після оплати йде в чергу до оператора, а клієнт передає дані для входу через захищену форму.
Подарункові карти та ключі — видача коду з бази або від постачальника.
Кожна гра в адмінці налаштовується окремо: тип поповнення, регіони, набір полів, які треба запитати у клієнта, і головний перемикач — «працюємо через API постачальника» чи «віддаємо оператору». Перемикач можна клацнути на живому магазині: якщо в постачальника впав API, власник переводить гру на операторів і продажі не зупиняються.
Сторінка гри, де хочеться купити
Зробили сторінку так, щоб вона працювала як вітрина: пакети з цінами, перекреслена стара ціна, відсоток знижки, бейджі «швидко / безпечно / 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 секунд. Оператори підключаються лише там, де гра технічно не вміє автоматичної видачі, і бачать чергу замовлень замість купи особистих переписок. Власник керує цінами, іграми й акціями сам.