Sultan
Piattaforma per la forza lavoro sul campo
2022 - 2023 · Architettura mobile cross-platform e backend
Piattaforma per la forza lavoro sul campo di un'azienda edile italiana — app native iOS e Android più una PWA installabile su un unico backend Firebase, con timbratura tramite QR e geolocalizzazione, firma digitale dei documenti, chat e un back-office di amministrazione in Vue.
Una forza lavoro, tre client nativi e un core Firebase condiviso
Sultan è una piattaforma per la forza lavoro sul campo costruita per un’azienda edile e industriale italiana, dove le persone che usano il software sono in cantiere anziché alla scrivania. Il mio ruolo è stata l’architettura che collega tre app client — iOS nativa, Android nativa e una PWA installabile — a un unico backend Firebase e a un back-office di amministrazione web.
Il prodotto esiste perché la realtà quotidiana di un cantiere non si adatta a un normale strumento da ufficio. I lavoratori si spostano tra i cantieri, la connettività è inaffidabile e l’azienda ha comunque bisogno di registri di timbratura accurati, documenti firmati e un canale affidabile per raggiungere tutti. Sultan trasforma tutto questo in un unico sistema operativo: ogni lavoratore porta con sé l’app, ogni cantiere è un luogo in cui si può timbrare e il back-office vede tutto in tempo reale.
Anziché distribuire un’unica webview impacchettata, il progetto fa girare tre veri client su un contratto condiviso. L’app iOS è in SwiftUI con una struttura MVVM — view model dedicati per dashboard, cantieri, timbratura, calendario, spese, documenti, chat, autenticazione e localizzazione. L’app Android è in Kotlin nativo con la stessa impostazione MVVM, dependency injection Hilt e repository Firebase. Il terzo client è una PWA in Nuxt 3 costruita con Nuxt UI, Pug e @vite-pwa/nuxt, installabile nella schermata home e consapevole dell’offline tramite Dexie e IndexedDB. Tutti e tre dialogano con lo stesso progetto Firebase, così una timbratura da un iPhone, da un telefono Android o dalla web app finisce nello stesso posto.
Il core condiviso è Firebase: Firestore per i dati, Firebase Auth per identità e ruoli, Cloud Functions per la logica server affidabile, Storage per i documenti e Cloud Messaging per il push. Un package TypeScript @sultan/shared contiene i modelli di dominio — utenti, cantieri, timbrature, spese, documenti, firme, comunicazioni, gruppi chat, messaggi, eventi, attrezzature, report di lavoro e notifiche — così le stesse strutture sono rispettate dalle app, dalle functions e dal pannello di amministrazione. I trigger di Firestore mantengono tutto sincronizzato: le scritture si propagano verso gli indici Algolia per la ricerca e verso le notifiche push per i messaggi in chat, gli eventi del calendario, le variazioni dei cantieri e gli aggiornamenti delle timbrature.
La parte più sensibile dal punto di vista della sicurezza è la timbratura. Un lavoratore non si limita a premere un pulsante; scansiona un QR code fisicamente presente in cantiere. Quei codici sono generati da una Cloud Function callable riservata agli amministratori, che firma il payload del cantiere come JWT ES256 e lo rende in un’immagine QR. La scansione del codice apre l’app con un token verificabile, così una timbratura dimostra sia il cantiere sia che il codice è autentico anziché fabbricato. Il flusso di timbratura cattura anche la geolocalizzazione e supporta una modalità caposquadra — un responsabile di cantiere può timbrare per sé o per gli altri lavoratori presenti — oltre a voci di trasferta e spesa allegate allo stesso record.
Oltre alla timbratura, Sultan gestisce il resto del rapporto di lavoro. I lavoratori ricevono documenti personali — buste paga e LUL, documenti DPI e di welfare — e li firmano digitalmente tramite una function dedicata sign-document, così l’azienda ha un registro tracciabile di consegna e presa visione. Una bacheca di comunicazioni invia annunci a tutta l’azienda, una chat di gruppo con moderazione admin tiene le squadre raggiungibili e un calendario combina gli eventi pianificati con lo storico delle timbrature del lavoratore. Attrezzi e attrezzature sono tracciati per cantiere e tutto ciò che è importante arriva come notifica push.
Il lato aziendale è un back-office di amministrazione in Vue separato. Costruito con Vuex, vuexfire, Google Maps, un calendario e Algolia, offre agli amministratori una mappa live di cantieri e timbrature, anagrafiche dei dipendenti e report per dipendente, gestione di documenti e comunicazioni, tracciamento delle attrezzature ed export Excel delle ore di lavoro generato lato server con gli helper pdf-lib e xlsx nel livello delle functions. L’accesso basato sui ruoli — lavoratore, caposquadra, admin e super-admin — funziona in modo coerente dalle Cloud Functions fino a ciò che ogni client è autorizzato a fare.
Il risultato è una piattaforma modellata attorno al campo anziché all’ufficio: app native che risultano naturali su ogni telefono, un fallback web installabile, un back-office che rispecchia i cantieri in tempo reale e un core Firebase che mantiene affidabili autorizzazione, firma e sincronizzazione anche quando il lavoro avviene lontano da una buona connessione.
Gli screenshot mostrati sono anonimizzati: nomi reali, indirizzi e riferimenti dei documenti sono stati sostituiti con dati fittizi.
Galleria







