Gestionale per agenzie digitali: tre applicazioni, una sola fonte di verità
Tre applicazioni e un backend solo, per un gruppo di agenzie: preventivi e contratti, pianificazione del carico, fatture riconciliate, firma elettronica, credenziali cifrate e un assistente che interroga i dati veri.
-
applicazioni, un backend solo
-
tabelle nel database
-
moduli di endpoint
-
commit in quattro mesi
In breve
- Tre applicazioni che condividono un contratto solo: un backend FastAPI che è l'unica fonte di verità, un gestionale da scrivania in React e un'applicazione da telefono installabile, con le stesse funzioni.
- Multi azienda per davvero: una holding e tre società, con marchio, utenti e permessi propri, e quasi ogni interrogazione del database filtrata per azienda.
- Copre il giro completo: preventivo, contratto, pianificazione del carico, lavorazioni, fatturazione riconciliata, firma elettronica, trasferte, sale riunioni.
- Due funzioni che di solito non ci sono: una cassaforte di credenziali cifrata con Cloud KMS e un assistente che interroga il database con i permessi di chi lo sta usando.
- Costruito in poco più di quattro mesi, oggi regge la giornata di lavoro dell'azienda.
Il problema non erano gli strumenti
Il gruppo lavorava come lavorano quasi tutte le agenzie di quella dimensione: i preventivi in un configuratore fatto in casa, le attività su Trello, le scadenze nelle teste delle persone, la fatturazione su Fatture in Cloud, i rimborsi su fogli di calcolo ricompilati a fine mese, le credenziali dei siti dei clienti sparse fra gestori di password personali e messaggi.
Niente di tutto questo era rotto. Il problema era che nessuno strumento sapeva cosa stesse facendo l’altro: il tempo speso davvero su una lavorazione non arrivava mai al preventivo successivo, una fattura emessa non chiudeva la riga del contratto, un sito caduto non generava una lavorazione. L’obiettivo non era digitalizzare, era avere una sola fonte di verità e costruirci intorno tutto il resto.
Tre applicazioni, una regola di tre parole
Il backend in FastAPI tiene i dati e tutte le regole. Il gestionale da scrivania, in React, è per chi ci passa la giornata davanti. L’applicazione da telefono non è un ripensamento del prodotto: sono le stesse funzioni, installabile e con le notifiche.
La regola che ha retto tutto il progetto sta in tre parole: il backend decide. I due programmi che si vedono non hanno un database, non tengono una copia delle regole e non interpretano niente. Quando un permesso cambia, cambia in un posto solo. Si è visto quando è arrivata la terza applicazione, che ha potuto inseguire la seconda funzione per funzione senza riscrivere nulla.
La pianificazione del carico, che propone e non decide
È il modulo più grande del backend e la pagina più complessa dell’interfaccia: calendario per giorno, settimana e mese, una colonna per operatore, attività che si trascinano, scambio di lavoro fra persone e rilevamento del sovraccarico.
La parte interessante non è il calendario, è il peso. Non tutte le ore sono uguali e ogni società del gruppo pesa i tipi di lavorazione in modo diverso, quindi i pesi si configurano per azienda e la capacità per persona. La prima versione distribuiva le attività da sola: funzionava, ed è stata tolta. Nessun algoritmo sapeva che quel martedì quella persona era dal cliente. Da allora il sistema calcola, segnala gli sforamenti e lascia la mano a una persona.
Dal preventivo alla fattura incassata
Il giro commerciale è chiuso: catalogo, configuratore modulare, preventivo, contratto, piano di fatturazione a rate. Niente più fogli di calcolo in mezzo.
L’integrazione con Fatture in Cloud non è una sincronizzazione, è una riconciliazione: confronta l’estratto conto con le fatture emesse, trova i duplicati, tiene conto delle note di credito e lega ogni documento alla rata del contratto che lo ha generato. Un servizio separato trasforma il pagamento di un abbonamento in fattura elettronica verso lo SDI.
La cassaforte delle credenziali
Qui il modello di sicurezza conta più dell’interfaccia. Le credenziali sono cifrate con Cloud KMS e il codice dà per scontate tre regole: sbloccare non è entrare, perché ogni rivelazione chiede un secondo permesso a scadenza breve, separato dalla sessione e ottenibile con impronta o volto; chi non ha accesso riceve «non esiste» e non «non puoi», perché il secondo confermerebbe che quella credenziale c’è; e non esiste un ripiego in chiaro, quindi se la chiave non risponde la cassaforte non si apre e non scrive.
Sopra ci sono le cose che servono davvero in un’agenzia: chiedere una credenziale a un cliente con un collegamento usabile una volta sola, condividerne diverse con un collega in un colpo solo, i promemoria di rotazione e un registro degli accessi leggibile.
Un assistente che guarda i dati veri
Non è un programma che risponde sulla documentazione e non cerca dentro i documenti: interroga il database vero, con gli stessi permessi dell’utente che lo sta usando. Risponde mentre scrive, mostra le schede dell’applicazione invece di descrivere i dati a parole, e quando la domanda implica un’azione, mandare una comunicazione o prenotare una sala, non la esegue: la propone e aspetta che una persona confermi.
Il lavoro meno visibile è stato sull’onestà delle risposte: non inventare persone, non riferire ciò che non è stato cercato, spiegare perché un elenco è vuoto invece di rispondere zero, e usare le parole dell’applicazione con il significato che hanno lì dentro. Le citazioni vengono verificate e c’è una serie di prove le cui risposte attese sono calcolate dal database, così modelli diversi si confrontano su domande vere.
I siti dei clienti, e una legge nuova
Dal 27 settembre 2026 il decreto legislativo 30/2026 vieta sui siti commerciali le affermazioni ambientali generiche non sostanziate. Il sistema tiene il registro dei siti dei clienti, con tempo di attività, analisi SEO, punteggi di velocità, scadenze dei domini e manutenzioni programmate, e sopra ci ha messo una scansione di conformità.
Il risultato non è un elenco di allarmi ma un ordinamento in tre livelli: vietato di per sé, quindi si rimuove; dipende dalle certificazioni del cliente, quindi si verifica; legittimo, quindi non si tocca. Il terzo livello è il motivo per cui la funzione esiste in questa forma: «biologico» su un prodotto certificato è protetto da un regolamento europeo, e segnalarlo come problema spingerebbe a cancellare una parola che il cliente ha tutto il diritto di usare. Uno strumento di conformità che grida al lupo non fa perdere tempo: fa danno.
La stessa applicazione, tre mestieri diversi
Chi amministra vede gli indicatori del mese, il carico, le consegne in tempo e una scrivania di riquadri che si spostano, salvata per utente. Il responsabile di progetto vede la squadra e può riprogrammare, ma non vede i prezzi. Chi lavora sulle commesse vede il suo lavoro e basta: meno voci nel menu e nessuna decisione che non gli compete.
I permessi nell’interfaccia sono uno specchio, non un controllo: nascondono ciò che non si può fare, ma l’autorizzazione vera sta nel backend su tre livelli, ruolo, azienda e area di lavoro. A lavoro finito un controllo su 65 rotte ha confrontato l’uno con l’altro.
Le stesse funzioni, in tasca
L’applicazione da telefono insegue quella da scrivania, non la reinterpreta: stesso comportamento, interfaccia da telefono. Si installa come applicazione web, viene distribuita anche come pacchetto Android ed è capace di notifiche.
La scrivania è personalizzabile, le lavorazioni si trascinano da una colonna all’altra e la cassaforte si sblocca con l’impronta o con il volto. Anche la barra in basso si configura per utente e per azienda, e la configurazione vive sul backend: si cambia telefono e si ritrova la propria.
Com'è fatto sotto, e cosa resta
Tutto su Google Cloud nella regione italiana: il backend su Cloud Run con un secondo servizio per il ponte verso la fatturazione elettronica, MySQL gestito, due depositi separati per immagini e per documenti firmati, Cloud KMS per le credenziali, e i lavori notturni programmati, dallo scatto degli indicatori alle 2 alla scansione dei siti ogni ora. La scansione gira a gruppi di tre per restare sotto il tempo massimo di una richiesta: metà del lavoro con un cloud è adattarsi ai suoi limiti invece di combatterli.
Tre cose me le porto dietro. Togliere una funzione è una decisione di prodotto e non una sconfitta, perché il pianificatore automatico funzionava ed è stato comunque rimosso. Il valore sta nel terzo livello, cioè nel distinguere «vietato» da «da verificare» da «legittimo, non toccare». E la sicurezza si progetta all’inizio o non si progetta: la divisione per azienda messa il primo giorno è il motivo per cui aggiungere una cassaforte di credenziali quattro mesi dopo è costato due settimane invece di una riscrittura.
Cosa è stato consegnato
- Backend FastAPI con 69 moduli di endpoint
- Gestionale da scrivania in React, 44 pagine
- Applicazione da telefono installabile, con notifiche
- Modello di permessi su ruolo, azienda e area di lavoro
- Integrazioni con Fatture in Cloud, Google, Trello, Canva, Meta e Stripe
- Firma elettronica con certificato e registro delle operazioni
- Cassaforte credenziali cifrata con Cloud KMS
- Assistente che interroga il database con i permessi dell'utente
- Scansione di conformità dei siti dei clienti
- Infrastruttura su Google Cloud e lavori notturni programmati
Scheda tecnica
- Piattaforma: Web application e app da telefono su Google Cloud
- Anno: 2026
- Stato: In produzione
- Tecnologie: Python, FastAPI, React, TypeScript, MySQL, Google Cloud, PWA, LLM, Web App, Automazione
Il cliente non è nominato per sua scelta. Le schermate vengono dal sistema in produzione, ma ogni dato riconducibile a una persona o a un’azienda è sostituito con dati di fantasia e i marchi sono sfocati: quello che resta vero è l’interfaccia.
Ti serve un software così?
Se hai un processo che oggi gestisci a mano e vorresti automatizzare, raccontamelo: capiamo insieme se ha senso costruirci sopra uno strumento.
Serve qualcosa di simile? Questo progetto è un esempio di sviluppo di web app e gestionali su misura. Il primo incontro e il preventivo sono gratuiti: scrivimi e ne parliamo.

