← Tutti i progetti

In collaudo

Gestionale SaaS per intermediari assicurativi

I sub-agenti assicurativi gestiscono clienti, mandati con le compagnie, polizze, scadenze e incassi su fogli Excel sparsi. Ogni informazione vive in un file diverso, e nessuno ha il quadro completo.

Ruolo
Unico sviluppatore
Periodo
Aprile → ottobre 2026
Stato
Completo in staging, con collaudi formali in corso insieme al cliente: ogni punto viene chiuso, rilasciato e verificato. Ho consegnato manuale utente e documentazione tecnica. La messa in produzione è il prossimo passo.
Stack
Laravel 13
PHP 8.4
Livewire 4
Flux
Tailwind 4
MySQL 8.4
Scout + Meilisearch
Cashier + Stripe
Brevo
Spatie MediaLibrary
PHPUnit 12
Playwright
Forge

Un gestionale in abbonamento in cui ogni intermediario ha il suo spazio, con i dati separati da quelli degli altri. Tre aree: una per l’intermediario, una per i suoi assicurati e una per chi amministra la piattaforma.

Area intermediario

  • Clienti privati e aziende, con calcolo e verifica di codice fiscale e partita IVA, anche UE ed estere, e blocco dei doppioni che spiega il motivo.
  • Mandati con più compagnie e prodotti, con le provvigioni per tipologia.
  • Trattative con più preventivi, anche di compagnie diverse: confermandone uno nasce la polizza.
  • Polizze con tutto il ciclo di vita: rinnovo, sostituzione, sospensione programmata con ricalcolo delle rate, poliennali e premio unico. Ogni passaggio resta nello storico.
  • Scadenze divise tra rate da incassare e rinnovi, con le finestre a 30 giorni e gli scaduti. Da lì si incassa, si sollecita e si esporta.
  • Fogli cassa che si compilano da soli dagli incassi, esportabili in Excel già formattati.
  • Archivio documenti a cartelle con visualizzatore PDF, senza link pubblici.
  • Email inviate dall’app e risposte dei clienti che rientrano da sole nello storico giusto.
  • Ricerca globale su 6 tipi di dati e analisi del portafoglio: indicatori, clienti senza polizza in un certo ramo, mappa dei clienti, incassi degli ultimi 3 anni.
  • Import massivo da Excel con modelli generati dal sistema, anteprima riga per riga e barra di avanzamento.
  • Verifica in due passaggi, feed delle scadenze da collegare al proprio calendario, abbonamento con carta o bonifico, export completo dei dati ed eliminazione dell’account dopo 30 giorni.

Area assicurato

  • Un’app installabile sul telefono. L’assicurato entra con codice fiscale e un codice ricevuto via email, senza password.
  • Vede polizze e rate, scarica i documenti e scrive al suo intermediario.

Amministrazione della piattaforma

  • Ricavi ricorrenti mensili e annuali, retention, ricavo medio per cliente e conversione.
  • Gestione utenti, con la possibilità di entrare nel loro account per dare assistenza.
  • Piani sincronizzati con Stripe, rimborsi, chiavi di Stripe e del server email modificabili dall’interfaccia e salvate cifrate.
  • Testi legali con versioni e consensi, registro delle azioni.

Abbonamenti che non fanno perdere soldi a nessuno

Chi passa a un piano superiore lo ottiene subito e vede il conguaglio prima di confermare. Chi scende di piano lo fa a fine periodo, così usa fino in fondo quello che ha già pagato. La disdetta non è mai immediata, e se Stripe manda due volte la stessa notifica la seconda viene ignorata.

Un bug silenzioso dopo un aggiornamento

Dopo l’aggiornamento di Livewire un tipo di campo aveva smesso di inviare il suo valore al server, senza nessun errore a video. Il risultato erano importi sbagliati. L’ho trovato e corretto in tutti i 23 punti in cui compariva.

In locale funziona, sul server no

Sul server di prova alcuni importi da 650 € venivano azzerati, mentre in locale tutto filava liscio. La causa erano dati reali sporchi, che in sviluppo non esistevano.

Da allora ho una regola fissa: prima scrivo un test che riproduce lo stato del server, poi correggo. E per i dati già rovinati preparo un comando che li risana.

L’import che andava in timeout

Ho misurato 21 query al database per ogni riga importata e le ho portate a 10. Un test fallisce se si supera quota 12, così il problema non può tornare. I file vengono lavorati a blocchi da 250 righe, e il sistema riconosce anche i file di Apple Numbers travestiti da .xlsx.

Privacy anche nei dettagli

Il codice di accesso via email risponde sempre nello stesso tempo, così nessuno può scoprire chi ha un account. Lo stesso vale per il recupero password, che non rivela quali email esistono. E l’app degli assicurati non salva mai pagine riservate sul dispositivo, perché un telefono può essere condiviso.

Il limite del 2038

Una proroga al 2050 falliva senza motivo apparente. Il tipo di campo usato per le date non va oltre il 2038: l’ho sostituito dove serviva.

1.253 test automatici, erano 47 a luglio
265 commit, tutti miei
99 azioni di business e 54 modelli
86 componenti Livewire
3 + 2 tipi di accesso e app installabili
15.000+ rate di dati reali in staging