Scenario · Web app interna · Risorse umane
Le risorse umane
fuori dai fogli di calcolo.
Un’azienda in crescita che gestisce presenze, ferie e valutazioni tra fogli Excel, email e messaggi. Una web app interna che mette tutto in un unico posto, con approvazioni chiare e report pronti quando servono.
Scenario web app — gestionale HR su misura
150 persone gestite
con tre strumenti che non si parlano.
Lo scenario: un'azienda in forte crescita che supera i 150 dipendenti, quando il team HR alza la mano: il sistema non regge più. Le presenze si segnano su un foglio Google condiviso, le ferie si chiedono per email, le valutazioni sono un file Excel per reparto, e i report mensili per la direzione richiedono un paio di giorni di lavoro manuale per mettere insieme fonti diverse.
Con le prossime assunzioni il caos diventerebbe ingestibile. Chi lavora in HR passa gran parte del tempo in attività amministrative ripetitive invece di occuparsi di selezione, benessere e crescita delle persone.
Non serve un software HR generico da configurare in mille modi: serve uno strumento pensato per i processi reali dell'azienda, collegato ai sistemi esistenti e così semplice da essere usato da tutti senza formazione.
«Ogni lunedì mattina passo due ore a controllare chi è in ferie, chi in smart working e chi ha straordinari da recuperare. Due ore su dati che dovrebbero essere visibili in un secondo.»
— Quello che sento spesso dai responsabili HRRequisiti piattaforma HR aziendale
Un'unica fonte di verità.
Tre livelli di accesso.
Gestione presenze e timbrature in tempo reale
Ogni dipendente deve poter segnare entrata, uscita e modalità (ufficio / smart working / trasferta) da qualsiasi dispositivo. L'HR vede lo stato dell'intero team aggiornato al minuto, con alert automatici per assenze non giustificate.
Workflow ferie e permessi con approvazione multi-livello
Il dipendente richiede ferie dalla propria area. La richiesta va al manager diretto (primo livello) e poi all'HR (secondo livello). Notifica Slack automatica a ogni passaggio di stato. Calendario condiviso per visualizzare le assenze del team prima di approvare.
Performance review strutturata con cicli configurabili
L'HR configura i cicli di review (semestrale / annuale), gli obiettivi per ruolo e i template di valutazione. Manager e dipendente compilano le rispettive sezioni in modo asincrono. I risultati aggregati alimentano la dashboard della direzione.
Reportistica automatica con export PDF e CSV
I report mensili (presenze, ore straordinarie, ferie residue, headcount per reparto) devono generarsi in un click — non in due giorni. Export in PDF brandizzato per la direzione e CSV per il payroll. Schedulazione automatica con invio email ogni primo del mese.
RBAC granulare: Admin HR, Manager, Dipendente
Tre ruoli distinti con permessi configurabili. L'Admin HR vede tutto e può modificare qualsiasi record. Il Manager vede e approva solo il suo team. Il Dipendente accede solo ai propri dati. I permessi vengono controllati sia lato frontend che lato API — nessuna fiducia implicita nel client.
Sfide tecniche gestionale risorse umane
Dati sensibili, logica complessa,
zero margine d'errore.
Una piattaforma HR gestisce dati personali, buste paga, valutazioni riservate. Ogni bug non è un fastidio: è un problema legale o di fiducia. Le sfide sono di architettura prima ancora che di codice.
Processo sviluppo web app HR
10–12 settimane,
dal foglio Excel al go-live.
Interviste separate con chi lavora in HR, con alcuni responsabili di reparto e con un campione di dipendenti. L'obiettivo: capire come si gestiscono davvero presenze e ferie — non come dovrebbero essere gestite. Emergono sempre tanti piccoli processi informali (messaggi WhatsApp, promemoria personali, email in copia a tutti) che nessun requisito scritto catturerebbe. Diventano i casi limite da gestire nel sistema.
Backend Laravel con autenticazione Sanctum, RBAC con policy dettagliate e le tre entità principali: presenze, richieste di ferie e cicli di valutazione. Ogni endpoint restituisce i permessi dell'utente corrente, così il frontend React non deve fare chiamate separate per sapere cosa mostrare. Database MySQL con indici pensati per i report aggregati.
Interfaccia React con TypeScript, React Query per lo stato del server e Recharts per i grafici. Tre layout per i tre ruoli — Admin HR, Manager, Dipendente — che si adattano ai permessi ricevuti dall'API. Il flusso delle ferie è il modulo più complesso: più stati (bozza → inviata → approvazione manager → approvazione HR → approvata/rifiutata) con notifica Slack a ogni passaggio.
Generatore di report con Laravel Horizon (Redis) per le code. Ogni report mensile è un job in background: aggrega i dati, compone il PDF con DomPDF (modello con logo e colori aziendali), lo salva su MinIO (S3 in casa), crea un link firmato valido 24 ore e avvisa via email e Slack. Il job parte da solo il primo di ogni mese alle 7:00.
Due settimane di test di accettazione con un gruppo di utenti per ogni ruolo. Migrazione dei dati storici dai fogli Excel con uno script PHP di pulizia. Messa online per reparti: prima un team, poi gli altri, infine tutti. Due settimane di doppio binario con i vecchi strumenti ancora disponibili in sola lettura.
Soluzione tecnica: RBAC e dashboard React
Tre moduli, un'unica piattaforma.
Zero silos.
La piattaforma si costruisce attorno a tre moduli indipendenti ma integrati, ognuno progettato partendo dal modo di lavorare reale delle persone — non da un modello astratto.
Timbrature e presenze — dashboard in tempo reale
Ogni dipendente accede da browser o mobile e seleziona la modalità del giorno (ufficio, smart working, trasferta, malattia). Il sistema registra l'orario e aggiorna la dashboard HR in tempo reale tramite polling ogni 60 secondi con React Query. I manager vedono solo il proprio team; l'Admin HR vede tutto con filtri per reparto, sede e modalità. Le anomalie (assenza non giustificata entro le 10:00) generano un alert automatico Slack al manager responsabile.
Workflow ferie — da 3 email a 1 click
La richiesta di ferie passa per 5 stati con passaggi espliciti e notifiche automatiche. Prima di inviarla, il dipendente vede il calendario del proprio team per evitare sovrapposizioni. Il manager riceve una notifica Slack con il link diretto all'approvazione, senza dover cercare la richiesta. Se non risponde entro 48 ore, l'HR riceve un promemoria. Obiettivo: quasi tutte le richieste gestite entro 24 ore, invece dei giorni di un processo via email.
Performance review — strutturata, asincrona, riservata
L'HR imposta il ciclo di valutazione: periodo, modelli per ruolo (da Junior a Lead), obiettivi aziendali di riferimento e scadenze. Manager e dipendente compilano le loro sezioni in modo indipendente — nessuno vede la valutazione dell'altro finché entrambe non sono chiuse. I commenti sono cifrati a livello di campo (AES-256), così anche un accesso diretto al database non li espone. I dati aggregati — medie per reparto, distribuzione delle valutazioni, andamento rispetto al ciclo precedente — alimentano la dashboard della direzione con grafici interattivi.
Nota GDPR: i dati sulle valutazioni richiedono misure di sicurezza rafforzate secondo l'art. 25 del GDPR (privacy by design). La cifratura a livello di campo è una misura tecnica da documentare nel registro dei trattamenti dell'azienda.
Stack tecnologico React TypeScript Laravel
Scelte deliberate,
non casuali.
Perché Laravel e non Node.js?
Laravel ha un sistema di policy e gate maturo per il RBAC, un ORM (Eloquent) che gestisce bene le relazioni tra team, ruoli e permessi, e Laravel Horizon per le code — tutto già integrato e collaudato. Su Node.js lo stesso sistema richiederebbe di mettere insieme librerie separate, con meno garanzie di coerenza. Per una web app interna con dati sensibili, la maturità dell'ecosistema conta.
Perché React Query e non Redux?
Lo stato dell'applicazione è quasi interamente stato server: dati che vivono nel backend e devono essere sincronizzati. React Query gestisce cache, refetch, ottimismo UI e invalidazione in modo dichiarativo — senza il boilerplate di Redux. Il risultato è un'interfaccia che sembra real-time con la semplicità di una chiamata API.
Obiettivi di esempio — web app HR
L'HR smette
di fare amministrazione.
Numeri di esempio, non risultati di un cliente: obiettivi realistici per uno scenario come questo, da misurare a qualche mese dal go-live completo rispetto allo stesso periodo precedente.
«Il primo report mensile arriva da solo, il primo del mese alle 7:01, con una notifica su Slack.» È il momento che dà il senso a tutto il progetto.
— L'obiettivo concreto del modulo reportLearnings sviluppo web app HR
Cosa porto
in ogni progetto così.
Intervistare gli utenti prima di scrivere codice non è un costo in più: è un risparmio. I processi informali che emergono dalle interviste sono altrettanti bug evitati in produzione. Ogni ora di analisi ne risparmia diverse di sviluppo e test.
Il RBAC deve vivere nel backend, non nell'UI. Nascondere un bottone nel frontend non è sicurezza — è cosmesi. Il sistema di Policy Laravel che espone i permessi come dato ha permesso di avere un'UI che si adatta dinamicamente senza duplicare logica di autorizzazione nel codice React.
Il lancio graduale per reparto vale sempre la complessità in più. Partire con un solo team fa emergere i problemi di usabilità — non di codice — prima che tocchino tutta l'azienda.
I job in background cambiano l'esperienza in modo sproporzionato. Passare da un PDF generato mentre l'utente aspetta decine di secondi a una notifica quando è pronto migliora molto la soddisfazione, a parità di risultato.
Il periodo di doppio binario è fondamentale per la fiducia. Lasciare i vecchi Excel in sola lettura per un paio di settimane dopo il lancio abbatte la resistenza al cambiamento: le persone possono "controllare" che i dati siano giusti, e poi smettono di farlo.
Hai un processo interno che merita uno strumento su misura?
Excel e email vanno bene finché non cresci. Poi servono strumenti che crescono con te.
Hai un progetto simile in mente?
Raccontamelo: partiamo da obiettivi e priorità, la prima call è gratuita.