15. Admin Portal
Admin Roles
Binary admin model. is_admin = 1 on the users table grants full admin access. First registered user is automatically admin.
No intermediate roles, no per-feature permissions, no delegation.
Admin Routes
All admin routes require authenticateAdmin middleware (JWT + isAdmin check).
| Route Group |
Purpose |
/api/admin/users |
User CRUD |
/api/admin/ai-provider/* |
AI provider configuration |
/api/admin/bedrock/* |
AWS Bedrock management |
/api/admin/cloud-connections/* |
Cloud drive connections |
/api/admin/cloud-mounts/* |
Cloud mount points |
/api/admin/hook-*-report |
Analytics reports |
/api/admin/output-styles/* |
Output style management |
/api/admin/refresh-stats |
Analytics refresh |
/api/admin/quality-analysis |
Quality signal processing |
/api/admin/skill-usage-report |
Skill analytics |
Admin Capabilities
User Management
| Action |
Endpoint |
Details |
| List users |
GET /api/admin/users |
All users with metadata |
| Create user |
POST /api/admin/users |
Username, password, admin flag |
| Update user |
PATCH /api/admin/users/:id |
Change role, reset password |
| Delete user |
DELETE /api/admin/users/:id |
CASCADE deletes related records |
| Send welcome email |
POST /api/admin/users/:id/welcome-email |
Via Postmark template |
AI Provider Management
| Action |
Endpoint |
Details |
| View provider status |
GET /api/admin/ai-provider/status |
Active provider, health |
| List available models |
GET /api/admin/ai-provider/models |
Claude and Bedrock models |
| Activate provider |
POST /api/admin/ai-provider/activate |
Switch between Claude/Bedrock |
| Configure Bedrock |
POST /api/admin/bedrock/configure |
AWS credentials, region |
| Test Bedrock |
POST /api/admin/bedrock/test |
Validate connection |
| Switch model |
POST /api/admin/bedrock/switch-model |
Change active model |
| Toggle 1M context |
POST /api/admin/bedrock/context-mode |
Enable/disable with audit |
| Remove Bedrock |
DELETE /api/admin/bedrock |
Clear configuration |
Analytics & Reporting
| Report |
Endpoint |
Data Source |
| Hook usage |
GET /api/admin/hook-usage-report |
hook_usage_rollups |
| Session report |
GET /api/admin/hook-session-report |
hook_sessions |
| Command report |
GET /api/admin/hook-command-report |
hook_command_rollups |
| Context report |
GET /api/admin/hook-context-report |
Hook events analysis |
| Timeseries |
GET /api/admin/hook-timeseries-report |
Rollups by time bucket |
| User activity |
GET /api/admin/hook-user-activity-report |
Per-user analytics |
| Skill usage |
GET /api/admin/skill-usage-report |
Skill execution stats |
Stats refresh: POST /api/admin/refresh-stats triggers statsRefreshWorker.js (forked process) to process hook event JSONL files into rollup tables.
Output Styles
| Action |
Endpoint |
Details |
| List styles |
GET /api/admin/output-styles |
All output style definitions |
| Get style |
GET /api/admin/output-styles/:id |
Single style details |
| Create style |
POST /api/admin/output-styles |
Name, content, metadata |
| Update style |
PUT /api/admin/output-styles/:id |
Modify existing style |
| Delete style |
DELETE /api/admin/output-styles/:id |
Remove style |
Output styles modify Claude's response format via system prompt injection or post-processing.
Cloud Drive Administration
| Action |
Endpoint |
Details |
| List connections |
GET /api/admin/cloud-connections |
All cloud provider connections |
| Create connection |
POST /api/admin/cloud-connections |
Provider type, credentials |
| Authorize |
POST /api/admin/cloud-connections/:id/authorize |
Start OAuth flow |
| Delete connection |
DELETE /api/admin/cloud-connections/:id |
Remove connection |
| List mounts |
GET /api/admin/cloud-mounts |
All mount points |
| Create mount |
POST /api/admin/cloud-mounts |
Path, access mode, VFS profile |
| Remount |
POST /api/admin/cloud-mounts/:id/remount |
Re-establish mount |
| Delete mount |
DELETE /api/admin/cloud-mounts/:id |
Remove mount |
System Health Dashboard
Available in admin settings (General tab):
| Metric |
Source |
Alert Threshold |
| Disk usage |
Filesystem stats |
Green <70%, Yellow 70-85%, Red >85% |
| CPU load |
System metrics |
TBD |
| Memory usage |
Process metrics |
Configurable thresholds |
| Database health |
PRAGMA integrity_check |
Pass/fail |
| Claude API |
/api/setup/claude-status |
Connected/disconnected |
| WebSocket |
Connection count |
Active/inactive |
Audit Logging
| Audit Table |
What It Records |
hook_events |
All Claude Code tool invocations |
hook_tool_execs |
Tool execution details (command, duration, success) |
hook_sessions |
Session lifecycle (start, end, reason) |
hook_file_accesses |
File read/write operations |
execution_history |
Scheduled prompt execution results |
executions |
All execution types (schedule, meeting, API) |
api_key_usage |
External API key activity |
usage_events |
Token consumption and cost per exchange |
response_quality_signals |
Response quality metrics |
feedback_events |
User thumbs up/down feedback |
stats_refresh_log |
Analytics refresh history |
bedrock_context_audit |
1M context toggle acknowledgments |
prompt_versions |
CLAUDE.md and prompt change history |
Admin UI Components
| Component |
File |
Purpose |
AIProviderSelector |
admin/AIProviderSelector.jsx |
Provider selection card |
BedrockConfigModal |
admin/BedrockConfigModal.jsx |
Bedrock setup dialog |
ClaudeConfigModal |
admin/ClaudeConfigModal.jsx |
Claude API key dialog |
OutputStyleModal |
admin/OutputStyleModal.jsx |
Style editor dialog |
OutputStylesManager |
admin/OutputStylesManager.jsx |
Style list management |
ProviderCard |
admin/ProviderCard.jsx |
Provider status card |
ReportingPage |
ReportingPage.jsx |
Analytics dashboard |