Aller au contenu
Q
QuoteNode

Wiki

Architecture de QuoteNode

Vue d'ensemble technique de l'architecture QuoteNode : backend, frontend, base de donnees et modele de deploiement.

Architecture de QuoteNode

QuoteNode est une application single-tenant concue pour un deploiement self-hosted. Chaque instance est isolee et dispose de sa propre base de donnees, de son propre stockage de fichiers et de ses propres processus applicatifs.

Vue d’ensemble du systeme

Navigateur client


Caddy (Reverse Proxy, HTTPS)

     ├── /api/*    → Backend Spring Boot (Java 25)
     ├── /offer/*  → Backend Spring Boot (pages d'offres publiques)
     └── /*        → Frontend Vue 3 (Vite, SPA)


                   PostgreSQL 16

Backend

Le backend est une application Java 25 construite avec Spring Boot 4. Il gere :

  • API REST — toute la logique metier exposee via des endpoints versionnes
  • Authentification — basee sur des sessions avec cookies chiffres et 2FA (TOTP)
  • Autorisation — controle d’acces par role avec verifications par endpoint
  • Acces base — Spring Data JPA avec migrations Flyway
  • Generation PDF — templates Thymeleaf rendus en HTML puis convertis en PDF via Gotenberg
  • Email — integration SMTP asynchrone avec retry et logging
  • Pages d’offres publiques — HTML rendu cote serveur pour les liens d’offre client
  • Journal d’audit — tracking append-only des mutations
  • Scheduling — jobs de fond pour expiration des offres, anonymisation IP et digests de notifications

Decisions de conception importantes :

  • Pas de multi-tenant — l’application sert exactement une seule organisation. Cela elimine la complexite d’isolation tenant et simplifie le raisonnement securite.
  • Migrations Flyway — les changements de schema sont uniquement additifs. Les colonnes ne sont jamais supprimees ; elles sont renommees avec un prefixe deprecated_.
  • Snapshots immuables — les donnees d’offre sont capturees sous forme de snapshot JSON au moment de l’envoi. Les PDF sont toujours rendus a partir de snapshots, jamais a partir de donnees vivantes.
  • Tarification deterministe — tous les calculs suivent un ordre defini avec un arrondi configurable. Les resultats sont stockes pour audit.

Frontend

Le frontend est une application single-page Vue 3 construite avec Vite :

  • Framework UI — bibliotheque de composants PrimeVue 4
  • Styling — Tailwind CSS 4
  • Etat — stores Pinia 3
  • Routage — Vue Router 5 avec route guards bases sur les roles
  • i18n — vue-i18n avec support actif pour l’anglais, le polonais, l’allemand, le francais, l’espagnol, l’italien et le portugais
  • Client API — client HTTP type appele contre la REST API backend

Le frontend est servi comme assets statiques par Caddy. Il communique exclusivement avec le backend via l’API REST.

Base de donnees

PostgreSQL 16 est la seule base de donnees prise en charge :

  • Gestion du schema — migrations Flyway, lancees automatiquement au demarrage du backend
  • Entites clefs — clients, contacts, offres, lignes d’offre, produits, regles de prix, utilisateurs, journaux d’audit, notifications
  • Denormalisation — les totaux d’offre sont stockes dans une table dediee pour des requetes rapides
  • Vues — vue pipeline d’offre avec lateral join sur les derniers taux FX

Generation PDF

La generation PDF suit un pipeline a deux etapes :

  1. Thymeleaf rend le snapshot d’offre en document HTML avec CSS inline
  2. Gotenberg (conteneur base sur Chromium) convertit ce HTML en PDF pret a l’impression

Deux modes sont pris en charge :

  • Synchrone — pour les offres avec moins de 50 lignes, le PDF est genere inline (moins de 3 secondes)
  • Asynchrone — pour les grosses offres, un job de fond traite le PDF et notifie l’utilisateur une fois pret

Deploiement

QuoteNode est deploye avec Docker Compose :

  • Conteneur backend — Java 25 (Eclipse Temurin)
  • Conteneur frontend — Node 24 + serveur Vite en developpement ou build statique en production
  • Conteneur base — PostgreSQL 16
  • Reverse proxy — Caddy 2 avec HTTPS automatique
  • Moteur PDF — Gotenberg
  • Tests mail — Mailpit (developpement uniquement)

L’ensemble de la stack tourne comme un seul projet Docker Compose sans dependance a des services externes. Elle peut fonctionner dans des environnements air-gapped.

Licences

Les licences sont des fichiers signes avec Ed25519 et verifies hors ligne. Le systeme controle :

  • l’edition (Free, Pro, Business, Enterprise),
  • le nombre maximal d’utilisateurs,
  • la date d’expiration,
  • les feature flags (white-label, advanced templates).

Aucun serveur de licence externe n’est contacte. Une licence expiree ne desactive aucune fonctionnalite. Le seul effet visible est l’apparition du badge “Powered by QuoteNode” sur les surfaces visibles par le client et d’un rappel de renouvellement dans l’interface.

Last reviewed: Recently