← Retour aux projets
Immobilier et plateformes corporate Étude de cas

CRM personnel pour freelance — Gestion des clients, projets, tâches et analytique

Un système CRM propre pour gérer l'activité freelance : clients, projets, tâches, suivi du temps, calcul automatique du coût des travaux, analytique sur les revenus, les leads et les offres d'emploi. Stack : Symfony, Vue, PostgreSQL, Redis, ElasticSearch, RabbitMQ.

Technologies 8
PHP
JavaScript
Symfony
Vue.js
PostgreSQL
Elasticsearch
Redis
RabbitMQ
CRM personnel pour freelance — Gestion des clients, projets, tâches et analytique
Projet en vedette ↗

À propos du projet

Un système CRM propre, développé pour gérer mon activité freelance. Dans le système, je gère les clients, je crée pour eux des projets et des tâches, je suis le temps passé sur les tâches, et le système calcule automatiquement le coût du travail effectué. Les données sont agrégées par tâche, projet et client, ce qui offre une image complète des revenus à tous les niveaux.

Pour l'analytique, un dashboard dédié avec graphiques et diagrammes permet de consulter les données pour chaque jour — quelles tâches ont été réalisées, avec quels projets et clients j'ai travaillé, et combien j'ai gagné par jour, semaine ou mois. En outre, le CRM comprend des modules d'analytique des leads et des offres d'emploi : je peux gérer les leads avec des attributs (froid/chaud, source, etc.) et suivre la conversion en clients, ainsi que gérer les offres d'emploi avec des statuts et des sources afin d'analyser la pertinence des postes par rapport à mes compétences, ma réussite aux entretiens et les canaux de recherche les plus efficaces.

Le système est construit sur Symfony (backend), Vue (frontend), PostgreSQL (base de données principale), Redis (cache et sessions), ElasticSearch (recherche et analytique) et RabbitMQ (traitement asynchrone).

CRM personnel pour freelance

Un système CRM propre, développé pour gérer mon activité freelance. Dans le système, je gère les clients, je crée pour eux des projets et des tâches, je suis le temps passé sur les tâches, et le système calcule automatiquement le coût du travail effectué.

Les données sont agrégées par tâche, projet et client, ce qui offre une image complète des revenus à tous les niveaux. Comme un client peut avoir plusieurs projets, l'agrégation est effectuée à la fois par projet et par client dans son ensemble.

Pour l'analytique, un dashboard dédié avec graphiques et diagrammes permet de consulter les données pour chaque jour — quelles tâches ont été réalisées, avec quels projets et clients j'ai travaillé, et combien j'ai gagné par jour, semaine ou mois.

En outre, le CRM comprend des modules d'analytique des leads et d'analytique des offres d'emploi :

  • Leads : ajout de leads avec des attributs (froid/chaud, source, etc.), suivi des statuts et de la conversion en clients. Un onglet dédié dans le dashboard montre combien de leads ont été acquis, leurs statuts et combien ont été convertis en clients. Cela permet d'analyser la performance d'acquisition des leads et d'ajuster les actions.
  • Offres d'emploi : gestion des postes avec statuts et sources, analyse de la pertinence des postes par rapport à mes compétences et de ma réussite aux entretiens. Un onglet dédié dans le dashboard aide à comprendre si je cherche correctement des postes, quels canaux fonctionnent le mieux et comment ajuster mon comportement en entretien.

Mon rôle dans le projet

Développeur full-stack et auteur du projet : conception de l'architecture, développement backend sur Symfony, frontend sur Vue, mise en place de l'infrastructure (PostgreSQL, Redis, ElasticSearch, RabbitMQ).

Stack technologique

  • Backend : Symfony (PHP)
  • Frontend : Vue.js
  • Base de données : PostgreSQL
  • Cache et sessions : Redis
  • Recherche et analytique : ElasticSearch
  • Files d'attente : RabbitMQ

Tâches clés

  • Conception du modèle de domaine : clients, projets, tâches, temps, tarifs
  • Suivi du temps sur les tâches et calcul automatique du coût des travaux
  • Agrégation des données par tâche, projet et client
  • Dashboard avec graphiques et diagrammes pour l'analytique des revenus
  • Module d'analytique des leads avec attributs et conversion
  • Module d'analytique des offres d'emploi avec statuts et sources
  • Traitement asynchrone des événements via RabbitMQ
  • Recherche sur les données via ElasticSearch
  • Caching et optimisation de la restitution via Redis

Résultat

