← Torna ai progetti
Immobiliare e piattaforme aziendali Case study

CRM personale per freelance — Gestione di clienti, progetti, attività e analytics

Un sistema CRM proprio per gestire l'attività freelance: clienti, progetti, attività, tracciamento del tempo, calcolo automatico del costo del lavoro, analytics su ricavi, lead e offerte di lavoro. Stack: Symfony, Vue, PostgreSQL, Redis, ElasticSearch, RabbitMQ.

Tecnologie 8
PHP
JavaScript
Symfony
Vue.js
PostgreSQL
Elasticsearch
Redis
RabbitMQ
CRM personale per freelance — Gestione di clienti, progetti, attività e analytics
Progetto in evidenza ↗

Informazioni sul progetto

Un sistema CRM proprio, sviluppato per gestire la mia attività freelance. Nel sistema gestisco i clienti, creo per loro progetti e attività, traccio il tempo sulle attività e il sistema calcola automaticamente il costo del lavoro svolto. I dati vengono aggregati per attività, progetto e cliente, offrendo un quadro completo dei ricavi a tutti i livelli.

Per l'analytics è disponibile una dashboard dedicata con grafici e diagrammi: posso consultare i dati per ogni giorno — quali attività sono state svolte, con quali progetti e clienti ho lavorato e quanto ho guadagnato al giorno, alla settimana o al mese. Inoltre, il CRM include moduli di analytics sui lead e sulle offerte di lavoro: posso gestire i lead con attributi (freddo/caldo, fonte, ecc.) e monitorare la conversione in clienti, nonché gestire le posizioni con stati e fonti per analizzare la pertinenza delle offerte rispetto alle mie competenze, il successo nei colloqui e i canali di ricerca più efficaci.

Il sistema è costruito su Symfony (backend), Vue (frontend), PostgreSQL (database principale), Redis (cache e sessioni), ElasticSearch (ricerca e analytics) e RabbitMQ (elaborazione asincrona).

CRM personale per freelance

Un sistema CRM proprio, sviluppato per gestire la mia attività freelance. Nel sistema gestisco i clienti, creo per loro progetti e attività, traccio il tempo sulle attività e il sistema calcola automaticamente il costo del lavoro svolto.

I dati vengono aggregati per attività, progetto e cliente, offrendo un quadro completo dei ricavi a tutti i livelli. Poiché un cliente può avere più progetti, l'aggregazione viene effettuata sia per progetto sia per cliente nel suo complesso.

Per l'analytics è disponibile una dashboard dedicata con grafici e diagrammi: posso consultare i dati per ogni giorno — quali attività sono state svolte, con quali progetti e clienti ho lavorato e quanto ho guadagnato al giorno, alla settimana o al mese.

Inoltre, il CRM include moduli di analytics sui lead e di analytics sulle offerte di lavoro:

  • Lead: aggiunta di lead con attributi (freddo/caldo, fonte, ecc.), monitoraggio degli stati e della conversione in clienti. Una scheda dedicata nella dashboard mostra quanti lead sono stati acquisiti, i loro stati e quanti sono stati convertiti in clienti. Ciò consente di analizzare la performance di acquisizione dei lead e di adattare le azioni.
  • Offerte di lavoro: gestione delle posizioni con stati e fonti, analisi della pertinenza delle posizioni rispetto alle mie competenze e del successo nei colloqui. Una scheda dedicata nella dashboard aiuta a capire se sto cercando correttamente le posizioni, quali canali funzionano meglio e come adattare il mio comportamento nei colloqui.

Il mio ruolo nel progetto

Sviluppatore full-stack e autore del progetto: progettazione dell'architettura, sviluppo backend su Symfony, frontend su Vue, configurazione dell'infrastruttura (PostgreSQL, Redis, ElasticSearch, RabbitMQ).

Stack tecnologico

  • Backend: Symfony (PHP)
  • Frontend: Vue.js
  • Database: PostgreSQL
  • Cache e sessioni: Redis
  • Ricerca e analytics: ElasticSearch
  • Code: RabbitMQ

Attività chiave

  • Progettazione del modello di dominio: clienti, progetti, attività, tempo, tariffe
  • Tracciamento del tempo sulle attività e calcolo automatico del costo del lavoro
  • Aggregazione dei dati per attività, progetto e cliente
  • Dashboard con grafici e diagrammi per l'analytics dei ricavi
  • Modulo di analytics sui lead con attributi e conversione
  • Modulo di analytics sulle offerte di lavoro con stati e fonti
  • Elaborazione asincrona degli eventi tramite RabbitMQ
  • Ricerca sui dati tramite ElasticSearch
  • Caching e ottimizzazione dell'output tramite Redis

Risultato

