Files

3.5 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 em src/app/[locale] alimentadas por conteúdo dinâmico vindo do CMS.
    • Painel Admin em src/app/admin para operação interna (gestão de páginas, serviços, projetos, usuários e mensagens).
  • 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 de config (metadados globais) e rotas públicas estruturadas.
  • Formular pós-edição acionam translation:refresh no 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 de src/app/api/pages/[slug]/route.ts utilizando LibreTranslate + cache em prisma.translation.
  • API auxiliar /api/admin/translate-pages permite 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.mjs e script scripts/checkTranslations.cjs ajudam na auditoria dos timestamps.
  • Endpoint redundante /api/pages/contact foi 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) com LabelWithLimit, aplicados a Home, Sobre e Contato.
  • Limites também reforçados com maxLength para 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 via ToastContext.

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/avatar com modal padrão.
  • Prisma centraliza o schema (User, Project, Service, Message, PageContent, Translation).

7. Histórico de Entregas Relevantes

  1. Estruturação do CMS e rotas dinâmicas para páginas públicas.
  2. Implementação de tradução automática assíncrona + cache.
  3. Criação do painel de notificações com polling/badges.
  4. Inclusão de limites de caracteres visíveis e enforce client-side.
  5. Remoção de API duplicada e ajustes para manter EN/ES sincronizados.

8. Pendências & Próximos Passos

  • Rodar tradução manual para contact e config (EN/ES ainda desatualizados segundo scripts/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.