Что такое Cabinet?
Bedolaga Cabinet — веб-приложение для управления VPN подписками через браузер. Работает как полноценный личный кабинет с авторизацией через Telegram, email или OAuth-провайдеров (Google, Яндекс, Discord, VK). Включает встроенную админ-панель для управления всем сервисом.Telegram + Email + OAuth
4 способа авторизации, включая вход без Telegram
Админ-панель
Полное управление сервисом через веб-интерфейс
Real-time
WebSocket-уведомления и мгновенные обновления
Возможности для пользователей
Подписки
Покупка, продление, смена тарифа, приостановка. Выбор серверов и стран. Управление устройствами (HWID).
Баланс и платежи
Пополнение через любую подключённую платёжную систему. История транзакций с фильтрацией. Telegram Stars.
Подключение к VPN
Ключи подключения, QR-коды, инструкции по настройке. Deep-ссылки для автоматического импорта в VPN-клиенты.
Реферальная программа
Реферальная ссылка, список рефералов, история начислений. Заявка на партнёрство, вывод средств.
Поддержка
Создание тикетов, переписка с поддержкой, уведомления о статусе.
Дополнительно
Промокоды, рекламные предложения, конкурсы, мини-игры, колесо фортуны, опросы.
Авторизация
Cabinet поддерживает 4 независимых способа входа. Пользователи могут регистрироваться и использовать сервис без Telegram.Telegram
| Способ | Описание |
|---|---|
| WebApp (Mini App) | Автоматический вход при открытии внутри Telegram — валидация initData с HMAC-SHA256 |
| Login Widget | Кнопка «Войти через Telegram» на веб-странице для браузерного доступа |
- Регистрация с валидацией (блокировка одноразовых email)
- Верификация через ссылку в письме
- Вход по email + паролю
- Сброс пароля через email
- Смена email с подтверждением кодом
OAuth 2.0
openid email profileЯндекс
login:info login:emailDiscord
identify emailVK
emailJWT-токены
| Токен | Срок жизни | Хранение |
|---|---|---|
| Access | 15 мин (настраивается) | sessionStorage |
| Refresh | 7 дней (настраивается) | localStorage, SHA-256 хеш в БД |
Админ-панель
Полнофункциональная веб-панель администратора доступна прямо в Cabinet.Доступ
Разделы
Дашборд
Аналитика, статистика пользователей, подписок и доходов
Пользователи
Поиск, просмотр профилей, управление данными, история действий
Тарифы
Создание, редактирование, включение/выключение тарифов, статистика
Серверы
Управление серверами, синхронизация с RemnaWave, статистика нагрузки
Платежи
Все транзакции, поиск по ID, настройка отображения платёжных методов
Рассылки
Массовые сообщения пользователям с фильтрацией и шаблонами
Промокоды
Создание и управление промокодами, промогруппами (периодические скидки), статистика
Рекламные кампании
Создание кампаний с deep-ссылками и отслеживанием конверсий
Партнёры
Заявки на партнёрство, настройка комиссий, управление партнёрами
Выводы средств
Обработка запросов на вывод реферальных средств (одобрение / отказ / завершение)
Поддержка
Управление тикетами, настройка уведомлений о SLA
Настройки
Live-редактирование конфигурации бота без перезапуска
RemnaWave
Статус панели, ноды, сквады, синхронизация, миграции пользователей между сквадами
Трафик
Мониторинг потребления трафика по пользователям
Рекламные предложения
Шаблоны промо-предложений, персональные рассылки
Email-шаблоны
Редактирование шаблонов писем (верификация, сброс пароля) с предпросмотром и тестовой отправкой
Приложения
Настройка VPN-приложений для скачивания, deep-ссылки по платформам, брендирование
Колесо фортуны
Настройка призов, стоимости вращения, лимитов
Закреплённые сообщения
Создание сообщений, отображаемых всем пользователям в кабинете
Обновления
Проверка новых версий бота и кабинета
Архитектура
- Раздаёт статику frontend
- Проксирует
/api/*на backend бота (с удалением префикса/api)
| Режим | MAIN_MENU_MODE | Описание |
|---|---|---|
| Стандартный | default | Полноценный Telegram-бот с inline-кнопками |
| Кабинет | cabinet | Минимальное текстовое меню с перенаправлением в веб-кабинет |
Стек технологий
| Технология | Назначение |
|---|---|
| React 18 | UI фреймворк |
| TypeScript | Типизация |
| Vite | Сборка |
| Tailwind CSS | Стили |
| Zustand | State management |
| i18next | Мультиязычность (RU/EN/CN/UA/FA) |
| Telegram WebApp SDK | Авторизация через Telegram |
| WebSocket | Real-time уведомления |
Переменные окружения
Build-time (вшиваются в JS при сборке)
| Переменная | Описание | По умолчанию |
|---|---|---|
VITE_API_URL | Путь к API (/api или полный URL) | /api |
VITE_TELEGRAM_BOT_USERNAME | Username бота (без @) | — |
VITE_APP_NAME | Название в шапке и вкладке | Cabinet |
VITE_APP_LOGO | Текст логотипа (1-2 символа) | V |
Backend бота (.env бота)
| Переменная | Описание | По умолчанию |
|---|---|---|
CABINET_ENABLED | Включить Cabinet API | false |
CABINET_URL | Базовый URL кабинета (для ссылок в email и OAuth) | — |
CABINET_JWT_SECRET | Секретный ключ для JWT | — |
CABINET_ALLOWED_ORIGINS | CORS origins (через запятую) | — |
CABINET_ACCESS_TOKEN_EXPIRE_MINUTES | Время жизни access token | 15 |
CABINET_REFRESH_TOKEN_EXPIRE_DAYS | Время жизни refresh token | 7 |
CABINET_EMAIL_AUTH_ENABLED | Включить email-вход | true |
CABINET_EMAIL_VERIFICATION_ENABLED | Требовать верификацию email | true |
CABINET_BUTTON_STYLE | Стиль кнопок: primary, success, danger | — |
MAIN_MENU_MODE | Режим меню: default или cabinet | default |
Быстрый старт
Разверните frontend
Подробная инструкция: Установка Cabinet
Настройте прокси
Caddy, Nginx или Traefik: Настройка прокси
Добавьте авторизацию (опционально)
- Email-авторизация — вход без Telegram
- OAuth-провайдеры — Google, Яндекс, Discord, VK
