Пополнение мобильных во всех 27 странах ЕС: продукт на 6 языках, платёжный шлюз и реклама с автолестницей бюджета
Суть за 10 секунд
Сервис пополнения prepaid-номеров во всех 27 странах ЕС для TELEflash GmbH: четыре шага без регистрации, 6 языков, 150 операторов, банковская безопасность и Google Ads с собственной автоматикой бюджета.
- 27
- стран ЕС
- 150
- операторов
- 6
- языков
- 69
- автотестов
- 10
- рекламных кампаний
- 383
- ключевых слова
- 1037
- минус-слов
- 15 523
- строк кода

Задача
Нужен был быстрый сервис пополнения без регистрации для 27 стран, с корректными ценами в неевровых валютах, законным cookie-контуром и рекламой, готовой к масштабированию.
Результат
Работающий продукт с 150 операторами, 69 автотестами, строгой CSP и рекламной структурой на 10 кампаний. Запуск платежей ждёт договора с провайдером — граница интеграции подготовлена.
Что сделано
- Next.js 16 + React 19 + TypeScript strict: 14 страниц, API-роуты, 29 компонентов; поток «номер → оператор → сумма → оплата» с распознаванием страны по номеру (libphonenumber)
- Данные: 27 стран, 150 операторов, 113 логотипов (импорт, генерация и санитизация SVG скриптами), 6 неевровых валют с курсом ЕЦБ и серверным округлением
- i18n: 6 языков, 7 юридических документов × 6 языков, определение страны по IP/CDN/Accept-Language уже на сервере
- Платёжный контур: адаптер под контракт внешнего шлюза, hand-off на форму оплаты, правило «возврат браузера ≠ оплата», обработчик вебхука
- Безопасность: CSP с nonce на каждый запрос, HSTS, X-Frame DENY, Permissions-Policy, rate-limit, валидация Zod на клиенте и сервере, ноль персональных данных в логах
- Тесты: 55 unit (Vitest) + 14 e2e (Playwright, Pixel 7 и десктоп): контракт шлюза, паритет цен, валидность логотипов, доступность (16 px, 44 px, фокус-ловушка)
- Google Ads: генератор CSV из данных сайта, 10 кампаний / 45 групп / 383 ключа / 1037 минус-слов / 45 RSA на DE, IT, FR, ES, PL; валидатор политик Google
- Автоматика бюджета: скрипт «лестница ×2 при 55 % расхода» + собственный счётчик кликов (разбор nginx-лога, фильтр AdsBot, дедуп, Telegram-алерты)
- Инфраструктура: systemd-службы, nginx с Let's Encrypt, деплой-скрипт со staged-сборкой и автооткатом
Экраны





Изучить детали — полная картина
Задача
Немецкому оператору связи нужен был витринный сервис: человек вводит номер, система сама понимает страну и оператора, показывает сумму в его валюте и отправляет на оплату. Без аккаунтов и лишних полей. При этом — законный cookie-контур, Impressum, семь юридических документов на шести языках и реклама, готовая к раскатке на пять стран.
Продукт
Next.js 16 и React 19 с TypeScript strict, Tailwind 4, Radix и Motion. Главная страница и есть продукт: шаг «номер» с флагом по IP, шаг «оператор» с распознаванием по префиксу (libphonenumber) и подсказкой «похоже на Vodafone», шаг «сумма», шаг «оплата». Посадочные из рекламы предзаполняют страну, оператора и сумму через параметры URL.
Данные: 27 стран, 150 операторов, 113 логотипов, импортированных, сгенерированных и санитизированных скриптами; шесть неевровых валют с курсом ЕЦБ, серверным расчётом и округлением вверх. Шесть языков, около 200 ключей интерфейса и 6680 строк юридических текстов.
Платежи и безопасность
Граница интеграции с платёжным провайдером вынесена в адаптер под его контракт, с hand-off на форму оплаты и обработчиком вебхука. Жёсткое правило: возврат браузера со страницы оплаты не считается оплатой — только подтверждение сервера.
CSP с nonce на каждый запрос и strict-dynamic, HSTS, X-Frame DENY, Permissions-Policy, rate-limit, одинаковая валидация Zod на клиенте и сервере, персональные данные не логируются и не попадают в аналитику — функция трекинга отклоняет ключи с PII.
Качество
55 unit-тестов на Vitest и 14 e2e на Playwright (Pixel 7 и десктоп): контракт шлюза, паритет цен между экранами, XML-валидность логотипов, доступность (16 px текст, 44 px цели, фокус-ловушка), запрет на неверное юрлицо в текстах.
Реклама и автоматика бюджета
Генератор CSV для Google Ads Editor прямо из данных сайта: 27 языковых файлов, боевой импорт на DE, IT, FR, ES, PL — 10 кампаний, 45 групп, 383 ключевых слова (урезано с 10 426 до тех, что реально приводят), 1037 минус-слов, 45 адаптивных объявлений, встроенный валидатор политик Google.
Проблема: данные Google Ads отстают на три часа, а банк блокирует карту за резкие скачки списаний. Решение — скрипт «лестница ×2 при 55 % расхода» плюс собственный счётчик кликов на сервере: разбирает nginx-лог, отфильтровывает AdsBot и ревьюеров, дедуплицирует и шлёт алерты в Telegram.
Честно о том, что не доделано
- Платежи не верифицируются и пополнение не выполняется до подписания договора с провайдером — граница интеграции готова, поставщика нет.
- Сайт в режиме превью с noindex до запуска: sitemap, OpenGraph и schema.org включаются после снятия флага.
- 111 меток «на юридическую проверку» в переводах документов.
Стек Next.js 16React 19TypeScriptTailwind 4RadixMotionZodlibphonenumbergeoipPlaywrightVitestGoogle Ads Scripts
Другие кейсы
FluxrBotПродукт, сайт, приложение, нейроблог, видеофабрика и соцсети — одна система на одном сервере
VARENOИнтернет-магазин наборов для 27 стран ЕС с VAT, доставкой, админкой и Google Ads — построен за один рабочий день
WristbanditМаркетплейс перепродажи билетов и браслетов на события: 3 языка, 11 валют, модерация продавцов и защита покупателя