Visão geral
Site institucional premium (projeto de demonstração, "Martins Advocacia" é uma empresa fictícia) com painel administrativo, blog jurídico, chatbot de triagem por área do direito, área do cliente com upload de documento e uma API própria em Node.js/TypeScript.
O que existia antes, e por que precisava mudar
A primeira versão parecia pronta por fora, mas por dentro era frágil: o formulário de contato
fazia alert() de sucesso e descartava os dados sem nunca chamar a API. O painel admin não
pedia login. A área do cliente tinha usuário e senha hardcoded em texto puro no JavaScript,
visível em "ver código-fonte". Os leads ficavam num array em memória, sumindo a cada reinício
do servidor. E o próprio painel renderizava dado de usuário via innerHTML sem escapar nada,
um XSS armazenado clássico.
O que existe agora
Banco SQLite real (nada em memória, nada some ao reiniciar), autenticação com hash de senha e sessão JWT no admin e na área do cliente, upload e download de documento de verdade com isolamento entre clientes, todo formulário do site persistindo de fato, renderização sempre escapada, e rate limit nos formulários públicos. O chatbot de triagem casa a mensagem contra as áreas de atuação reais do escritório e é honesto sobre o que é: um assistente automático, não substitui orientação jurídica.
Testes
39 testes automatizados (Vitest + Supertest) cobrindo autenticação, leads, depoimentos, agendamentos, newsletter, upload/download de documento (incluindo que um cliente não acessa arquivo de outro) e as regras do chatbot.