3.5 KiB
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 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.