Мобильное приложение выпущено, пользователи зарегистрированы — и тут оказывается, что нет способа заблокировать аккаунт без прямого SQL-запроса, поменять баннер без деплоя или посмотреть статистику без Excel. Наша команда разрабатывает админ-панели, которые решают эти проблемы. Имея 5+ лет опыта и более 20 реализованных проектов, мы создаём интерфейсы, позволяющие управлять пользователями, контентом, push-уведомлениями и аналитикой без единого SQL-запроса. Здесь разберём ключевые компоненты и технические решения, которые мы применяем.
Модули админ-панели
Вот типичные модули, которые мы включаем:
| Компонент | Описание |
|---|---|
| Управление пользователями | Поиск, фильтрация, бан/разбан, ручная верификация, история действий |
| Управление контентом | CRUD для сущностей (товары, посты, события), модерация пользовательского контента |
| Push-уведомления | Ручная отправка сегментам, шаблоны, история, статистика доставки |
| Аналитика | DAU/MAU, retention, воронки конверсии, crash rate, ANR rate |
| Feature flags | Включение/выключение функций без деплоя, A/B-тест конфигурации |
| Конфигурация | Параметры приложения (лимиты, тексты, URL) без релиза |
Технический стек и архитектура
Backend API для admin
Admin panel работает с теми же бэкенд-сервисами, что и мобилка, но через отдельный набор эндпоинтов с более широкими правами. Важно: не давать мобильному клиенту admin-права через тот же токен. Admin API — отдельная аутентификация (отдельный OAuth2 client_id или отдельный сервис), отдельный набор middleware с проверкой ролей.
На Laravel используем spatie/laravel-permission для ролей и разрешений. Роли: super_admin, content_moderator, support. Каждое admin-действие логируется в activity_log (пакет spatie/laravel-activitylog): кто, когда, что изменил, старое и новое значение. Без этого лога разобраться в инциденте невозможно.
На Node.js/NestJS — @nestjs/passport + casl для ABAC. Для аудит-лога — middleware, пишущий в отдельную таблицу или отправляющий события в Kafka/RabbitMQ.
Какой фронтенд выбрать для админ-панели?
Три основных подхода, которые мы сравниваем:
| Подход | Гибкость | Скорость разработки | Ограничения |
|---|---|---|---|
| Custom React (Tanstack Table, React Hook Form, Shadcn/ui) | Высокая | Средняя (2-3 недели) | Требует опытной команды |
| React Admin | Средняя | Высокая (1 неделя) | Сложно кастомизировать под нестандартную логику |
| Low-code (Retool/AppSmith) | Низкая | Очень высокая (дни) | Vendor lock-in, ограниченная кастомизация |
Для большинства мобильных продуктов мы рекомендуем React + Tanstack Table + React Query + Shadcn/ui: custom-решение в 2-3 раза гибче low-code, при этом скорость разработки сопоставима. Кроме того, custom-решение окупается в 2 раза быстрее low-code при более чем 10 сущностях.
Настройка push-уведомлений из панели
Интеграция с Firebase Cloud Messaging через Admin SDK. Firebase Admin SDK позволяет отправлять уведомления батчами до 500 токенов. Панель позволяет выбрать сегмент пользователей (по дате регистрации, платформе, активности, кастомным тегам), написать текст и заголовок, запланировать отправку или отправить немедленно.
Недавно на проекте с 500k DAU мы реализовали сегментную отправку: нужно было отправить промо-акцию только пользователям iOS, не заходившим более 7 дней. Панель собрала сегмент за 2 клика, батчевая отправка через sendMulticast обработала 200k токенов за 30 секунд. Результат: 15% конверсия в заказы.
Шаги реализации:
- Установите Firebase Admin SDK на бэкенде.
- Реализуйте эндпоинт для отправки (используйте
sendMulticastс батчами по 500 токенов для больших сегментов). - Обработайте результат:
successCountиfailureCountсохраняются в историю. - Автоматически удаляйте протухшие токены (исключение
UNREGISTERED).
На бэкенде: FirebaseAdmin.messaging().sendMulticast() для групповой отправки. Результат отправки — BatchResponse — сохраняем для истории.
Почему feature flags экономят время?
Простейшая реализация: таблица feature_flags (key, enabled, rollout_percentage, updated_at). Мобилка запрашивает флаги при старте и кеширует. Панель позволяет включать/выключать флаги и настраивать процент аудитории. Это сокращает время на выкат новой функции до минут вместо деплоя — например, A/B-тестирование нового онбординга: 50% пользователей получают новую версию, мы собираем метрики и через день принимаем решение. Без флагов пришлось бы выкатывать отдельную сборку.
Для более сложных сценариев — Firebase Remote Config или LaunchDarkly. Remote Config бесплатен и достаточен для 90% задач: панель в Firebase Console, SDK на мобилке с fetch() + activate(), minimumFetchInterval в секундах для контроля частоты запросов.
Как обеспечить безопасность админ-панели?
- Отдельный домен или subdomain (только
admin.yourapp.com, неyourapp.com/admin) - MFA обязателен для всех admin-аккаунтов
- IP-whitelist если команда работает из фиксированных офисов
- Rate limiting на все эндпоинты
- HTTPS only, HSTS
- Сессии с коротким TTL (8 часов), автологаут при бездействии
- Content Security Policy headers
Что входит в работу и сроки
- Документация API: полное описание эндпоинтов, моделей и прав доступа
- Исходный код: приватный репозиторий с CI/CD
- Инструкция по развёртыванию: пошаговое руководство для DevOps
- Обучение команды: вебинар или личная консультация по администрированию
- Поддержка: гарантийное обслуживание 3 месяца после сдачи
Сроки: от 1 недели до 3 месяцев. Базовая CRUD-панель с управлением пользователями и push — 1–2 недели. Полноценная система с аналитикой, feature flags, сложной ролевой моделью и аудит-логом — 1–3 месяца.
Мы гарантируем стабильную работу и прозрачность этапов. Заинтересовались? Свяжитесь с нами для консультации — оценим ваш проект и подберём оптимальное решение под ваши задачи.







