Retour aux projets
Ragboost

Ragboost

Plateforme SaaS Multi-Tenant de Chatbots IA

Rôle: Full Stack Developer | Fondateur
Période: Octobre 2024 - Présent
En Développement (85%)
Client: Projet Personnel

Aperçu

Contexte

Le marché des chatbots IA est en croissance, mais les solutions entreprise sont chères pour les PME. Les entreprises font face à des coûts élevés par message et stockage, une complexité technique pour intégrer le RAG, des widgets génériques qui ne représentent pas la marque, un manque de collaboration en équipe, et des données isolées non exploitées. L'opportunité : créer une alternative accessible avec des fonctionnalités avancées pour les entreprises de toutes tailles.

Solution

Développement d'une plateforme SaaS complète qui démocratise l'accès aux chatbots IA avec des prix accessibles, simplifie la création d'assistants sans code, évolue avec une architecture multi-tenant robuste, et monétise avec des plans flexibles via Stripe. La plateforme permet aux entreprises de créer des assistants virtuels contextualisés avec leurs propres documents utilisant la technologie RAG (Retrieval-Augmented Generation), avec un système de collaboration en équipe avec RBAC complet et support de 4 langues.

Mon Rôle

En tant que fondateur et développeur full stack, j'ai conçu et implémenté toute l'architecture du système. Côté backend, j'ai développé Clean Architecture avec Either Monad, Use Case Pattern et Domain Events. Côté frontend, j'ai implémenté TanStack Query avec Optimistic Updates, système d'authentification cross-subdomain, et routage file-based avec TanStack Router. J'ai aussi réalisé tout le design UI/UX et les intégrations avec Stripe, service RAG open source, et système d'emails.

Stack Technique

Frontend

React
TypeScript
Vite
TanStack Router
TanStack Query
Tailwind CSS
shadcn/ui
Radix UI
React Hook Form
Zod
i18next
Recharts
Axios
Sonner
Lucide React

Backend

Fastify
TypeScript
Prisma
PostgreSQL
JWT
bcryptjs
Stripe
Nodemailer
Swagger
Zod

Projets

1

Backend API

API REST Multi-Tenant avec Clean Architecture

~52 000
Lignes de Code
200+
Fichiers
10
Modules
17
Entities

API REST robuste avec architecture clean, 10 modules de domaine, système de permissions granulaire (RBAC) avec 50+ permissions, intégration Stripe pour billing, et Domain Events pour la communication entre modules.

Fonctionnalités

01
Clean Architecture

Séparation en couches : routes → controllers → use-cases → repositories → entities

02
Either Monad

Gestion fonctionnelle des erreurs avec Either<Error, Success> dans tous les use cases

03
Multi-Tenancy

Isolation complète des données par tenant via subdomain avec middleware de contexte

04
RBAC Granulaire

50+ permissions sur 4 niveaux de rôles (owner, admin, curator, user)

05
Domain Events

Communication asynchrone entre modules pour découplage

06
Webhook Service

Handlers pour événements Stripe (checkout, subscription, invoice) avec vérification de signature

07
Factory Pattern

Injection de dépendances manuelle sans container, facile à tester et débugger

08
Zod + OpenAPI

Validation de schemas avec génération automatique de documentation Swagger

09
JWT Double

Access token (15min) + refresh token (7j) en cookie httpOnly

10
Rate Limiting

Protection des endpoints avec limites par IP et utilisateur

11
Intégration RAG

Connexion avec service open source pour traitement de documents et recherche sémantique

12
Système d'Invitations

Invitations par email avec tracking, expiration et rôles attribuables

13
Abonnement avec Addons

Système flexible de plans Stripe avec addons modulaires (sièges supplémentaires, stockage, appels API)

14
Billing Complet

Checkout sessions, portail client, factures, proration, périodes d'essai, annulation

Design Patterns

Either Monad Pattern
Use Case Pattern
Factory Pattern
Controller Pattern
Repository Pattern
Provider Pattern

Stratégie de Tests

Tests Unitaires
Use cases complets

60+ fichiers testant use cases et domain logic avec 18+ In-Memory Repositories et 7 In-Memory Providers (hash, token, email, ragflow, stripe, etc.)

Outils: Node.js Test Runner, In-Memory Repositories/Providers

Tests E2E
Toutes les routes