Un CRM personnel pleinement fonctionnel qui couvre la gestion des clients, projets et tâches, automatise le calcul des revenus et fournit une analytique sur les revenus, les leads et les offres d'emploi. Le système aide à prendre des décisions basées sur les données : quels canaux d'acquisition de leads sont efficaces, quels postes sont pertinents et combien a été gagné par jour, semaine ou mois.

Ce que j'ai livré

01

Il fallait concevoir un modèle reliant clients, projets, tâches, suivi du temps et tarifs,...

Le défi

Il fallait concevoir un modèle reliant clients, projets, tâches, suivi du temps et tarifs, afin que les données soient correctement agrégées à tous les niveaux sans duplication.

Solution

  • Conception des entités : Client → Projet → Tâche → Saisie de temps → Calcul du coût.
  • Définition des relations et des règles de comportement en cascade.
  • Prise en compte de la flexibilité des tarifs (horaire, forfaitaire, par projet).
  • Implémentation des migrations et des index dans PostgreSQL.

Résultats

  • Modèle de domaine propre et extensible.
  • Agrégation correcte des données par tâche, projet et client.
  • Base pour l'analytique et le reporting.

02

Il fallait suivre le temps sur les tâches de manière pratique et calculer automatiquement...

Le défi

Il fallait suivre le temps sur les tâches de manière pratique et calculer automatiquement le coût du travail effectué, sans calculs manuels ni erreurs.

Solution

  • Implémentation du suivi du temps lié à une tâche et à une date.
  • Calcul automatique du coût basé sur le tarif et le temps passé.
  • Recalcul en cas de modification du tarif ou du temps.
  • Déport des recalculs lourds vers des tâches asynchrones via RabbitMQ.

Résultats

  • Calcul automatique et précis des revenus.
  • Historique transparent du temps et du coût par tâche.
  • Aucun calcul manuel.

03

Les montants pour les travaux devaient être disponibles à plusieurs niveaux : par tâche, p...

Le défi

Les montants pour les travaux devaient être disponibles à plusieurs niveaux : par tâche, par projet, par client. Un client peut avoir plusieurs projets, et un projet de nombreuses tâches.

Solution

  • Implémentation de l'agrégation des données aux niveaux tâche, projet et client.
  • Recalcul des agrégats lors des changements (temps, tarifs, statuts).
  • Caching des agrégats dans Redis pour une livraison rapide.
  • Assurance de la cohérence des données entre les niveaux.

Résultats

  • Données complètes de revenus à tous les niveaux.
  • Livraison rapide des agrégats grâce au caching.
  • Vision unifiée des clients et des projets.

04

L'analytique nécessitait un dashboard visuel avec graphiques et diagrammes montrant les do...

Le défi

L'analytique nécessitait un dashboard visuel avec graphiques et diagrammes montrant les données quotidiennes : quelles tâches ont été réalisées, avec quels projets et clients, et combien a été gagné par jour, semaine ou mois.

Solution

  • Implémentation des agrégations backend pour les tranches temporelles (jour/semaine/mois).
  • Construction du frontend sur Vue avec graphiques et diagrammes.
  • Ajout de filtres par clients, projets et périodes.
  • Optimisation des requêtes et caching des agrégats lourds.

Résultats

  • Analytique visuelle des revenus par jour, semaine et mois.
  • Accès rapide aux données par clients et projets.
  • Base pour des décisions basées sur les données.

05

Les leads devaient être gérés avec des attributs (froid/chaud, source, etc.), et il fallai...

Le défi

Les leads devaient être gérés avec des attributs (froid/chaud, source, etc.), et il fallait analyser combien de leads ont été acquis, leurs statuts et combien ont été convertis en clients.

Solution

  • Implémentation d'un CRUD pour les leads avec attributs flexibles.
  • Ajout des statuts et des sources d'acquisition.
  • Implémentation de la conversion lead → client.
  • Construction d'un onglet dédié à l'analytique des leads dans le dashboard.

Résultats

  • Entonnoir de leads transparent et conversion en clients.
  • Compréhension des canaux d'acquisition les plus performants.
  • Possibilité d'ajuster les actions d'acquisition de leads.

06

Les postes devaient être suivis avec statuts et sources, et il fallait analyser la pertine...

Le défi

Les postes devaient être suivis avec statuts et sources, et il fallait analyser la pertinence des postes par rapport à mes compétences et ma réussite aux entretiens.

Solution

  • Implémentation d'un CRUD pour les postes avec statuts et sources.
  • Ajout du suivi des étapes : candidature → entretien → résultat.
  • Construction d'un onglet dédié à l'analytique des postes dans le dashboard.
  • Ajout de l'analytique sur les canaux de recherche et la réussite aux entretiens.

