Retour aux projets
Web | Stage (Café Crème) · 2026 · En cours

Plateforme intranet consultants 🏢

Next.js
React
TypeScript
react-query
JWT
OTP
Node.js
Express
TypeORM
PostgreSQL
Nx
InversifyJS
Clean Architecture
CQRS
Event sourcing
Stripe
Firebase
Vercel
Render

Contexte

Plateforme web interne destinée aux consultants et à leurs administrateurs : un espace personnel où chaque consultant suit en temps réel ses revenus, ses cooptations, l'historique de ses transactions et ses notifications, doublé d'un back-office d'administration pour piloter consultants, transactions, sociétés de portage et cooptations. Projet mené pendant mon stage IA & Automatisation chez Café Crème. Présenté ici de façon générique (projet interne confidentiel).

Ce que fait la plateforme

  • Espace consultant : tableau de bord personnel (KPIs, graphe de revenus, projection annuelle), suivi des cooptations, historique des transactions, notifications, gestion de profil et de contacts.
  • Back-office administrateur : gestion complète des consultants (création unitaire et en lot, édition, archivage), des transactions, des sociétés de portage, des entités juridiques et des cooptations, avec recherche, filtres, tri et pagination.
  • Connexion unique aiguillée par rôle : un seul écran de connexion ; selon le rôle porté par l'utilisateur, il est redirigé vers son espace (consultant ou back-office), sans second point d'entrée.

Approche technique

Le projet réunit un frontend et un backend que j'ai fait évoluer ensemble.

Frontend — application Next.js (App Router) / React / TypeScript, rendu majoritairement côté client, data-fetching via react-query (cache, états de chargement) au-dessus d'une couche de services axios. L'authentification se fait par OTP email puis JWT, stocké dans un cookie httpOnly côté serveur (Server Actions). Le cloisonnement des espaces consultant et administrateur est assuré par un middleware qui décode le rôle du JWT et aiguille la navigation — une approche Edge-safe (décodage base64url, sans dépendance Node).

BackendAPI REST en architecture hexagonale / Clean Architecture, avec CQRS et event sourcing (agrégats DDD émettant des événements appliqués par des handlers). Monorepo Nx découpé par bounded context (domaine, adaptateurs, messages), injection de dépendances (InversifyJS), persistance PostgreSQL via TypeORM, et intégrations paiement (Stripe) et stockage/push (Firebase). Les suppressions sont gérées en soft delete transverse pour préserver l'intégrité des historiques.

Choix de conception notables :

  • Séparation stricte des couches (HTTP → use case → agrégat + événements → port → adaptateur Postgres), pour qu'une évolution métier ne fuite jamais dans l'infrastructure.
  • Autorisation centralisée : chaque use case admin porte sa propre règle (canExecute), la sécurité réelle reposant sur l'API à chaque appel, pas seulement sur le routing côté client.
  • Mises à jour en lot « tout ou rien » : validation complète des identifiants et références avant toute écriture, pour ne jamais laisser la base dans un état incohérent.
  • Fusion de deux applications en une : j'ai intégré un back-office historiquement séparé dans l'application consultant (un seul repo, un seul déploiement, un seul domaine), en isolant le code d'administration sous des namespaces dédiés pour éviter toute collision.

Résultats

Plateforme déployée (frontend sur Vercel, backend sur Render), partagée par les deux espaces sur une même API. La fusion du back-office a simplifié l'exploitation (un seul déploiement, une seule authentification) tout en gardant les deux univers cloisonnés et sécurisés par rôle. Le backend, en architecture hexagonale, reste extensible domaine par domaine sans réécriture.