A partir de agora algumas informações do site serão pagas.

Kaique Mitsuo Silva Yamamoto
Arquitetura softwareAdministracao cms

Unificação do Painel Administrativo

Arquitetura e histórico da consolidação dos painéis /admin e /manager em um único sistema baseado em Supabase Auth, com CMS headless nativo no Next.js.

Unificação do Painel Administrativo

Status: Concluído (Sprints 1–9)
Versão: 2.0
Atualizado: 2026-06-26
Responsável: Kaique Yamamoto

Arquitetura vigente: monólito Next.js 16 → Supabase (Postgres + Auth + Storage). Go API removida. Documentação técnica BMAD no repositório: docs/index.md · ADR: docs/adr/0001-unificacao-painel-administrativo.md.

Estado Atual (pós-unificação)

ComponenteRotaAuthPapel
Manager (oficial)/managerSupabase Auth + MANAGER_ADMIN_EMAILSShell unificado — dashboard, CRUD, trilhas, métricas, mercado financeiro
CMS Admin (legado)/adminJWT (jose + cms_users)Depreciado — redireciona para /manager quando NEXT_PUBLIC_USE_UNIFIED_ADMIN=true
CMS API (headless)/cms/* (46 handlers)JWT BearerCRUD nativo Next.js — usado pelo shell e por integrações

Feature flag

NEXT_PUBLIC_USE_UNIFIED_ADMIN=true

Com a flag ativa, src/proxy.ts redireciona /admin/*/manager/* (mapeamento de entidades, mercado financeiro, login).

O que foi entregue (Sprints 1–9)

  • Sprint 1: ADR 0001, decisões de auth, documentação base.
  • Sprint 2: Login unificado Supabase Auth, shell comum, sidebar rico, ManagerNav.
  • Sprint 3: CRUD rico FII/ETF/Ativo/Glossário (KVFieldArray, revisions, publish).
  • Sprint 4: Produtos, pedidos, RevenueCard.
  • Sprint 5: Mídia (MediaGallery, upload Supabase Storage bucket media).
  • Sprint 6: Editor MDX, preview tokens, ISR via /api/revalidate.
  • Sprint 7: Usuários CMS, audit log, stats/timeseries.
  • Sprint 8: Editor de Trilhas YouTube (/manager/trilhas), métricas (/manager/metricas).
  • Sprint 9: Redirects /admin/manager, testes E2E, docs sincronizadas.

Mercado financeiro: consulta de artefatos (análise + detecção de atualizações + marcar) em /manager/mercado-financeiro/analise e /manager/mercado-financeiro/atualizar.

Contexto Original (pré-unificação)

Antes da unificação (2026-06), o projeto mantinha dois painéis independentes:

  • CMS Admin (/admin + /cms/*): JWT custom (cms_users/cms_sessions), editor MDX, mídia, revenue, audit, revisions, preview. Herdado da migração Go → Next.js (2026-04).
  • Manager (/manager): Supabase Auth, EntityTable genérico, trilhas YouTube, pageviews.

Problemas resolvidos: duplicação de CRUD, dois sistemas de identidade, features fragmentadas, experiência confusa para o administrador.

Decisão Arquitetural

/manager (Supabase Auth) é o painel oficial. Funcionalidades avançadas do CMS Admin foram portadas para o shell unificado.

PreservadoRemovido / depreciado
KV arrays, MDX editor, mídia, revenue, auditLogin JWT em /admin/login (redirect)
Editor de Trilhas YouTubeNavegação duplicada entre painéis
RLS + service_roleDependência de Go API (removida 2026-06-26)

Roles: super_admin | editor | viewer — via Supabase Auth app_metadata.role + allowlist.

Stack Técnica do CMS

Browser (/manager ou /admin legado)

    ├── Supabase Auth (cookies SSR) ──► /manager/*

    └── fetch /cms/* (JWT Bearer) ──► src/app/cms/** (46 route handlers)

              └── src/lib/cms/* ──► Supabase Postgres (cms_*, fiis, etfs, …)
MóduloArquivoResponsabilidade
Auth CMSsrc/lib/cms/auth.tsJWT HS256, bcrypt, refresh em cms_sessions
CRUDsrc/lib/cms/content.tsEntidades + publish/unpublish + revisions
Páginas MDXsrc/lib/cms/pages.tscms_mdx_pages + revalidatePath
Mídiasrc/lib/cms/media.tsUpload, bucket media
Cliente browsersrc/lib/cms-api.tsFetch tipado + refresh interceptor
Managersrc/lib/manager/*Auth, entities registry, métricas, trilhas

Tabelas CMS: migration 0003_cms.sql + RLS em 0004_rls_ttl.sql. Schema completo: docs/data-models-frontend.md.

Rotas do Manager

RotaFunção
/manager/loginLogin Supabase Auth
/manager/dashboardDashboard principal
/manager/[entity]CRUD genérico (fiis, etfs, ativos, glossarios, products, orders…)
/manager/trilhasEditor YouTube (youtube_modules/youtube_videos)
/manager/metricasPageviews (page_views)
/manager/mercado-financeiro/analiseConsulta artefatos + detecção de desatualização
/manager/mercado-financeiro/atualizarMarcar artefatos como atualizados

Variáveis de Ambiente

VariávelPapel
NEXT_PUBLIC_SUPABASE_URLProjeto Supabase
NEXT_PUBLIC_SUPABASE_ANON_KEYAuth browser/SSR
SUPABASE_SERVICE_ROLE_KEYCRUD server-side
MANAGER_ADMIN_EMAILSAllowlist emails do painel
NEXT_PUBLIC_USE_UNIFIED_ADMINRedirect /admin/manager
JWT_SECRETCMS JWT + magic-link comprador
CMS_SEED_EMAIL / CMS_SEED_PASSWORDSeed super_admin
MEDIA_STORAGE / MEDIA_BUCKETStorage mídia (supabase recomendado)

Manutenção e Referências

  • Contratos API: docs/api-contracts-backend.md (CMS) + docs/api-contracts-frontend.md (/api/*)
  • ADR: docs/adr/0001-unificacao-painel-administrativo.md
  • Componentes UI: src/components/admin/ (shell, forms, dashboard) — reutilizados no Manager
  • Testes: Vitest (src/lib/cms/*.test.ts) + Playwright (tests/admin-dashboard.spec.ts)

Pendências conhecidas

  • Rotas /cms/* ainda ativas (API headless) — remoção total depende de migrar 100% dos clientes para Server Actions do Manager.
  • useCMSAuth e links em cms-api.ts ainda referenciam paths /admin/* (redirect cobre com flag ativa).
  • cms_users coexiste com Supabase Auth — migração de perfis pode unificar em admin_profiles no futuro.

Este documento vive em content/docs/arquitetura-software/administracao-cms/index.mdx e reflete o estado pós-unificação (2026-06-26).

On this page