Frontend Engineer pour Nextlead.

Développement de nouvelles fonctionnalités sur un projet SAAS CRM dans une petite équipe.

Contexte de la mission

Nextlead est un CRM qui se distingue de ces concurrents sur 4 sujets : Simplicité d’utilisation, Personnalisation, Tarification transparente et Accompagnement humain. J'ai été contacté par Théo CREACH (fondateur de Nextlead) dans le but de développer de nouveaux modules pour le CRM. L'équipe existante était composée de 3 développeurs alternants et le profil recherché avait pour objectif d'intervenir dans cette codebase existante de et possiblement prendre le Lead vis à vis des autres développeurs.

Description du logiciel

L'application est une application Monolithique multi tenant développé avec le framework Next.js. Le code source est sur Github et l'application est hébergé sur Vercel. L'application est connecté à différents outils notamment Supabase, Resend.

2 Environnements sont définis: Production et Développement avec chacun leur base de données et leur routine de déploiement.

Technologies utilisés
React, Next Typescript, Javascript, Prisma, Supabase, Github, Vercel, Inngest, Resend

Réalisations

Système d'import de données

L'enjeu était de permettre l'import de gros volumes de données (+50 000 lignes CSV).

Dans le fonctionnement existant, on ne pouvait pas importer plus de quelques centaines de lignes d'un fichier csv à cause des contraintes de tailles des requêtes (Request body size sent to a Server Action) et de délai de traitement (Vercel Timeout).

Pour résoudre ce problème, j'ai d'abord implémenté une compression de la donnée en front avant d'être envoyé au back ce qui a réduit la taille de la requête et a permis d'envoyer les données dans leur entièreté.

Pour réduire le temps de traitement, j'ai fait en sorte de traiter le fichier par batch de sorte à pouvoir traiter chaque batch en parallèle.

Streaming Le traitement de chaque batch est renvoyé à l'utilisateur grace au SSE, ce qui permet d'afficher le % d'avancement du fichier ou toute autre information.

Injection de dépendance

La taille et les ambitions du projet ont continué à évoluer, j'ai donc proposé de mettre en place de l'injection de dépendance pour les différentes briques de l'application que nous mettions en place.

Champs customisés

L'objectif de ce livrable était de créer un système de champs personnalisés pour chacun puisse customiser son CRM comme bon lui semble.

Module de comptabilité

Ma plus grande contribution au projet Nextlead est un module de comptabilité dédié pour un client précis. Dans le contexte du développement de ce module, j'ai été amené à mettre en place un environnement de test avec Jest. J'ai également utilisé une clean architecture pour garder un code lisible et maintenable.

Inngest (Background Tasks)

Assez rapidement, nous avons eu besoin d'intégrer des taches de fonds et tâches de longues durée dans l'application. Etant donné que le projet était hébergé dans un environnement serverless, nous étions limité sur ces sujets.

Inngest En intégrant inngest, nous pouvions orchester des workflows, déclencher des comportements suite à des événements ou encore intégrer facilement des logiques de retry et de batch. J'ai été amené ensuite à migrer certaines fonctionnalités pour qu'elles utilisent inngest notamment le système d'import de données.

Système d'envoi de campagnes par email

Enfin une des dernière grosse fonctionnalité que j'ai pu mettre en place, est un système d'envoie de campagne email. Ce système avait la contrainte d'embarquer une logique d'envoie différente par provider pour s'adapter au protocol de chacun. Cette fonctionnalité repose sur Inngest, Resend et Supabase.