Résultats

  • Compréhension de la pertinence de ma recherche de postes.
  • Données sur les canaux les plus efficaces pour trouver des postes.
  • Possibilité d'ajuster mon comportement en entretien.

07

Les recalculs d'agrégats, les mises à jour d'analytique et les calculs de coût sont des op...

Le défi

Les recalculs d'agrégats, les mises à jour d'analytique et les calculs de coût sont des opérations lourdes qui ne peuvent pas être exécutées de manière synchrone dans le cycle HTTP sans perdre en réactivité.

Solution

  • Conception de files d'événements pour les changements de temps, tarifs et statuts.
  • Implémentation de workers avec Symfony Messenger + RabbitMQ.
  • Ajout de politiques de retry, d'une dead-letter queue et du monitoring.
  • Assurance de l'idempotence des handlers.

Résultats

  • Réponse rapide de l'interface indépendamment des opérations en arrière-plan.
  • Résilience aux pannes et aux pics de charge.
  • Traitement scalable des événements.

08

La recherche rapide sur les clients, projets, tâches, leads et postes, ainsi qu'une analyt...

Le défi

La recherche rapide sur les clients, projets, tâches, leads et postes, ainsi qu'une analytique flexible, nécessitaient un moteur de recherche spécialisé plutôt que des requêtes SQL lourdes.

Solution

  • Configuration des index ElasticSearch pour les entités clés.
  • Implémentation de la synchronisation des données via des événements RabbitMQ.
  • Ajout de requêtes de recherche avec filtres et agrégations.
  • Optimisation des mappings et de la réindexation.

Résultats

  • Recherche rapide sur toutes les entités du CRM.
  • Analytique flexible pour les dashboards.
  • Réduction de la charge sur PostgreSQL.

09

Le dashboard et les agrégats par clients, projets et tâches sont des données fréquemment d...

Le défi

Le dashboard et les agrégats par clients, projets et tâches sont des données fréquemment demandées, coûteuses à recalculer à chaque fois.

Solution

  • Introduction du caching des données chaudes et des agrégats dans Redis.
  • Configuration de l'invalidation du cache via des événements (changements de temps, tarifs, statuts).
  • Utilisation de Redis pour les sessions et les verrous distribués.
  • Ajout du monitoring hit/miss et des temps de réponse.

Résultats

  • Livraison rapide du dashboard et des agrégats.
  • Réduction de la charge sur PostgreSQL.
  • Fonctionnement stable sous charge.

10

Pour l'analytique et la résolution des litiges, toutes les modifications sur les clients,...

Le défi

Pour l'analytique et la résolution des litiges, toutes les modifications sur les clients, projets, tâches, leads et postes devaient être traçables.

Solution

  • Conception d'un schéma d'audit log lié à l'entité, à l'utilisateur et à l'action.
  • Implémentation de l'écriture asynchrone de l'audit via RabbitMQ.
  • Ajout d'outils de recherche et d'export des audit logs (ElasticSearch).
  • Assurance de l'immuabilité des enregistrements.

Résultats

  • Audit complet des modifications dans le CRM.
  • Résolution rapide des litiges.
  • Base pour l'analytique comportementale.

11

Le CRM est utilisé quotidiennement, et les pannes de files d'attente, d'indexation ou de c...

Le défi

Le CRM est utilisé quotidiennement, et les pannes de files d'attente, d'indexation ou de cache sont critiques pour le suivi du temps et les revenus.

Solution

  • Mise en place de la collecte de métriques sur RabbitMQ, Redis, ElasticSearch et PostgreSQL.
  • Implémentation d'alertes sur anomalies (croissance de la DLQ, retards d'indexation, erreurs de workers).
  • Ajout de dashboards pour surveiller l'état du système.
  • Intégration de la journalisation des opérations critiques.

Résultats

  • Détection et réaction rapides aux incidents.
  • Réduction des temps d'arrêt.
  • Transparence de l'état du système.

Technologies et sujets

Tags du projet

#Symfony #PHP #Vue.js #PostgreSQL #Redis #ElasticSearch #RabbitMQ #CRM #Freelance #Suivi du temps #Analytique #Dashboard #Gestion des leads #Suivi des postes #Symfony Messenger #Traitement asynchrone #High Load #REST API #Audit Logging
04
Démarrer un projet

Vous cherchez une approche technique similaire ?

Discutons de votre projet, de l'architecture et de la meilleure stack technologique pour celui-ci.

Parlons-en ↗