40+ fichiers testant controllers avec Prisma Test Environment (base isolée), seed automatique des plans, helpers pour données uniques (generateUniqueEmail, generateUniqueSlug)

Outils: Node.js Test Runner, Prisma Test Environment, Supertest

Décisions Techniques

Fastify vs Express vs NestJS

2x plus rapide qu'Express, validation de schema native, système de plugins modulaire

Either Monad vs throw/catch

Erreurs type-safe, flux explicite, controller sait exactement quelles erreurs attendre

Factory Pattern vs DI Container

Zéro magie, tree-shakeable, TypeScript pur sans decorators, facile à tester

PostgreSQL + Prisma vs MongoDB

Conformité ACID, relations complexes, type-safety, migrations, RLS natif

Défis & Solutions

Isolation Multi-Tenant

Middleware injecte le contexte du tenant dans toutes les queries via header X-Tenant-Subdomain

50+ Permissions Granulaires

Matrice roles → permissions, CheckPermissionUseCase réutilisé dans tous les use cases

Webhook Stripe avec Raw Body

Middleware customisé pour préserver le raw body avant le bodyParser Fastify

Tests E2E Isolés

Prisma test environment avec base isolée, helpers pour générer des données uniques

2

Frontend Dashboard

SPA React 19 avec Multi-Tenant via Subdomain

~19 500
Lignes de Code
206
Fichiers
88
Composants
7+
Hooks
15+
Pages

Dashboard administratif SPA avec React 19 et TanStack Router. Système d'authentification cross-subdomain via cookies, cache sophistiqué avec TanStack Query, internationalisation en 4 langues, et 31 composants shadcn/ui.

Fonctionnalités

01
Multi-Tenant via Subdomain

Détection automatique du tenant via hostname (tenant1.ragboost.app)

02
Auth Cross-Subdomain

Cookies partagés entre subdomains via Domain=.ragboost.app

03
TanStack Query Cache

staleTime, gcTime, refetchOnMount/WindowFocus configurés par query

04
Optimistic Updates

onMutate → snapshot → rollback avec feedback instantané

05
File-Based Routing

TanStack Router avec type-safety complet et beforeLoad pour guards

06
Axios Interceptors

Refresh token automatique, retry avec exponential backoff, error handling i18n

07
RBAC Frontend

useCurrentUserRole() avec canManageTeam, canEditChatbots, etc.

08
Formulaires Validés

React Hook Form + Zod avec schemas partagés frontend/backend

09
Design System

31 composants shadcn/ui + Radix UI avec Tailwind CSS 4

10
i18n Complet

4 langues (PT, EN, FR, ES) avec namespaces lazy-loaded

11
Dashboard Analytics

Graphiques avec Recharts pour métriques d'utilisation

12
Team Management

Invitations, rôles, suppression de membres avec optimistic updates

13
Gestion d'Abonnement

Affichage du plan actuel, addons, utilisation, upgrade/downgrade avec Stripe Customer Portal

14
Sélecteur d'Addons

Interface pour ajouter/supprimer addons (sièges, stockage, appels API) avec aperçu du prix

Design Patterns

Custom Hooks Pattern
Optimistic Updates Pattern
Provider Pattern
API Queries Layer
Subdomain Detection
Interceptor Pattern

Décisions Techniques

React 19 SPA vs Next.js

Dashboard n'a pas besoin de SSR, Vite HMR instantané, builds 10x plus rapides

TanStack Query vs Redux

Cache automatique, mutations avec optimistic updates, moins de boilerplate

TanStack Router vs React Router

Type-safety complet, file-based routing, beforeLoad pour guards

Cookie Auth vs localStorage

Partage cross-subdomain impossible avec localStorage

Défis & Solutions

Auth Cross-Subdomain

Cookie avec Domain=.localhost (dev) / .ragboost.app (prod) partagé entre tenants

Refresh Token Transparent

Interceptor détecte 401, appelle /refresh-token, retente la requête originale

State Management Complexe

TanStack Query pour server state, useCurrentTenant() pour contexte, zéro Redux

Détection Subdomain Multi-Environnement

Support pour lvh.me (dev), localhost, et multisaas.app (prod) avec même logique

Galerie

1
Image 1
2
Image 2
3
Image 3
4
Image 4
5
Image 5
6
Image 6
Gregory Praxedes | Full Stack Developer & UI/UX Specialist