📄 Cópia local — fonte de verdade no GitHub. Origem:
felipeluissalgueiro/cadencia-app/master/src/app/(app)/app/admin/CLAUDE.md/app/admin/CLAUDE.md) Sincronizar via/documentar-softwareousync_to_framework.py.
frontend-admin — painel administrativo¶
TL;DR¶
Área super_admin em /app/admin. 14 sub-rotas cobrindo gestão de tenants, billing, custos LLM, roteamento de modelos, feature flags e impersonação.
Identidade¶
- Tipo: Next.js 15 App Router
- Path:
src/app/(app)/app/admin/ - Status: ativo
- Deps: Supabase (role
super_admin), Workers Coolify VPS Master, VPS
Rotas e funcionalidades¶
| Rota | Componente | Função |
|---|---|---|
/app/admin/dashboard | AdminDashboard | Overview: tenants, planos ativos, posts totais |
/app/admin/tenants | TenantsTable | CRUD tenants + status ativo/suspenso |
/app/admin/users | UsersTable | CRUD usuários |
/app/admin/billing | BillingTable | Cobranças e planos |
/app/admin/billing/credits | CreditsTable | Créditos manuais por tenant |
/app/admin/content | ContentTable | Conteúdo global |
/app/admin/editorials | EditorialsTable | Editoriais por tenant |
/app/admin/logs | LogsTable | Audit logs |
/app/admin/costs | CostsDashboard + ApiCallLogsTab | Custos de chamadas LLM por tenant |
/app/admin/models | ModelRouterTable + AgentPromptsTab | Roteamento de modelos LLM + prompts |
/app/admin/metrics | MetricsView | Métricas agregadas |
/app/admin/flags | FlagsView | Feature flags globais (5 flags) |
/app/admin/onboarding | OnboardingTable | Estado de onboarding por tenant |
/app/admin/impersonate | ImpersonateView | Impersonar tenant (super_admin only) |
/app/admin/tickets | TicketsTable | Suporte/tickets |
Feature flags globais¶
| Flag | Default | Função |
|---|---|---|
maintenance_mode | false | Desativa app para manutenção |
auto_approve_default | false | Auto-aprova ideias sem review |
multi_version_default | false | Gera 3 versões por padrão |
new_carousel_models | false | Habilita novos modelos de carrossel |
chat_ideas | false | Liga/desliga chat "Tenho uma Ideia" |
CostsDashboard¶
Rastreia todas as chamadas LLM por tenant (tabela api_call_logs). Permite identificar tenants de alto custo e otimizar modelo routing.
ModelRouter¶
Configura qual LLM usar por tipo de conteúdo e por tenant. Overrides de prompt por agente. API: POST /api/app/admin/model-routing + POST /api/app/admin/agent-prompts.
Don'ts¶
- Acesso
super_adminverificado no backend — nunca confiar em check só no frontend - Export CSV (
GET /api/app/admin/export) tem dados sensíveis — não expor publicamente
Quando usar¶
- Operação interna PD: gerenciar tenants, monitorar custos LLM, configurar model routing, toggle feature flags globais, impersonar tenant para suporte.
Quando NÃO usar¶
- ❌ Por usuários tenant — role
super_adminobrigatório, RLS bloqueia. - ❌ Para exportar dados de outro tenant para uso externo — auditoria + LGPD.
- ❌ Sem 2FA habilitado (boa prática, ainda que técnico não exija hoje).
Por que funciona assim¶
- Custos LLM agregados em
api_call_logs— visibilidade granular por tenant para otimizar prompts/modelos. - Model routing configurável por tenant — permite testar Opus vs Sonnet sem deploy.
- Impersonate: sessão temporária mascarada como o tenant para diagnosticar sem login do usuário.
🚫 Don'ts¶
- Não alterar
maintenance_mode=truesem avisar Felipe — quebra app de todos os tenants. - Não sair de uma sessão impersonate sem logar audit log explícito.
- Não dar créditos manuais sem registro em
billing/creditsaudit. - Não mudar feature flag global em produção sem testar staging.
🪦 Já tentamos¶
- Feature flag rollout sem staging → bug em produção visível para todos. Razão de manter
maintenance_modecomo gate.
🔥 Troubleshooting¶
| Sintoma | Causa provável | Fix |
|---|---|---|
| 403 ao acessar /app/admin | Sem role super_admin | Adicionar em user_tenant_roles |
| Custos LLM 0 para tenant ativo | api_call_logs sem registro | Verificar logging nos workers |
| Impersonate não sai limpa | Sessão duplicada | Logout completo + clear cookies |
| Model routing não aplica | Cache no worker | Reiniciar worker / invalidar cache |
📚 Referências cruzadas¶
- frontend-app — App tenant
- api-routes — Endpoints
/api/app/admin/* - supabase-schema — Tabelas
api_call_logs,audit_logs