7.3 KiB
7.3 KiB
Resumo Geral do Projeto (Atualizado em 27/11/2025)
1. Visão Geral
- Plataforma Next.js full-stack com duas frentes principais:
- Site público dentro de
src/app/(public)e rotas localizadas emsrc/app/[locale]alimentadas por conteúdo dinâmico vindo do CMS. - Painel Admin em
src/app/adminpara operação interna (gestão de páginas, serviços, projetos, usuários e mensagens).
- Site público dentro de
- Back-end único via rotas App Router + Prisma/PostgreSQL (
prisma/pageContent,project,service, etc.).
2. Conteúdo Dinâmico & CMS
- CRUD de páginas no admin acessa
/api/pages(genérico) e/api/pages/[slug](detalhe com autenticação JWT). - Páginas gerenciadas até agora:
home,sobre,contato, além deconfig(metadados globais) e rotas públicas estruturadas. - Formular pós-edição acionam
translation:refreshno front para atualizar badges do sininho. - Layout administrativo (
admin/layout.tsx) fornece sidebar, menu, avatar modal, confirmação padrão e o painel de traduções com polling + badge.
3. Plataforma de Traduções
- Salvar conteúdo em PT dispara
translateInBackground(EN/ES) dentro desrc/app/api/pages/[slug]/route.tsutilizando LibreTranslate + cache emprisma.translation. - API auxiliar
/api/admin/translate-pagespermite rodadas manuais e retorno de status consolidado. - Front exibe estado por slug (Concluída / Em andamento) e dispara notificações quando pendências são resolvidas.
- Job
prisma/check-translations.mjse scriptscripts/checkTranslations.cjsajudam na auditoria dos timestamps. - Endpoint redundante
/api/pages/contactfoi removido para evitar inconsistências; tudo passa pelo handler dinâmico.
4. Experiência do Editor
- Campos do CMS agora possuem limites visuais via
CharLimitBadge(estilo Twitter) comLabelWithLimit, aplicados a Home, Sobre e Contato. - Limites também reforçados com
maxLengthpara impedir que textos comprometam o layout público. - Foram definidos ícones reutilizáveis (selector custom) e componentes de formulário padronizados.
5. Site Público
- Utiliza
useTranslatedContent+<T>para mesclar conteúdo dinâmico com fallback estático. - Páginas principais refletem exatamente o que foi configurado no admin (banner hero, diferenciais, CTA, depoimentos, etc.).
- Formulário de contato envia para
/api/messages, com feedback viaToastContext.
6. Segurança e Infra
- Autenticação do admin baseada em cookie
auth_token(JWT) validado nas rotas protegidas. - Upload/remoção de avatar gerenciado via
/api/auth/avatarcom modal padrão. - Prisma centraliza o schema (
User,Project,Service,Message,PageContent,Translation).
7. Histórico de Entregas Relevantes
- Estruturação do CMS e rotas dinâmicas para páginas públicas.
- Implementação de tradução automática assíncrona + cache.
- Criação do painel de notificações com polling/badges.
- Inclusão de limites de caracteres visíveis e enforce client-side.
- Remoção de API duplicada e ajustes para manter EN/ES sincronizados.
8. Pendências & Próximos Passos
- Rodar tradução manual para
contacteconfig(EN/ES ainda desatualizados segundoscripts/checkTranslations.cjs). - Expandir o CMS para outras páginas (ex.: serviços e projetos públicos) caso necessário.
- Opcional: reforçar validação server-side dos limites e criar testes automatizados para o fluxo de tradução.
Este resumo deve servir como onboarding rápido para qualquer pessoa ou nova IA que precise continuar o desenvolvimento.
CMS 1.1 - Atualizações (27/11/2025)
🔧 Correções de Infraestrutura
- Tipagem de
paramspara Next.js 15 nas API routes (/api/projects/[id],/api/services/[id]) - Correção para usar
Promise<{ id: string }>eawait params
📊 Dashboard Admin Dinâmico
O dashboard agora exibe dados reais do banco de dados:
| Estatística | Descrição |
|---|---|
| Projetos | Total e quantidade de ativos |
| Mensagens | Total e quantidade não lidas |
| Serviços | Total e quantidade ativos |
Novas funcionalidades:
- Últimas 5 mensagens com iniciais do nome, tempo relativo e indicador de não lida
- Últimos 5 projetos com imagem de capa, categoria e badge de status
- Cards clicáveis que redirecionam para as páginas correspondentes
- Botões "Ver todos" funcionais
🛠️ Módulo de Serviços (CRUD Completo)
Admin - Lista de Serviços (/admin/servicos)
- Dados dinâmicos da API
/api/services - Filtro por status (Todos/Ativos/Inativos)
- Busca por título e descrição
- Botões de Editar e Excluir
- Modal de confirmação antes de excluir
Admin - Novo Serviço (/admin/servicos/novo)
- Formulário conectado à API
POST /api/services - Seletor visual de ícones em galeria com busca em tempo real
- 70+ ícones organizados por categoria:
- Veículos e Transporte
- Ferramentas e Engenharia
- Documentos e Laudos
- Segurança
- Construção e Equipamentos
- Inspeção e Verificação
- Geral
- Campos: título, ícone, status, ordem, descrição curta, descrição completa
Admin - Editar Serviço (/admin/servicos/[id]/editar) - NOVO
- Página criada do zero
- Carrega dados do serviço existente via
GET /api/services/:id - Atualiza via
PUT /api/services/:id - Mesmo seletor visual de ícones da página de criação
Páginas Públicas de Serviços
/servicose/[locale]/servicosagora são dinâmicas- Exibe apenas serviços ativos
- Ordenados pelo campo
order - Fallback para dados estáticos se API vazia
- Loading state durante carregamento
📁 Módulo de Projetos (Melhorias)
Admin - Lista de Projetos (/admin/projetos)
- Filtros por categoria e status
- Busca por título, cliente e descrição
- Botão de Editar em cada projeto
Admin - Editar Projeto (/admin/projetos/[id]/editar) - NOVO
- Página criada do zero
- Carrega dados do projeto existente
- Upload de imagem de capa
- Upload de galeria de imagens (até 8)
- Todos os campos editáveis
🎨 Melhorias de UX/UI
| Feature | Descrição |
|---|---|
| Seletor de Ícones | Galeria visual clicável com busca em tempo real |
| Loading States | Indicadores visuais de carregamento em todas as páginas |
| Toasts | Feedback de sucesso e erro nas operações |
| Confirmação | Modal antes de ações destrutivas (exclusão) |
| Navegação | Links e botões funcionais em todo admin |
📁 Arquivos Modificados/Criados
frontend/src/app/admin/
├── page.tsx # Dashboard com dados reais
├── projetos/
│ ├── page.tsx # Lista com filtros e busca
│ └── [id]/editar/page.tsx # ✨ NOVO - Edição de projeto
└── servicos/
├── page.tsx # Lista com filtros e busca
├── novo/page.tsx # Seletor visual de ícones
└── [id]/editar/page.tsx # ✨ NOVO - Edição de serviço
frontend/src/app/
├── (public)/servicos/page.tsx # Página pública dinâmica
└── [locale]/servicos/page.tsx # Página com locale dinâmica
frontend/src/app/api/projects/[id]/
└── route.ts # Corrigido tipagem Next.js 15
Branch: cms-1.1
Status: ✅ Produção