- Заказчик
- VextRun
- Год
- 2025
- Отрасль
- Сервисы для бизнеса
- Формат
- Веб-сервис

- с 2025в работе — с ребрендингом и постоянным развитием
- 219автотестов на бизнес-логику
- 1 касаниеот карты до страницы, без приложений
О проекте
Задача и решение
Задача
Заказчик запускал сервис для мастеров, барбершопов, фотографов и небольших студий, которые хотят одну аккуратную страницу со ссылками, прайсом и записью — и визитку, которую достаточно поднести к телефону. Сервис должен принимать оплату по подписке и выдерживать тысячи касаний.
Что мы сделали
Мы спроектировали и разработали сервис под ключ: конструктор страницы с виджетами (ссылки, FAQ, прайс, текстовые блоки), публичные профили, NFC и QR-карты, подписку с автосписанием, промокоды и админку для выпуска партий карт.
Сервис работает с 17 мая 2025 года. С тех пор он прошёл ребрендинг в VextRun, а мы продолжаем его развивать: новые виджеты, единый реестр карт и автопродление подписки.
Состав работ
Что вошло в проект
- Конструктор страницы с виджетамиПродукт
- NFC и QR-карты, выпуск партийРазработка
- Подписка, автосписание и чекиБиллинг
- Админка, статистика и метрикиРазработка
Как это устроено
Решения, на которых держится проект
Что каждое решение даёт бизнесу и как оно сделано технически.
- (01)
Оплата не списывается дважды
Клиенты платят ровно столько, сколько должны, а поддержке не приходится разбирать спорные платежи вручную.
Под капотомСтатус платежа — конечный автомат, который движется только вперёд, поэтому повторное уведомление ЮKassa не перезапишет зачтённую оплату. Автосписания с повторными попытками и льготным периодом, фискальные чеки, регулярная сверка с провайдером.
- (02)
Промокод не уходит сверх лимита
Маркетинг запускает акции и знает точно: сто промокодов — это сто активаций, даже если все придут одновременно.
Под капотомАктивация — один условный UPDATE с проверкой лимита в той же транзакции, что и регистрация. Бонусные месяцы начисляются при оплате ровно один раз благодаря отметке о выдаче.
- (03)
Касание открывает страницу мгновенно
Визитку подносят к телефону на встрече — страница должна открыться раньше, чем собеседник отвлечётся.
Под капотомСчётчик касаний пишется в Redis уже после ответа, а в PostgreSQL статистика сливается пачкой раз в 10 секунд. Сервер работает на всех ядрах через node:cluster, фоновые задачи выполняет ровно один процесс.
- (04)
Защита аккаунтов и инфраструктуры
Чужую страницу нельзя взломать перебором пароля, а сервис нельзя использовать как точку атаки на другие системы.
Под капотомПароли на Argon2id, капча, ограничение частоты запросов в Redis. Прокси аватаров проверяет каждый IP по 16 закрытым диапазонам и закрепляет соединение за проверенным адресом против DNS rebinding.
Технологии
Стек проекта
- Интерфейс
- Next.js 16
- React 19
- TypeScript
- Данные
- PostgreSQL
- Drizzle ORM
- Redis
- S3
- Платежи и почта
- ЮKassa
- Resend
- Безопасность
- Argon2id
- Cap.js
- Rate limiting
- SSRF-фильтр
- Сервер
- node:cluster
- Prometheus
- Docker
- Качество
- Vitest
- 219 тестов
Нужен похожий проект?
Написать нам