Thème
Architecture générale
Présentation
BTP Chantier Pro est une application web SaaS construite sur une architecture moderne et découplée. Le frontend et le backend sont séparés et communiquent via des API REST et le protocole temps réel de Supabase.
Schéma de l'architecture
Navigateur web | | HTTPS | Nginx (reverse proxy) | |--- / --> Frontend React (port 80/443) |--- /api/ --> Backend Node.js (port 3001) |--- /supabase/ --> Supabase self-hosted (port 8000) |--- /storage/ --> Supabase Storage (MinIO)
Composants principaux
Frontend
- Framework : React 18 avec Vite
- Langage : JavaScript
- Styles : CSS personnalisé avec variables
- Rendu : Single Page Application (SPA)
- Déploiement : fichiers statiques servis par Nginx
Backend
- Runtime : Node.js 20
- Framework : Express.js
- Gestionnaire de processus : PM2
- Rôle : génération de PDF, exports Excel, traitements lourds
Base de données
- Moteur : PostgreSQL 15
- Hébergement : Supabase self-hosted
- Sécurité : Row Level Security (RLS) activé sur toutes les tables
- Accès : via le SDK Supabase depuis le frontend
Authentification
- Fournisseur : Supabase Auth
- Méthode : email et mot de passe
- Sessions : JWT (JSON Web Token)
- Durée de session : 7 jours
Stockage de fichiers
- Solution : Supabase Storage (MinIO)
- Buckets : documents-chantier, photos-chantier
- Accès : URLs signées avec expiration de 5 minutes
Infrastructure
- Hyperviseur : Proxmox VE
- Serveur physique : Intel NUC 16 Go RAM, 1 To SSD
- Système d'exploitation : Debian 12
- Conteneurisation : Docker Compose pour Supabase
- Domaine : waali.at (OVH)
- SSL : Let's Encrypt via Certbot
Flux de données
Authentification
- L'utilisateur saisit ses identifiants dans le frontend
- Le frontend envoie la requête à Supabase Auth
- Supabase Auth vérifie les identifiants et retourne un JWT
- Le JWT est stocké localement dans le navigateur
- Toutes les requêtes suivantes incluent le JWT dans l'en-tête Authorization
Lecture des données
- Le frontend appelle le SDK Supabase avec le JWT
- Supabase vérifie le JWT et applique les politiques RLS
- PostgreSQL retourne les données autorisées
- Le frontend affiche les données
Écriture des données
- Le frontend envoie la donnée via le SDK Supabase
- Supabase vérifie les permissions RLS
- PostgreSQL enregistre la donnée
- Supabase retourne la confirmation
- Le frontend met à jour l'interface
Génération de PDF
- Le frontend envoie les données au backend Node.js via l'API
- Node.js génère le PDF avec jsPDF ou Puppeteer
- Node.js retourne le fichier au frontend
- Le frontend déclenche le téléchargement
Environnements
| Environnement | URL | Description |
|---|---|---|
| Production | https://app.waali.at | Environnement de production |
| Documentation | https://docs.waali.at | Documentation officielle |
| API | https://api.waali.at | Backend Node.js |
| Supabase | https://supabase.waali.at | Console Supabase |
