Entrar como:FuncionalidadesDoc
Pular para o conteúdo
← Voltar para a visão geral
✅ ConcluídoCard #58 · M11

Editor Visual (Canva Corporativo)

Marco M11: Marketing & Compras (SULTS-inspired)

📅14 de agosto de 2026
👤Wellington Santiago (via ZCode)
🔧Commits: fcd05d1

📄 Card 58 [M11] — Editor Visual (Canva Corporativo)

📚 Referência SULTS: https://www.sults.com.br/produtos/marketing Editor online nativo com áreas bloqueadas vs. editáveis. Logo/cores/layout bloqueados; textos/preços/imagens locais liberados. Personalização parametrizada pela unidade (endereço, WhatsApp, preço).

🎯 Objetivo

Criar o Editor Visual Corporativo — tipo Canva simplificado, dentro do GENIOON:

  • MASTER cria templates com áreas bloqueadas (logo, cores) e editáveis (texto, preço, imagem local)
  • Franqueados/locais personalizam peças com dados da filial (endereço, WhatsApp, preço)
  • Output em formato digital (PNG/JPG) ou impresso (PDF com sangria)
  • Histórico de versões por unidade
  • Biblioteca de templates sincronizada com Brand Center (Card 57)

📚 Documentação de Referência

  • docs/DESIGN_SYSTEM.md — branding
  • Canvas HTML5 — já usado no Card 14b (Correção Visual)
  • prisma/schema.prisma — novos models

🛠️ Especificação Técnica

Schema Prisma (novo)

model DesignTemplate {
  id              String   @id @default(cuid())
  name            String
  category        String                             // "Instagram Post", "Flyer A5", "Banner"
  widthPx         Int
  heightPx        Int
  backgroundUrl   String?                            // imagem de fundo fixa
  elements        Json                               // [{id, type, locked, props}]
  brandKitId      String?                            // vincula Brand Kit (Card 57)
  isPublished     Boolean  @default(true)
  createdAt       DateTime @default(now())
}

model DesignProject {
  id              String   @id @default(cuid())
  templateId      String
  template        DesignTemplate @relation(fields: [templateId], references: [id])
  branchId        String
  branch          Branch   @relation(fields: [branchId], references: [id])
  elements        Json                               // override do usuário (campos editáveis)
  outputUrl       String?                            // PNG/JPG/PDF gerado (S3)
  status          DesignStatus @default(DRAFT)       // DRAFT, EXPORTED
  createdById     String
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt
}

enum DesignStatus { DRAFT  EXPORTED }

Editor (Canvas HTML5)

  • Reusar infra do Card 14b (canvas com pincel/seta/texto/círculo)
  • Novo: importar imagem de fundo, elementos drag-drop
  • Tipos de elemento: TEXT, IMAGE, SHAPE, LOGO_BRAND
  • Cada elemento tem flag locked (não pode mover/editar) ou editable
  • Output: canvas.toBlob() → upload S3

Rotas (page.tsx)

  • /marca/editor — lista templates + criar novo
  • /marca/editor/[projectId] — editor visual
  • /marca/editor/[projectId]/exportar — formato digital/impresso

Procedures tRPC

  • brand.templates.list (catálogo)
  • brand.projects.create / save / export
  • brand.projects.myList (projetos da filial)

✅ Critérios de Aceite

  1. MASTER cria template com áreas locked + editáveis
  2. LOCAL seleciona template → edita campos liberados
  3. Output em PNG/JPG (digital) ou PDF (impresso)
  4. Histórico de projetos por filial
  5. Elementos locked não podem ser movidos/editados pelo LOCAL
  6. Brand Kit sincronizado (logos/paletas do Card 57)
  7. Build passa + lint OK

🔌 Handoff

  • Componente <DesignEditor /> (canvas HTML5)
  • Bucket design-projects para outputs

🎯 Próximo

Card 59: Implantação de Unidades (Wizard Multi-Etapa)


EXECUCAO — 2026-08-15

1. O que foi implementado

DesignTemplate (elements Json com locked/editáveis) + DesignProject por filial. Editor /marca/editor/[projectId]: elementos posicionados absolute, locked com 🔒, painel lateral de edição, export PNG via canvas HTML5→upload→outputUrl. /marca/editor lista templates+projetos.

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.

← Voltar para a visão geral