Keme Super-Admin Control Plane
Purpose
Keme Control is the restricted operational interface for PushHub platform administrators. It is served at https://admin.pushhub.kemegames.com/admin and is separate from customer workspaces.
Information architecture
The approval-based onboarding expansion adds Trial Requests as a required admin module. It should sit before Organizations because it is the intake queue that provisions new tenant workspaces after Keme review.
Implemented route: /admin/trial-requests. The module supports submitted/approved/rejected/expired filtering, requester/company search, approve with plan/trial settings, reject with admin notes, setup-email delivery state, resend setup email, admin-only setup-link recovery, and audit-backed review actions.
- Command Center — tenant, user, app, device, and notification totals; newest organizations; tenant health; core-service summary.
- Organizations — searchable tenant directory, status filters, footprint, plan visibility, suspension/reactivation, and plan changes.
- Apps & Environments — cross-tenant project inventory, platform/provider readiness, state, and device footprint.
- Users & Roles — workspace identities, verification/login state, and Keme super-admin operators.
- Plans & Billing — subscription plans, prices, features, and entitlement limits.
- Campaigns & Delivery — cross-tenant campaign activity and queued/sent/delivered/opened/failed delivery totals.
- API Credentials — safe key metadata, prefixes, scopes, last use, and revocation state; never plaintext secrets.
- Integrations — FCM/APNs readiness and the core data-plane connections.
- Audit Trail — system and super-admin events, ordered newest first.
- Data Governance — implemented safeguards and an explicit enterprise-governance backlog.
- Platform Health — API heartbeat and the operational boundary for PostgreSQL, Redis, storage, FCM, and APNs.
- Access & Security — current session posture and the operator security checklist.
- Delivery Engine — dedicated worker freshness, durable job states, leases, retry/dead-letter volume, secret-free provider attempts, and audited recovery.
Competitive baseline
The control-plane scope follows recurring capabilities in OneSignal, Pushwoosh, Knock, Braze, CleverTap, and MoEngage administration: organization/app hierarchy, granular access, API-key governance, environment boundaries, billing and usage, message observability, audit logs, provider configuration, and privacy/security controls. Unsupported enterprise functions are identified as planned rather than represented as active.
Authorization
- Super-admin login uses
POST /api/v1/admin/login. - Super-admin JWTs include the
is_super_admin=trueclaim. - Every administrative API endpoint requires the
SuperAdminOnlypolicy. - The frontend redirects unauthenticated admin routes to
/admin/login. - The public admin hostname redirects
/to/admin.
Administrative APIs
GET /api/v1/admin/statsGET /api/v1/admin/trial-requestsGET /api/v1/admin/trial-requests/{id}POST /api/v1/admin/trial-requests/{id}/approvePOST /api/v1/admin/trial-requests/{id}/rejectPOST /api/v1/admin/trial-requests/{id}/resend-setup-emailPOST /api/v1/admin/trial-requests/{id}/setup-linkGET /api/v1/admin/companiesPOST /api/v1/admin/companies/{id}/suspendPOST /api/v1/admin/companies/{id}/activatePOST /api/v1/admin/companies/{id}/change-planGET /api/v1/admin/audit-logsGET /api/v1/admin/appsGET /api/v1/admin/usersGET /api/v1/admin/operatorsGET /api/v1/admin/api-keysGET /api/v1/admin/campaignsGET /api/v1/admin/delivery-summaryGET /api/v1/admin/delivery-engineGET /api/v1/admin/delivery-engine/jobs/{id}POST /api/v1/admin/delivery-engine/jobs/{id}/retryPOST /api/v1/admin/delivery-engine/jobs/{id}/dismiss
High-risk workflows
Approve a trial request
- Open Trial Requests.
- Filter to submitted requests.
- Review company, requester, website, expected volume, and use case.
- Choose the initial plan and trial length.
- Approve the request.
- Verify the company, owner identity, owner membership, setup-password token, setup-email status, and audit event.
- If setup email shows
FallbackorFailed, use Resend setup after fixing provider configuration, or use Setup link as a manual recovery path.
Reject a trial request
- Open Trial Requests.
- Review the request details.
- Enter an internal note and customer-facing reason when required.
- Reject the request.
- Verify no workspace was provisioned and the rejection audit event exists.
Recover setup access for an approved request
- Open Trial Requests and filter to approved requests.
- Check the Setup email column for attempt count, provider, last attempt time, and error/fallback detail.
- Click Resend setup after email configuration is healthy.
- Click Setup link only when the owner needs manual recovery before email is healthy.
- Copy the generated link from the modal and share it only with the listed workspace owner.
- Verify the
trial_request.setup_link_generatedaudit event exists.
Suspend an organization
- Locate the organization in Tenant Directory.
- Open its action control.
- Enter a meaningful reason of at least five characters.
- Confirm suspension.
- Verify the new status and the
admin.company.suspendedaudit event.
Reactivate an organization
- Locate the suspended organization.
- Confirm reactivation.
- Verify the active status and the
admin.company.activatedaudit event.
Change a plan
- Select the current plan badge in Tenant Directory.
- Choose the new plan.
- Confirm the entitlement change.
- Verify the organization plan and the
admin.company.plan_changedaudit event.
Recover a dead-lettered dispatch job
- Open Delivery Engine and filter to DeadLettered.
- Inspect the job source, company/app ownership, normalized failure, and attempt history.
- Correct provider configuration or the reported operational fault before replay.
- Enter a recovery reason of at least five characters and retry the job. Final recipient outcomes remain skipped.
- Dismiss only when no replay should occur; this is terminal and audited.
- Verify
admin.dispatch_job_retriedoradmin.dispatch_job_dismissedin Audit Trail.
Implementation
- Layout:
frontend/src/components/layout/AdminLayout.tsx - Sign-in:
frontend/src/pages/admin/AdminLoginPage.tsx - Command Center:
frontend/src/pages/admin/AdminDashboardPage.tsx - Trial Requests:
frontend/src/pages/admin/AdminTrialRequestsPage.tsx - Tenant Directory:
frontend/src/pages/admin/AdminCompaniesPage.tsx - Remaining operations pages:
frontend/src/pages/admin/AdminOperationsPages.tsx - Cross-tenant platform modules:
frontend/src/pages/admin/AdminPlatformPages.tsx - Delivery engine:
frontend/src/pages/admin/AdminDeliveryEnginePage.tsx - API controller:
backend/PushHub.API/Controllers/SuperAdminController.cs - Trial request API controller:
backend/PushHub.API/Controllers/AdminTrialRequestsController.cs - Application handlers:
backend/PushHub.Application/Features/SuperAdmin/ - Trial request handlers:
backend/PushHub.Application/Features/TrialRequests/
Cross-tenant read-only inventory endpoints use a dedicated EF Core read model in the super-admin controller. Administrative writes continue through MediatR command handlers so validation and audit creation remain centralized.
Verification
- Build the API and frontend in Release/production mode.
- Confirm unauthenticated admin routes redirect to sign-in.
- Confirm valid super-admin login returns an access token.
- Confirm stats, companies, plans, audit, and health requests succeed under the admin token.
- Exercise destructive workflows only with a designated test tenant.
- Verify desktop and mobile layouts and check the browser console for runtime errors.
Production verification on July 17, 2026 confirmed admin authentication, trial request listing, protected unauthenticated access, public intake, and rejection workflow. The live smoke request was rejected immediately so no test tenant was provisioned.
Phase Three verification is documented in docs/PHASE_THREE.md. Delivery-engine smoke checks are read-only; retry and dismissal must use a designated test job.