## 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` + `` 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.