ETI · Freelance · Pornic, hybride

Camping-Car Park

campingcarpark.com · 1er réseau européen d'aires d'étape pour camping-cars

Développeur fullstackJanv. 2025 → Oct. 2025 · 10 moisRéf. : Gaël Paillard · Lead TechVisiter le site (nouvel onglet)

Camping-Car Park est le premier réseau européen d'aires d'étape : plus de 600 aires dans 6 pays, plus d'un million de clients. L'entreprise refondait son site web et son application mobile (compte, recherche multicritère, page produit, paiement, CMS éditorial, pages conçues pour le référencement), pendant la migration progressive de son legacy PHP et Sylius vers des microservices Node.js sur GCP. J'ai pris le composant le plus sensible de la migration : l'identité des clients.

Équipe : quinze personnes en agile, dont une dizaine de développeurs, un lead tech, un product manager et un chef de projet.

1 M+clients dans la base à réconcilier
0corruption de base pendant la réconciliation

Réconcilier des identités sans mélanger deux clients

Avant la refonte, la carte d'accès aux bornes était le seul moyen fiable d'identifier un client. Il fallait passer à une vraie identité, sur une base client en production, en rattachant téléphones, cartes d'accès et emails existants. J'ai conçu ce composant de zéro, en Node.js et Fastify.

  • Authentification par code à usage unique, par SMS et par email.
  • Seuls les cas certains sont fusionnés automatiquement. Les cas ambigus attendent une action explicite, parce qu'une fusion à tort mélange deux dossiers clients sans retour arrière.
  • Aucune corruption de base n'a été constatée pendant la réconciliation.

Brique transactionnelle construite de zéro

Portefeuille client avec recharge automatique, paiement Payline avec plusieurs cartes enregistrées, chèques-vacances et cartes cadeaux, qui n'existaient pas dans l'ancien système.

Le même flux sur le web et le mobile

Même flux d'authentification sur le site Next.js et l'application React Native, y compris le cas où un email ou un téléphone appartient déjà à un autre compte. Un client qui passe de l'un à l'autre retrouve le même comportement. Deep links et universal links ouvrent l'application depuis les notifications push et les QR codes.

Migration progressive

Les nouveaux services Node.js, conteneurisés et couverts par des tests unitaires et d'intégration, reprenaient le périmètre brique par brique, déployés sur GKE avec Helm, pendant que l'ancien système continuait de servir les clients (strangler fig).

Les données clients ont été migrées en production par double écriture, dans la nouvelle table et dans la table legacy, sans rupture pour les utilisateurs.

Stack technique

EnvironnementNode.js · Fastify · microservices · PostgreSQL · GCP (GKE Autopilot, Cloud SQL, Pub/Sub, Cloud Storage, Cloud Run, Cloud Tasks, Cloud Scheduler, Secret Manager, Cloud Build, Artifact Registry, Cloud Logging, Cloud Monitoring) · Kubernetes · Helm · Docker · Next.js · React · React Native · Payline ; legacy PHP et Sylius
BackendNode.js / Fastify · microservices · PostgreSQL
FrontendNext.js / React · React Native · deep links et universal links
PaiementsPayline multi-cartes · portefeuille avec recharge automatique · chèques-vacances · cartes cadeaux
MigrationPHP et Sylius vers Node.js · double écriture · GKE Autopilot · Helm

Un contexte similaire ?

Planifier un échange