slug: "ventilo-pro" ref: "S6_V03" title: "VentiloPro" year: 2026 client: "Projet personnel d'Olivier Cloutier" typology: "Vitrine portfolio · Plateforme SaaS" stack: ["Next.js 15", "TypeScript", "Prisma", "PostgreSQL", "Stripe"] hosting: "Hetzner Helsinki · Production active" duration: "Itération continue" abstract: "Plateforme SaaS de gestion. Monorepo pnpm structuré (apps, packages, prisma, infra). Architecture multi-services, facturation Stripe, dashboards opérationnels." status: "vitrine" category: "vitrine"
VentiloPro
- Année
- 2026
- Client
- Projet personnel
- Référence
- S6_V03
- Typologie
- SaaS
- Année
- 2026
- Code
- ~/_Projets_Dev/ventilopro-dev
VentiloPro est la plateforme SaaS la plus structurée du portefeuille — monorepo pnpm avec quatre dossiers (apps, packages, prisma, infra), gestion utilisateurs, facturation Stripe, dashboards opérationnels. Le chantier le plus mature techniquement.
Architecture monorepo
Quatre dossiers structurent le repo : apps/ contient les applications front (web public,
back-office admin, dashboards), packages/ héberge les librairies partagées (UI, schémas
Prisma, utilitaires), prisma/ centralise le schéma de base de données et les migrations
PostgreSQL, et infra/ documente le déploiement.
Cette structure paie chaque jour. Quand on modifie un type partagé, TypeScript détecte les ruptures dans les trois apps simultanément. Quand on ajoute une migration Prisma, elle s'applique au schéma central. Quand on déploie, tout est versionné dans un seul commit.
Facturation et conformité
La facturation Stripe est intégrée via webhooks sécurisés (signature HMAC, idempotency keys, rétention des événements 90 jours). Les transactions sont stockées avec un journal d'audit horodaté qui permet la reddition de comptes fiscale au Québec.
La plateforme tient les exigences Loi 25 : politique de confidentialité versionnée, registre des incidents, RPRP désigné, durée de conservation documentée par type de donnée, mécanisme d'export et de suppression sur demande utilisateur.
Production active à Helsinki
VentiloPro tourne en production sur le même serveur Hetzner Helsinki que studiosixieme.com. La cohabitation est gérée par nginx (vhost dédié, port 3000 pour le service web, port 8000 pour l'API, port 8100 pour les agents internes). Postgres et Redis sont locaux, conteneurisés.
L'uptime depuis le dernier redémarrage est mesuré sur la page /laboratoire du studio
via la même API /proc/uptime.
- Next.js 15
- TypeScript
- Prisma
- PostgreSQL
- Stripe
- Hetzner Helsinki