Wiki
Arquitetura do QuoteNode
Visao tecnica da arquitetura do sistema QuoteNode: backend, frontend, base de dados e modelo de deployment.
Arquitetura do QuoteNode
O QuoteNode e uma aplicacao single-tenant concebida para deployment self-hosted. Cada instancia e isolada e contem a sua propria base de dados, armazenamento de ficheiros e processos aplicacionais.
Visao geral do sistema
Browser cliente
│
▼
Caddy (reverse proxy, HTTPS)
│
├── /api/* → Backend Spring Boot (Java 25)
├── /offer/* → Backend Spring Boot (paginas publicas de propostas)
└── /* → Frontend Vue 3 (Vite, SPA)
│
▼
PostgreSQL 16
Backend
O backend e uma aplicacao Java 25 construida com Spring Boot 4. Trata de:
- API REST versionada
- autenticacao por sessao com cookies cifrados e 2FA TOTP
- autorizacao por perfil
- acesso a dados com Spring Data JPA e Flyway
- geracao de PDF
- integracao SMTP assincrona
- paginas publicas de propostas
- logging de auditoria append-only
- jobs agendados para expiracao, anonimizacao de IP e digests
Decisoes de arquitetura
- Sem multi-tenancy - cada instancia serve exatamente uma organizacao
- Migracoes Flyway - alteracoes de schema sao aditivas; colunas nao sao removidas e podem ser descontinuadas por prefixo
- Snapshots imutaveis - os dados da proposta sao capturados em JSON no momento do envio
- Pricing deterministico - todos os calculos seguem uma ordem definida e guardam resultados para auditoria
Frontend
O frontend e uma SPA Vue 3 construída com:
- PrimeVue 4
- Tailwind CSS 4
- Pinia 3
- Vue Router 5
- vue-i18n
- cliente HTTP tipado
O frontend e servido como conjunto de ativos estaticos e comunica com o backend apenas atraves da API REST.
Base de dados
O PostgreSQL 16 e a unica base de dados suportada. Entre as entidades principais estao:
- clientes
- contactos
- propostas
- linhas de proposta
- produtos
- regras de preco
- utilizadores
- logs de auditoria
- notificacoes
O schema e gerido por Flyway e aplicado no arranque do backend. Totais de propostas tambem podem ser guardados em estruturas denormalizadas para pesquisa e reporting mais rapido.
Geracao de PDF
A geracao de PDF funciona em duas etapas:
- o Thymeleaf renderiza o snapshot da proposta em HTML
- o Gotenberg converte esse HTML em PDF
Existem dois modos suportados:
- Sincrono - para propostas pequenas, com resposta inline
- Assincrono - para propostas maiores, processadas por job com notificacao posterior
Deployment
O deployment tipico usa Docker Compose com:
- backend Java 25
- frontend Vue 3 estatico
- PostgreSQL 16
- Caddy 2 com HTTPS automatico
- Gotenberg
- Mailpit em desenvolvimento
Toda a stack pode correr como um unico projeto Docker Compose, sem dependencias externas obrigatorias. Isto torna o produto adequado a ambientes self-hosted e ate a cenarios isolados.
Licenciamento
As licencas sao ficheiros assinados com Ed25519 e validados offline. O sistema verifica:
- edicao
- numero maximo de utilizadores
- data de expiracao
- feature flags
Nao existe dependencia de um servidor externo para validar cada operacao. Mesmo com expiracao, o comportamento esperado e o produto manter-se funcional com sinais de renovacao e branding associados ao plano.