Розробка адміністративної панелі для управління мобільним приложенням
Мобільне приложення випущено, користувачі зареєстровані — і раптом виявляється, що немає способу заблокувати акаунт без прямого SQL-запиту, поміняти банер без деплоя, або подивитися статистику без експорту в Excel. Адміністративна панель — це інфраструктура, яку звично відкладають і потім роблять поспішно.
Що саме входить в admin panel для мобільної програми
Залежить від типу приложення, але типовий склад:
- Управління користувачами: список з пошуком/фільтрацією, перегляд профілю, бан/розбан, ручна верифікація, історія дій
- Управління контентом: CRUD для сутностей приложення (товари, пости, події), модерація користувацького контенту
- Push-повідомлення: ручна відправка сегментам користувачів, шаблони, історія відправок, статистика доставки
- Аналітика: DAU/MAU, retention, воронки конверсії, технічні метрики (crash rate, ANR rate)
- Feature flags: включення/вимикання функцій без деплоя, A/B-тест конфігурації
- Конфігурація: параметри приложення (ліміти, тексти, URL) без релізу
Технічний стек та архітектура
Backend API для admin
Admin panel працює з тими ж backend-сервісами що й мобілка, але через окремий набір ендпоїнтів з ширшими правами. Важливо: не давати мобільному клієнту 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 (Attribute-Based Access Control). Для аудит-логу — middleware, що пише в окрему таблицю або відправляє events у Kafka/RabbitMQ.
Frontend admin panel
Три основних шляхи:
React + headless UI (Tanstack Table, React Hook Form, Shadcn/ui). Максимальна гнучкість, пишемо самі. Підходить якщо нестандартні вимоги до UX або потрібна тісна інтеграція з існуючою дизайн-системою. Tanstack Table для таблиць з серверною пагінацією, сортуванням та фільтрацією — один з найкращих варіантів на ринку. React Query для кешування запитів та інвалідації.
React Admin (marmelab). Швидкий старт — компоненти List, Edit, Create, Show з коробки. Добре якщо дані CRUD-подібні. Починає обмежувати коли потрібна нестандартна бізнес-логіка або складні дашборди.
Retool / AppSmith (low-code). Швидкість розробки максимальна, деплоїться за день. Мінуси: vendor lock-in, обмеження кастомізації, платні тарифи при масштабуванні, деякі клієнти проти розміщення даних у SaaS.
Для більшості мобільних продуктів — React + Tanstack Table + React Query + Shadcn/ui. Не велосипед, не low-code, добре масштабується.
Управління push-повідомленнями з панелі
Інтеграція з Firebase Cloud Messaging через Admin SDK. Панель дозволяє вибрати сегмент користувачів (за датою реєстрації, платформою, активністю, кастомними тегами), написати текст та заголовок, запланувати відправку або відправити одразу.
На бекенді: FirebaseAdmin.messaging().sendMulticast() для групової відправки (максимум 500 токенів за раз, потрібна батчева відправка для більших сегментів). Або через Firebase Topics для предвизначених груп. Результат відправки — BatchResponse з successCount та failureCount — зберігаємо для історії.
Важливий момент: токени FCM протухають. FirebaseMessagingException з кодом UNREGISTERED — сигнал видалити токен з бази. Робимо це автоматично в handler'і відправки.
Feature flags
Найпростіша реалізація: таблиця feature_flags (key, enabled, rollout_percentage, updated_at). Мобілка запитує флаги при старті та кешує. Панель дозволяє включати/вимикати флаги та налаштовувати процент аудиторії.
Для складніших сценаріїв — Firebase Remote Config або LaunchDarkly. Remote Config безкоштовний та достатній для 90% завдань: панель у Firebase Console, SDK на мобілці з fetch() + activate(), minimumFetchInterval в секундах для контролю частоти запитів.
Безпека admin panel
- Окремий домен або subdomain (
admin.yourapp.com), неyourapp.com/admin - MFA обов'язковий для всіх admin-аккаунтів
- IP-whitelist якщо команда працює з фіксованих офісів
- Rate limiting на всі ендпоїнти
- HTTPS only, HSTS
- Сесії з коротким TTL (8 годин), автологаут при бездіяльності
- Content Security Policy headers
Термін: від 1 тижня до 3 місяців. Базова CRUD-панель з управлінням користувачами та push — 1–2 тижні. Повноцінна система з аналітикою, feature flags, складною ролевою моделлю та аудит-логом — 1–3 місяці залежно від обсягу.







