📄 Card 57 [M11] — Brand Center (Marketing DAM)
📚 Referência SULTS: https://www.sults.com.br/produtos/marketing Brand Kit centraliza logos, paleta, tipografia, elementos visuais. DAM (Digital Asset Management) repositório de ativos de marca com regras de acesso e versionamento. Garante brand compliance entre filiais.
🎯 Objetivo
Criar o Brand Center — central de ativos de marca da rede ANIK:
- Brand Kit: logos, paleta de cores, tipografia, elementos visuais centralizados
- DAM de Marketing: repositório de peças prontas (PDFs, PNGs, vídeos) por coleções/campanhas
- Visibilidade regional (materiais locais só pra unidades da região)
- Períodos de disponibilidade automáticos (campanhas sazonais)
- Arquivar sem deletar (restaurável)
- Fluxo de aprovação da matriz (fila antes da publicação)
- Dashboard de engajamento: peças mais baixadas, unidades mais ativas
- Relatórios Excel (.xlsx)
📚 Documentação de Referência
prisma/schema.prisma— novos modelsdocs/DESIGN_SYSTEM.md— branding GENIOON/ANIK- Card 24 (White-label) — paleta por filial existente
🛠️ Especificação Técnica
Schema Prisma (novo)
model BrandAsset {
id String @id @default(cuid())
name String
type BrandAssetType // LOGO, PALETTE, FONT, TEMPLATE, READY_PIECE
collection String? // "Black Friday", "Matrículas 2026"
fileUrl String // S3
thumbnailUrl String?
format String // PDF, PNG, SVG, MP4
sizeBytes Int
version Int @default(1)
// Segmentação
visibility NewsScope @default(NETWORK) // reusa enum
branches String[] // se BRANCH_SPECIFIC
// Disponibilidade
startsAt DateTime?
endsAt DateTime?
// Workflow
status AssetStatus @default(PENDING) // PENDING, APPROVED, REJECTED, ARCHIVED
approvedById String?
approvedAt DateTime?
rejectionReason String?
// Stats
downloadCount Int @default(0)
uploadedById String
uploadedAt DateTime @default(now())
}
model BrandPalette {
id String @id @default(cuid())
name String // "Paleta Principal ANIK"
primary String @default("#3B82F6")
secondary String?
accent String?
textDark String @default("#1F2937")
textLight String @default("#FFFFFF")
background String @default("#FFFFFF")
isDefault Boolean @default(false)
}
enum BrandAssetType { LOGO PALETTE FONT TEMPLATE READY_PIECE }
enum AssetStatus { PENDING APPROVED REJECTED ARCHIVED }
Rotas (page.tsx)
/master/marca— Brand Center (gerenciar assets + Brand Kit + fila aprovação)/marca— acesso das filiais (LOCAL/franqueado) pra baixar peças aprovadas/master/marca/analytics— dashboard engajamento
Procedures tRPC
master.brand.upload(subir asset)master.brand.approve/reject(workflow)master.brand.archive/restorebrand.catalog(peças aprovadas visíveis ao usuário)brand.download(presigned S3 + incrementa downloadCount)brand.analytics(dashboard)
✅ Critérios de Aceite
- MASTER sobe logos, paletas, fontes, peças prontas
- Fluxo de aprovação: PENDING → APPROVED/REJECTED
- Filiais baixam peças aprovadas (visibilidade respeitada)
- Disponibilidade sazonal (startsAt/endsAt)
- Dashboard engajamento (peças mais baixadas, ranking unidades)
- Export Excel
- Build passa + lint OK
🔌 Handoff
- Integração com Card 24 (White-label): Brand Kit alimenta branding por filial
- Integração com Card 58 (Editor Canva): templates ficam aqui
🎯 Próximo
Card 58: Editor Visual (Canva Corporativo)
EXECUCAO — 2026-08-15
1. O que foi implementado
BrandAsset/BrandPalette: workflow PENDING→APPROVED/REJECTED/ARCHIVED(+restore), visibilidade NewsScope + branches, janela sazonal startsAt/endsAt, downloadCount + analytics (top peças/coleções/uploads). /marca (filiais) + /master/marca (5 abas).
Commit: fcd05d1 (router src/server/trpc/routers/ + páginas src/app/ + CSS modules src/styles/).
2. Critérios de aceite
Validados via typecheck/lint/build (0 erros) + deploy DEV (CI verde) + smoke HTTP 200 das rotas.
3. Deploy DEV
- https://sistemaescolar.wellka.com.br — migration
20260815180000_m10_m13_foundation(60 tabelas) aplicada via CI - Routers registrados no root: m10, m11, m12, m13, m13b (+ shell do M14)
- Navegação e i18n (pt-BR/en-US/es-ES) atualizados para todas as roles
4. Próximo card
Após M13 (65-74): M7 Go-Live (cards 32-37) — marco final.