Сайт с оплатой и личным кабинетом
Веб-проект на бэкенде и фронтенде: лендинг, который сам продаёт, — с платёжным потоком, автоматической выдачей доступа, личным кабинетом и админ-панелью. Законченный цикл продажи, а не просто страница с описанием продукта.
Демо-версию здесь не даём — в этом кейсе не называем ни заказчика, ни продукт, поэтому не даём ссылку, которая могла бы их раскрыть.
Задача
Нужен был не сайт-визитка о продукте, а сайт, который сам продаёт: принимает оплату, сразу открывает доступ и даёт покупателю личный кабинет, чтобы управлять доступом после оплаты.
Это означало сразу три требования без права на нестыковку: платёжный поток, который не может списать оплату дважды или выдать доступ дважды; личный кабинет, которым покупатель реально пользуется после оплаты; и админ-панель для работы с аккаунтами без ручных правок в базе данных.
Решение
Сайт на Express и TypeScript с базой на node:sqlite: лендинг, приём оплаты через платёжный шлюз Lava.top. Вебхук сначала перепроверяет статус платежа у провайдера, а затем передаёт его идемпотентному шагу выдачи доступа — так повторный или задвоенный вызов вебхука не создаст вторую лицензию и не спишет оплату дважды.
Вход устроен через OAuth с гео-роутингом провайдера: пользователи из России авторизуются через Яндекс, остальные — через Google, каждый через провайдера, подходящего его региону. Поверх этого — тарифная система из пяти платных планов и двух бесплатных уровней, и админ-панель для поддержки и работы с аккаунтами.
Что сделано
Обсудить похожую задачу →Оплата и выдача доступа
Платёжный поток, который переживает повторы, задвоенные вебхуки и частичные сбои без двойных списаний.
Аккаунты и админка
Всё, что нужно покупателю и команде поддержки сразу после оплаты.
Бэкенд и тесты
Express/TypeScript-бэкенд на node:sqlite, с тарифной системой и реальным набором автотестов за ней.
Результат
Сайт работает как законченный цикл продажи: посетитель попадает на страницу, оплачивает и получает доступ — без единого ручного действия со стороны команды. Выдача доступа идемпотентна по конструкции, поэтому нестабильная сеть или повторный вебхук не создают задвоенных лицензий и повторных списаний.
Из уважения к приватности заказчика в этом кейсе не называется ни сам продукт, ни ссылка на живую версию — описана только инженерная часть сайта.
Другой кейс