Hackathon Coti × Criare 2025
1º lugar num hackathon de 24 horas: plataforma que tira a cotação de compras do e-mail e da planilha, com negociação ao vivo entre empresa e fornecedor.
- Ano
- 2025
- Stack
- Java · Spring Boot · PostgreSQL · Angular · Docker · WebSocket
Contexto
Em dezembro de 2025 a Coti Informática e a Criare Sistemas propuseram 24 horas de desenvolvimento contínuo. Nossa equipe de três pessoas, a Javangers, levou o primeiro lugar com uma plataforma de cotações e negociação entre empresas e fornecedores.
O problema é conhecido de quem já comprou para uma empresa: a cotação vive em e-mail e planilha, sem histórico e sem comparação fácil. Na plataforma, a empresa publica o que precisa, fornecedores disputam com propostas, e as duas partes negociam o valor final numa sala de conversa, com tudo registrado.
Decisões técnicas
Monólito modular com Clean Architecture, verificado por teste: cada módulo (identidade, compras, painel, tempo real) tem domínio, aplicação e infraestrutura, com as dependências apontando para dentro. Spring Modulith confere as fronteiras entre módulos e ArchUnit confere as camadas; quebrar uma regra quebra o build. Microserviços ficaram de fora porque fechar um negócio mexe em negociação, cotação e propostas numa transação só.
Autenticação com access token curto (15 minutos, só em memória no front) e refresh token opaco e rotativo em cookie HttpOnly, com detecção de reuso: um token roubado serve uma vez e, se aparecer de novo, todas as sessões do usuário caem. Autorização em duas camadas, perfil no controller e posse no service.
Negociação ao vivo por WebSocket (STOMP), com indicador de digitando, contador de não lidas e avisos em qualquer tela; sem conexão, o front volta a consultar a cada dez segundos. No front, Angular com signals, componentes standalone e componentes próprios no lugar do Bootstrap, com design tokens para o tema claro e escuro.
Rastreio com OpenTelemetry: cada requisição tem um traceId que aparece nos logs, no cabeçalho e no corpo dos erros. Logs em JSON que nunca registram senha, token, e-mail completo nem o conteúdo das negociações, e um teste garante isso.
Resultado
Primeiro lugar. Depois do evento o projeto virou um monorepo com CI no GitHub Actions (build, testes com PostgreSQL real via Testcontainers, teste de fumaça e ponta a ponta com Playwright), CodeQL, Dependabot e demo pública no ar. As fases seguintes passaram a nascer de uma especificação antes do código.
O que eu faria diferente
Começar pelo esquema do banco versionado e pelos testes de arquitetura já nas primeiras horas. Entraram depois e exigiram retrabalho; como critério de aceite desde o início, teriam guiado o resto.