Wiki
Stack tecnologico
Porque o QuoteNode usa Java, Spring Boot, Vue e PostgreSQL, e que trade-offs isso implica para seguranca, operacao e performance.
Stack tecnologico
O QuoteNode escolhe um stack tecnico orientado para seguranca, legibilidade e manutenibilidade a longo prazo.
Porque Java 25 e Spring Boot 4
Seguranca como criterio principal
O QuoteNode lida com dados comerciais sensiveis: clientes, estrategias de pricing, negociacao de propostas e relacoes de negocio. O stack precisa de ser testado em ambientes onde falhas de seguranca teem consequencias reais.
Java e Spring Boot continuam a ser escolhas normais em banca, seguros, saude e administracao publica. Isso importa por varios motivos:
- modelo de seguranca maduro - Spring Security fornece autenticacao, autorizacao, sessoes, CSRF e headers de seguranca sem reinventar primitives
- type safety - o sistema de tipos do Java apanha classes inteiras de erros em compile time
- memory safety - a JVM evita um conjunto importante de vulnerabilidades de corrupcao de memoria
- maturidade do ecossistema - Flyway, Hibernate, Thymeleaf e Testcontainers teem historico forte em sistemas empresariais
Porque nao Go, Rust ou Node.js?
Estas alternativas podem ser boas noutros produtos, mas para QuoteNode:
- Go - muito bom para servicos de rede, mas menos ergonomico para regras de negocio densas, modelacao rica e ecossistema enterprise
- Rust - excelente em performance e seguranca de memoria, mas com custo elevado em velocidade de entrega para uma plataforma business
- Node.js - rapido para prototipar, mas menos forte para uma plataforma de calculo financeiro e seguranca sensivel
O que isto implica em recursos
Um backend Java consome mais memoria do que alternativas equivalentes em Go ou Rust. Para o QuoteNode isso e um trade-off assumido: em troca, ganhas type system, tooling de seguranca, bibliotecas maduras e maior velocidade de evolucao segura.
PostgreSQL 16
O PostgreSQL fornece:
- transacoes ACID
- suporte JSONB
- extensoes maduras
- backup tooling fiavel
Tambem suporta:
- snapshots historicos em JSONB
- extensoes como
pgcryptoepg_trgm pg_dumpconsistente para backups online
Cifragem de dados
Campos sensiveis sao cifrados na camada aplicacional com AES-256-GCM.
Sempre cifrados:
- segredos TOTP
- credenciais SMTP
Opcionalmente cifrados quando ENCRYPT_PII=true:
- PII de clientes
- PII de contactos
- PII de fornecedores
- PII de utilizadores
- dados de order intent
Isto implica uma disciplina operacional forte em torno de DB_ENCRYPTION_KEY.
Frontend com Vue 3, Vite, PrimeVue 4 e Tailwind CSS 4
- Vue 3 oferece uma UI reativa com bom suporte TypeScript
- PrimeVue 4 fornece componentes enterprise maduros
- Tailwind CSS 4 ajuda a manter consistencia visual
- Vite melhora produtividade de desenvolvimento
- vue-i18n sustenta a internacionalizacao
O frontend comunica com o backend apenas via API REST tipada e e servido como ativos estaticos.
Porque nao tentamos minimizar o stack a todo o custo
O QuoteNode nao e um microservico descartavel nem uma landing page. E uma plataforma business com:
- calculo financeiro
- regras de IVA
- snapshots historicos
- auditoria
- PDF com branding
- autenticao e autorizacao
Neste contexto, a clareza e previsibilidade pesam mais do que reduzir algumas centenas de megabytes de RAM.
Gotenberg e Caddy
O Gotenberg isola a geracao PDF e o Caddy fornece reverse proxy com HTTPS automatico e operacao simples.
Gotenberg
O Gotenberg fornece rendering HTML para PDF com Chromium, suportando CSS moderno, paginacao e headers/footers sem acoplar o browser ao backend.
Caddy
O Caddy simplifica TLS automatico, proxy reverso e configuracao declarativa. Em modelos como Coolify, o proxy da plataforma pode assumir esse papel.
Requisitos totais de recursos
| Componente | RAM tipica | Disco | CPU |
|---|---|---|---|
| Backend | 512 MB - 1.5 GB | minima | 1 core |
| PostgreSQL 16 | 256 MB - 512 MB | 1-10 GB | partilhado |
| Frontend | ~20 MB | ~50 MB | residual |
| Gotenberg | 200-400 MB | ~500 MB | burst |
| Caddy | ~20 MB | minima | residual |
| Total | ~1.5 - 2.5 GB | ~2-12 GB | 2 cores |
Trade-offs
O stack nao privilegia o footprint minimo absoluto. Privilegia previsibilidade, maturidade tecnica, auditabilidade e capacidade de manutencao num produto que lida com dados comerciais sensiveis.
Adequacao operacional
Para pequenas e medias equipas, o custo de infraestrutura continua razoavel e o beneficio em controlo, branding e propriedade dos dados tende a compensar o modelo self-hosted.
O produto foi pensado para organizacoes entre 1 e 50 utilizadores, onde uma stack self-hosted com 4 GB de RAM e 2 cores continua a ser barata face ao custo mensal acumulado de SaaS comercial.
Perfil de organizacoes para quem este stack faz sentido
Este stack e particularmente adequado para:
- freelancers e consultores que querem propostas profissionais sem depender de CRM enterprise
- pequenas agencias que precisam de visibilidade de equipa e controlo sobre dados
- empresas medias com operacao comercial estruturada, auditoria e analytics de pipeline
Para estes cenarios, o custo extra de um backend Java continua operacionalmente irrelevante face aos ganhos em seguranca, governanca e previsibilidade.
Racional de manutencao a longo prazo
Outro motivo importante para este stack e a manutencao ao longo de varios anos. O QuoteNode nao foi desenhado como um prototipo descartavel. Foi desenhado como um produto que precisa de atravessar:
- mudancas de pricing
- alteracoes legais e fiscais
- evolucao de templates de documentos
- novas politicas de seguranca
- novas integracoes de email, backup e analytics
Numa base assim, tooling maduro e convencoes previsiveis contam muito. Uma equipa que entra no projeto mais tarde deve conseguir compreender rapidamente:
- onde estao as regras de negocio
- como os dados sao persistidos
- como os snapshots preservam historico
- como o PDF e gerado
- como o frontend comunica com a API
Esse custo de manutencao futura e mais importante do que ganhar alguma leveza imediata de runtime.
Impacto no modelo de hosting
O stack escolhido encaixa bem em modelos comuns de self-hosting:
- VPS classico com Docker Compose
- servidor on-premise pequeno
- ambiente virtualizado em cloud privada
- plataformas self-hosted como Coolify
Isto significa que o produto nao depende de uma topologia exotica nem de servicos geridos muito especificos. A portabilidade operacional e um objetivo explicito.
Ao mesmo tempo, a stack continua a permitir boas praticas de producao:
- reverse proxy com HTTPS
- backups remotos
- observabilidade via logs
- isolamento de servicos em contentores
- atualizacoes relativamente simples por imagem Docker
Efeito na previsibilidade funcional
Este stack ajuda tambem na previsibilidade do comportamento funcional. Isso e importante porque o QuoteNode trabalha com:
- totais monetarios
- IVA por linha
- historico de propostas
- controlo de estados
- output documental orientado ao cliente
Nestes cenarios, bugs subtis podem ter impacto comercial real. Uma base tecnologica fortemente tipada e com bibliotecas maduras reduz a probabilidade de erros silenciosos em fluxos centrais.
Tambem melhora a auditabilidade. Quando um administrador ou programador precisa de explicar:
- porque determinado total foi calculado
- porque uma proposta ficou num certo estado
- porque um PDF foi gerado com uma versao especifica de snapshot
- porque um campo sensivel ficou cifrado
e preferivel ter uma stack com fronteiras claras e convencoes estaveis.