Nricher, plateforme SaaS de pricing intelligence e-commerce
Founding Engineer : data engineering vers Elasticsearch (moteur Java), conception des index et des agrégations, API NestJS de 330 endpoints et front Next.js.
Voir le site du projetnricher.ioUn e-commerçant suit des milliers de références, face à des concurrents qui changent leurs prix tous les jours. Nricher lui dit, référence par référence : qui vend la même chose, à quel prix, et si sa fiche produit tient la comparaison.
Au départ, la data existait déjà, mais pas le SaaS : les analyses étaient livrées via un Power BI. Construction de la plateforme à partir de là, et écriture de l’intégralité du code : le moteur qui indexe la data dans Elasticsearch, l’API qui la sert, les écrans qui l’exposent, et l’infrastructure qui fait tourner l’ensemble.
Périmètre data engineering : du data warehouse à Elasticsearch, avec le calcul, le streaming, l’indexation et le cycle de vie des index. Le data warehouse lui-même, son alimentation et sa modélisation étaient gérés par l’équipe data.
- 11
- domaines ingérésSnowflake vers Elasticsearch
- 330
- endpoints APINestJS, 245 services
- 177
- colonnes filtrablesmoteur de filtres typé
- 24
- index Elasticsearchmulti-tenants
Rôle et périmètre
Développement du produit de bout en bout, du moteur d’indexation jusqu’aux écrans utilisés par les clients. En amont, le data warehouse restait géré par l’équipe data.
| Périmètre | Réalisations |
|---|---|
| Data engineering | Du data warehouse à Elasticsearch : moteur Java 21 / Spring Boot, calcul et indexation de 11 domaines |
| Search & analytics | Conception des index, agrégations, moteur de filtres, recherche produit |
| Backend | API NestJS, modélisation PostgreSQL, exports asynchrones |
| Frontend | Vues analytiques Next.js, migration MUI vers shadcn/ui |
| Infrastructure | Migration Heroku vers Scaleway, CI/CD, déploiement sans coupure |
Architecture
Développement du moteur d’indexation, des index Elasticsearch, de l’API et du front, soit tout ce qui se trouve en aval du data warehouse.
| Brique | Rôle |
|---|---|
| Snowflake | Data warehouse source des données de marché, tenu par l’équipe data |
| Moteur d’indexation (Java) | Calcule, streame et indexe vers Elasticsearch |
| Elasticsearch | Couche de service : tout le read analytique |
| API NestJS + front Next.js | Produit SaaS : vues analytiques, filtres, exports |
Moteur d’indexation
Data engineering, du data warehouse à Elasticsearch
Premier chantier : sortir du Power BI. Écriture du service qui prend la data du data warehouse, la calcule, la streame et l’indexe dans Elasticsearch, pour 11 domaines métier. Sans lui, aucune vue analytique n’existe.
11
domaines
un pipeline par domaine
100 k
lignes par fetch
streaming colonne
2 000
docs par bulk
indexation par lots
- Pipeline producteur / consommateur écrit à la main : file bornée pour la back-pressure, pool de consommateurs, arrêt propre. La mémoire dépend de la file, pas du volume de la source.
- Réindexation sans coupure : index horodaté puis bascule d’alias atomique, avec une garde qui préserve les données en place si un run ne produit rien.
- Runs isolés dans des conteneurs éphémères plafonnés en mémoire, suivi d’état persisté et notification en fin de traitement.
Elasticsearch
Le cœur analytique du produit
- Index multi-tenants : passage d’un index par client à des index globaux, isolation centralisée en un point unique du code.
- Calcul déporté côté cluster : les écarts de prix sont classés par agrégation et script Painless, en une requête et sans post-traitement.
- Volumétrie : pagination
search_afteretcompositepour les exports massifs,updateByQueryasynchrone avec progression réelle. - Moteur de filtres : un DSL typé partagé front/back, compilé en Query DSL, avec facettes correctes sur 177 colonnes.
- Recherche produit tolérante aux fautes : titre, EAN, SKU, URL ou liste collée depuis Excel, avec search-as-you-type. Le module le plus testé du projet.
Observabilité
Chaque requête passe par un wrapper APM qui sépare le temps cluster du temps applicatif. C’est ce qui distingue une requête réellement lente d’un problème de volume ou de sérialisation, et ce qui a orienté les optimisations.
Backend et frontend
API NestJS, Next.js 16, React 19
- API NestJS : 330 endpoints, modélisation PostgreSQL, exports massifs en jobs asynchrones annulables.
- Sécurité conçue de bout en bout : authentification par jetons avec rotation, second facteur, contrôle d’accès par rôles, isolation multi-tenant à plusieurs niveaux.
- ~1 200 fichiers migrés de MUI vers shadcn/ui + Tailwind, en dépréciation progressive et sans gel de livraison.
- Vues analytiques Next.js 16 / React 19 : tables configurables, rendu à la demande, virtualisation, et un composant de graphique SVG écrit de zéro.
DevOps
Migration Heroku vers Scaleway, menée en autonomie
Sortie d’Heroku et reconstruction complète de l’infrastructure, sans interruption pour les clients.
| Brique | Choix |
|---|---|
| Compute | VPS Scaleway, préproduction iso-prod |
| Base de données | PostgreSQL 17 managé en haute disponibilité |
| CI/CD | GitHub Actions à barrières test, build, deploy |
| Observabilité | Sentry, Elastic APM, Grafana |
Déploiement blue/green écrit à la main : la nouvelle version démarre à côté de l’ancienne, le trafic ne lui est confié qu’après validation de son état de santé, et tout démarrage qui échoue déclenche un retour arrière automatique.
« Pourquoi pas Kubernetes ? »
Une seule application, un seul serveur, une seule personne pour l’exploiter : Kubernetes aurait ajouté un système à opérer pour un besoin que Traefik et quarante lignes de bash couvrent, rollback automatique compris. Le seuil où il se justifie reste clair : plusieurs services à scaler séparément, ou plusieurs équipes qui déploient en parallèle.
Ce que ce projet démontre
D’un Power BI et d’un data warehouse existant à un produit SaaS vendu à des retailers. Compétences mises en œuvre :
| Compétence | Preuve |
|---|---|
| Data engineering | Pipeline Java du data warehouse vers Elasticsearch : back-pressure, indexation par lots, réindexation sans coupure |
| Elasticsearch avancé | Index multi-tenants, agrégations, Painless, pagination profonde, transforms |
| Backend | API NestJS de 330 endpoints, jobs asynchrones, sécurité multi-tenant |
| Frontend | Next.js 16 / React 19, migration UI de 1 200 fichiers sans gel de livraison |
| DevOps | Heroku vers Scaleway, CI/CD à barrières, blue/green avec retour arrière automatique |
| Industrialisation | Procédures d’agent versionnées pour tenir cette surface avec une seule personne |