Un CRM personale pienamente funzionale che copre la gestione di clienti, progetti e attività, automatizza il calcolo dei ricavi e fornisce analytics su ricavi, lead e offerte di lavoro. Il sistema aiuta a prendere decisioni basate sui dati: quali canali di acquisizione dei lead sono efficaci, quali posizioni sono pertinenti e quanto è stato guadagnato al giorno, alla settimana o al mese.

Ciò che ho consegnato

01

Era necessario progettare un modello che colleghi clienti, progetti, attività, tracciament...

La sfida

Era necessario progettare un modello che colleghi clienti, progetti, attività, tracciamento del tempo e tariffe, in modo che i dati siano correttamente aggregati a tutti i livelli senza duplicazioni.

Soluzione

  • Progettazione delle entità: Cliente → Progetto → Attività → Registrazione tempo → Calcolo costo.
  • Definizione delle relazioni e delle regole di comportamento a cascata.
  • Inclusione della flessibilità sulle tariffe (oraria, fissa, per progetto).
  • Implementazione di migrazioni e indici in PostgreSQL.

Risultati

  • Modello di dominio pulito ed estensibile.
  • Aggregazione corretta dei dati per attività, progetto e cliente.
  • Base per analytics e reporting.

02

Bisognava tracciare comodamente il tempo sulle attività e calcolare automaticamente il cos...

La sfida

Bisognava tracciare comodamente il tempo sulle attività e calcolare automaticamente il costo del lavoro svolto, senza calcoli manuali né errori.

Soluzione

  • Implementazione del tracciamento del tempo collegato a un'attività e a una data.
  • Calcolo automatico del costo basato sulla tariffa e sul tempo impiegato.
  • Ricalcolo in caso di modifica della tariffa o del tempo.
  • Spostamento dei ricalcoli pesanti in task asincroni tramite RabbitMQ.

Risultati

  • Calcolo automatico e preciso dei ricavi.
  • Storico trasparente di tempo e costo per ogni attività.
  • Nessun calcolo manuale.

03

Gli importi per il lavoro dovevano essere disponibili a più livelli: per attività, per pro...

La sfida

Gli importi per il lavoro dovevano essere disponibili a più livelli: per attività, per progetto, per cliente. Un cliente può avere più progetti e un progetto molte attività.

Soluzione

  • Implementazione dell'aggregazione dei dati a livello di attività, progetto e cliente.
  • Ricalcolo degli aggregati in caso di modifiche (tempo, tariffe, stati).
  • Caching degli aggregati in Redis per una consegna rapida.
  • Garanzia della coerenza dei dati tra i livelli.

Risultati

  • Dati completi sui ricavi a tutti i livelli.
  • Consegna rapida degli aggregati grazie al caching.
  • Visione unificata di clienti e progetti.

04

L'analytics richiedeva una dashboard visiva con grafici e diagrammi che mostrasse i dati g...

La sfida

L'analytics richiedeva una dashboard visiva con grafici e diagrammi che mostrasse i dati giornalieri: quali attività sono state svolte, con quali progetti e clienti e quanto è stato guadagnato al giorno, alla settimana o al mese.

Soluzione

  • Implementazione delle aggregazioni backend per intervalli temporali (giorno/settimana/mese).
  • Costruzione del frontend su Vue con grafici e diagrammi.
  • Aggiunta di filtri per clienti, progetti e periodi.
  • Ottimizzazione delle query e caching degli aggregati pesanti.

Risultati

  • Analytics visiva dei ricavi per giorno, settimana e mese.
  • Accesso rapido ai dati per clienti e progetti.
  • Base per decisioni basate sui dati.

05

I lead dovevano essere gestiti con attributi (freddo/caldo, fonte, ecc.) e bisognava anali...

La sfida

I lead dovevano essere gestiti con attributi (freddo/caldo, fonte, ecc.) e bisognava analizzare quanti lead sono stati acquisiti, i loro stati e quanti sono stati convertiti in clienti.

Soluzione

  • Implementazione di un CRUD per i lead con attributi flessibili.
  • Aggiunta di stati e fonti di acquisizione.
  • Implementazione della conversione lead → cliente.
  • Costruzione di una scheda dedicata all'analytics dei lead nella dashboard.

Risultati

  • Funnel dei lead trasparente e conversione in clienti.
  • Comprensione dei canali di acquisizione più performanti.
  • Possibilità di adattare le azioni di acquisizione dei lead.

06

Le posizioni dovevano essere gestite con stati e fonti e bisognava analizzare la pertinenz...

La sfida

Le posizioni dovevano essere gestite con stati e fonti e bisognava analizzare la pertinenza delle posizioni rispetto alle mie competenze e il successo nei colloqui.

Soluzione

  • Implementazione di un CRUD per le posizioni con stati e fonti.
  • Aggiunta del tracciamento delle fasi: candidatura → colloquio → risultato.
  • Costruzione di una scheda dedicata all'analytics delle posizioni nella dashboard.
  • Aggiunta di analytics sui canali di ricerca e sul successo nei colloqui.

