Zenith é um monorepo de finanças compartilhadas pensado como produto real: autenticação segura, dashboard mensal, colaboração entre duas pessoas e um assistente contextual para leitura rápida do mês.
- autenticação com access token, refresh token e renovação de sessão
- ledger compartilhado entre duas pessoas
- dashboard com entradas, saídas, categorias, tendência e leitura de contribuição
- convites entre membros
- assistente financeiro com cotas, controle de acesso e fallback seguro
backend/: Java 21, Spring Boot, PostgreSQLfrontend/: Next.js 16, React 19, TypeScript, Tailwind CSS 4
backend/src/main: API, regras de negócio, segurança e integração com IAbackend/src/test: testes unitários e de controllerfrontend/src/app: rotas, layouts e páginasfrontend/src/components: interface, dashboard, autenticação e experiência da IA
Banco:
docker compose up -dBackend:
Crie backend/.env a partir de backend/.env.example.
cd backend
.\mvnw.cmd spring-boot:runFrontend:
Crie frontend/.env com:
API_URL=http://localhost:8080
SITE_URL=http://localhost:3000cd frontend
npm.cmd install
npm.cmd run devBackend:
DB_URLDB_USERNAMEDB_PASSWORDJWT_SECRETCORS_ALLOWED_ORIGINSAI_MODEOPENAI_API_KEYOPENAI_MODEL
Frontend:
API_URLSITE_URL
O frontend nunca fala diretamente com o provider de IA. Toda chamada passa pelo backend autenticado.
Modos suportados:
AI_MODE=off: desliga o provider e mantém apenas o fallback seguroAI_MODE=local: usa o provider local para desenvolvimentoAI_MODE=openai: usa o provider remoto para homologação ou produção
Comportamento esperado por ambiente:
dev: pode rodar comoffoulocal, sem custo externostaging: normalmente usaopenaicom chave própria e limites mais conservadoresprod: usaopenai, cotas ativas e acesso controlado por conta
Controle de acesso:
- o backend pode bloquear o assistente por usuário
- o frontend respeita esse estado e remove o acesso direto na navegação
- o endpoint continua protegido no servidor, mesmo que alguém tente chamar a API manualmente
Contexto da análise:
- a resposta sempre parte do mês selecionado no frontend
- quando houver histórico suficiente, a IA pode comparar o mês atual com meses anteriores próximos
- a opção de amostra de lançamentos envia uma seleção limitada de transações relevantes do período para enriquecer a resposta
Para produção:
OPENAI_API_KEYdeve existir apenas no backendOPENAI_MODELdefine o modelo usado pelo provider remoto- o acesso pode ser liberado por allowlist e pelo flag
ai_enabled, dependendo do perfil ativo
Backend:
cd backend
.\mvnw.cmd -B verifyFrontend:
cd frontend
npm.cmd run lint
npm.cmd run typecheck
npm.cmd run build- o projeto foi estruturado para deploy independente de frontend e backend
- a camada de IA foi desenhada com fallback seguro para não quebrar a experiência quando o provider estiver indisponível
- a documentação aqui prioriza uso, contexto técnico e comportamento do sistema sem virar playbook operacional