Plateforme ERP SaaS multi-locataires (multi-tenant) pour l'industrie de la construction (Québec / Canada / États-Unis), publiée sous licence Apache 2.0.
Ce dépôt réunit le code source du produit Constructo AI : un ERP web complet et plusieurs applications satellites (pointage employés, portail B2B/B2C, appels d'offres, vitrine immobilière, estimation publique, rendu 3D), bâties sur un backend FastAPI (Python) et des frontends React (TypeScript / Vite), avec PostgreSQL (un schéma par locataire) comme base de données.
Le code est fourni « tel quel ». Aucune clé d'API, aucun secret et aucune donnée client réelle ne figure dans ce dépôt : toutes les valeurs sensibles sont lues depuis des variables d'environnement (voir
.env.example).
Conçu et développé par Sylvain Leduc, fondateur de Constructo AI Inc.
| Module | Emplacement | Description |
|---|---|---|
| ERP | ERP_REACT/ |
ERP principal : CRM, devis/soumissions, production (bons de travail, Gantt, Kanban), comptabilité, inventaire, paie, RH, documents, assistants IA. |
| Pointeur | MOBILE_REACT/ |
Application PWA de pointage des employés (hors ligne, notifications push, photos de pointage). |
| B2B / B2C | ERP_REACT/backend/routers/b2b*.py |
Portail clients / fournisseurs (devis, bons de commande, suivi). |
| SEAOP | SEAOP_REACT/ |
Plateforme d'appels d'offres publics + répertoire d'entrepreneurs et d'ouvriers. |
| Immobilier | IMMO_REACT/ |
Vitrine immobilière + back-office promoteur (fonds de prévoyance, Loi 16). |
| Estimation Express | ESTIMATION_EXPRESS_REACT/ |
Sous-application publique d'estimation assistée par IA (crédits prépayés). |
| Rendu 3D | ERP_REACT/backend/routers/gemini_image.py, cao*.py, hover.py |
Modélisation 3D (DAO « cao2 »), rendus photoréalistes, plan → 3D. |
- Monorepo : un backend FastAPI par application + un frontend React par application.
- Multi-tenant : isolation par schéma PostgreSQL (un schéma
publicpartagé + un schéma par locataire). Le provisionnement des locataires est géré partenant_manager.pyetauto_repair_tenants_startup.py. - Co-hébergement : le service ERP (
ERP_REACT) monte aussi, sous des sous-chemins, les applications satellites —/mobile(Pointeur),/immo(Immobilier),/seaop(SEAOP),/estimation(Estimation Express). Chaque application peut également fonctionner de manière autonome. - Modules partagés : plusieurs modules Python à la racine du dépôt sont des dépendances partagées du backend (couche base de données, provisionnement, facturation Stripe, suivi de l'usage IA, utilitaires). Voir la structure ci-dessous.
.
├── ERP_REACT/ ERP principal (backend FastAPI + frontend React)
│ ├── backend/ erp_api.py + ~88 routers + erp_database/auth/stripe/config
│ └── frontend/ SPA React (pages, composants, stores Zustand, i18n FR/EN)
├── MOBILE_REACT/ Pointeur (backend FastAPI + PWA React)
├── IMMO_REACT/ Immobilier (backend + frontend)
├── SEAOP_REACT/ Appels d'offres (backend + frontend)
├── ESTIMATION_EXPRESS_REACT/ Estimation publique (frontend ; backend dans ERP_REACT)
├── METRE_PDF/ Module de métré sur PDF (backend + config)
├── modules/email_manager/ Chiffrement + envoi de courriels (IMAP/SMTP)
│
├── erp_database.py Modules Python partagés (dépendances du backend) :
├── tenant_manager.py provisionnement des locataires
├── database_config.py configuration du pool PostgreSQL
├── stripe_manager.py abonnements et crédits prépayés
├── ai_usage_tracker.py suivi de l'usage et des coûts IA
├── security_utils.py hachage de mots de passe, validation, sanitation
├── devis_manager.py logique des devis
├── attachments_manager.py gestion des pièces jointes
├── cache_manager.py cache applicatif
├── cad_viewer.py lecture de fichiers CAO
├── ... (autres modules de migration / optimisation / audit)
│
├── requirements.txt dépendances Python
├── .env.example gabarit de configuration (à copier en .env)
├── LICENSE Apache License 2.0
└── NOTICE
- Backend : Python 3.11+, FastAPI, Uvicorn, psycopg2, PostgreSQL 15+.
- Frontend : React 18, TypeScript, Vite, Zustand, Tailwind CSS.
- Paiements : Stripe.
- IA : Anthropic Claude (assistants, estimation), Google Gemini (rendu d'images).
- Intégrations : Hover (plan → 3D), VAPI (agent vocal), QuickBooks, IMAP/SMTP.
- Python 3.11+
- Node.js 18+
- PostgreSQL 15+
- (optionnel) un compte pour chaque service externe utilisé (Stripe, Anthropic, etc.)
cp .env.example .env
# Renseignez au minimum DATABASE_URL et un secret JWT.
# Les autres variables ne sont requises que pour les fonctionnalités correspondantes.python -m venv .venv
source .venv/bin/activate # Windows : .venv\Scripts\activate
pip install -r requirements.txt
cd ERP_REACT
uvicorn backend.erp_api:app --reload --port 8003cd ERP_REACT/frontend
npm install
npm run dev # développement
# ou : npm run build pour un bundle de productionLes applications satellites (MOBILE_REACT, IMMO_REACT, SEAOP_REACT,
ESTIMATION_EXPRESS_REACT) suivent le même schéma : un backend/ FastAPI (le cas
échéant) et un frontend/ Vite, chacun avec son propre .env.example.
Toutes les valeurs sensibles proviennent de l'environnement. Principales variables
(voir .env.example et les .env.example de chaque application pour la liste complète) :
| Variable | Rôle |
|---|---|
DATABASE_URL |
Chaîne de connexion PostgreSQL (obligatoire). |
ERP_JWT_SECRET |
Secret de signature des jetons JWT de l'ERP (obligatoire). |
ANTHROPIC_API_KEY |
Clé Anthropic Claude (assistants IA, estimation). |
GOOGLE_GEMINI_API_KEY |
Clé Google Gemini (rendu d'images 3D). |
STRIPE_SECRET_KEY / STRIPE_WEBHOOK_SECRET |
Paiements et abonnements. |
SMTP_HOST / SMTP_USER / SMTP_PASSWORD |
Envoi de courriels. |
HOVER_CLIENT_ID / HOVER_CLIENT_SECRET |
Intégration Hover (plan → 3D). |
Les fonctionnalités dont les variables ne sont pas renseignées se désactivent proprement (elles ne bloquent pas le démarrage).
- Ce dépôt est extrait d'un produit en exploitation. Certaines fonctionnalités
(paiements, IA, agent vocal, Hover) nécessitent des comptes tiers et les clés
correspondantes dans
.env. - La base de données est multi-locataires : le premier démarrage crée les structures partagées ; le provisionnement d'un locataire crée son schéma dédié.
- Aucune donnée de production, aucun identifiant réel et aucun secret ne sont
inclus. Fournissez vos propres valeurs via
.env.
Constructo AI est né sur le terrain, de l'expérience concrète d'un entrepreneur en construction et en fabrication. J'ai voulu bâtir l'outil que j'aurais aimé avoir dès le départ : un écosystème complet et cohérent, pensé pour la réalité des chantiers d'ici — du premier devis jusqu'à la comptabilité.
En ouvrant ce code, mon souhait est simple : le partager avec la communauté — entrepreneurs, développeurs et étudiants — pour qu'il serve, inspire et continue de s'améliorer. Merci de prendre le temps de l'explorer ; c'est une fierté et un privilège de le rendre accessible.
— Sylvain Leduc, fondateur et développeur de Constructo AI Inc.
Sylvain Leduc — fondateur de Constructo AI Inc. (Farnham, Québec, Canada)
constructoai.ca · info@constructoai.ca
Distribué sous licence Apache 2.0. Voir les fichiers LICENSE et
NOTICE.
Copyright 2026 Constructo AI Inc. — Créé par Sylvain Leduc.