Risultati

  • Comprensione della correttezza della mia ricerca di posizioni.
  • Dati sui canali più efficaci per trovare posizioni.
  • Possibilità di adattare il comportamento nei colloqui.

07

I ricalcoli degli aggregati, gli aggiornamenti dell'analytics e i calcoli dei costi sono o...

La sfida

I ricalcoli degli aggregati, gli aggiornamenti dell'analytics e i calcoli dei costi sono operazioni pesanti che non possono essere eseguite in modo sincrono nel ciclo HTTP senza perdere reattività.

Soluzione

  • Progettazione di code di eventi per modifiche di tempo, tariffe e stati.
  • Implementazione di worker con Symfony Messenger + RabbitMQ.
  • Aggiunta di policy di retry, dead-letter queue e monitoring.
  • Garanzia dell'idempotenza degli handler.

Risultati

  • Risposta rapida dell'interfaccia indipendentemente dalle operazioni in background.
  • Resilienza a guasti e picchi di carico.
  • Elaborazione scalabile degli eventi.

08

La ricerca rapida su clienti, progetti, attività, lead e posizioni, insieme a un'analytics...

La sfida

La ricerca rapida su clienti, progetti, attività, lead e posizioni, insieme a un'analytics flessibile, richiedeva un motore di ricerca specializzato invece di query SQL pesanti.

Soluzione

  • Configurazione degli indici ElasticSearch per le entità chiave.
  • Implementazione della sincronizzazione dei dati tramite eventi RabbitMQ.
  • Aggiunta di query di ricerca con filtri e aggregazioni.
  • Ottimizzazione di mapping e reindicizzazione.

Risultati

  • Ricerca rapida su tutte le entità del CRM.
  • Analytics flessibile per le dashboard.
  • Riduzione del carico su PostgreSQL.

09

La dashboard e gli aggregati per clienti, progetti e attività sono dati richiesti frequent...

La sfida

La dashboard e gli aggregati per clienti, progetti e attività sono dati richiesti frequentemente, costosi da ricalcolare ogni volta.

Soluzione

  • Introduzione del caching dei dati caldi e degli aggregati in Redis.
  • Configurazione dell'invalidazione della cache tramite eventi (modifiche di tempo, tariffe, stati).
  • Utilizzo di Redis per sessioni e lock distribuiti.
  • Aggiunta di monitoring hit/miss e tempi di risposta.

Risultati

  • Consegna rapida della dashboard e degli aggregati.
  • Riduzione del carico su PostgreSQL.
  • Funzionamento stabile sotto carico.

10

Per l'analytics e la risoluzione delle controversie, tutte le modifiche su clienti, proget...

La sfida

Per l'analytics e la risoluzione delle controversie, tutte le modifiche su clienti, progetti, attività, lead e posizioni dovevano essere tracciabili.

Soluzione

  • Progettazione di uno schema di audit log collegato a entità, utente e azione.
  • Implementazione della scrittura asincrona dell'audit tramite RabbitMQ.
  • Aggiunta di strumenti di ricerca ed export degli audit log (ElasticSearch).
  • Garanzia dell'immutabilità dei record.

Risultati

  • Audit completo delle modifiche nel CRM.
  • Risoluzione rapida delle controversie.
  • Base per l'analytics comportamentale.

11

Il CRM viene utilizzato quotidianamente e i guasti a code, indicizzazione o cache sono cri...

La sfida

Il CRM viene utilizzato quotidianamente e i guasti a code, indicizzazione o cache sono critici per il tracciamento del tempo e i ricavi.

Soluzione

  • Configurazione della raccolta di metriche su RabbitMQ, Redis, ElasticSearch e PostgreSQL.
  • Implementazione di alert su anomalie (crescita della DLQ, ritardi di indicizzazione, errori dei worker).
  • Aggiunta di dashboard per monitorare lo stato del sistema.
  • Integrazione del logging delle operazioni critiche.

Risultati

  • Rilevamento e reazione rapidi agli incidenti.
  • Riduzione dei tempi di inattività.
  • Trasparenza dello stato del sistema.

Tecnologie e argomenti

Tag del progetto

#Symfony #PHP #Vue.js #PostgreSQL #Redis #ElasticSearch #RabbitMQ #CRM #Freelance #Tracciamento del tempo #Analytics #Dashboard #Gestione lead #Monitoraggio posizioni #Symfony Messenger #Elaborazione asincrona #High Load #REST API #Audit Logging
04
Avvia un progetto

Hai bisogno di un approccio tecnico simile?

Parliamo del tuo progetto, dell'architettura e del miglior stack tecnologico per esso.

Parliamone ↗