Blog
In evidenza

S3, Sharp e CloudFront: la media pipeline di ReD Sposi
Perché GridFS non bastava per la galleria di un'app di matrimonio, come ho strutturato il pipeline di upload con Sharp, e perché CloudFront è la parte più silenziosa ma più importante.

Costruire un'app per il mio matrimonio
Ad agosto 2026 mi sposo. Invece di un sito statico, ho costruito un'app mobile full-stack per i nostri invitati — RSVP, programma, galleria, scommesse e chat. Ecco com'è andata.

Claude Code: com'è davvero usarlo
Ero scettico sugli strumenti di coding basati sull'AI. Dopo mesi di uso regolare, ho un'opinione più onesta di quanto suggerisca l'hype.

Costruire con InvoiceTronic: fatturazione elettronica senza il dolore
Ho costruito un gestionale completo per la mia ditta individuale. La parte più difficile non era la contabilità — era l'SDI. Ecco come InvoiceTronic ha reso tutto gestibile.

Barba Studio è online
Dopo mesi di sviluppo nei ritagli di tempo, Barba Studio — un'app di gestione prenotazioni pensata appositamente per i barbershop italiani — è ufficialmente lanciata.

Il mio stack tecnologico: Node.js, React e React Native
Perché ho costruito ogni prodotto che ho mai rilasciato sulle stesse quattro tecnologie — e perché non cambierei nulla.
Tutti gli articoli

La chat di gruppo che gira durante il matrimonio
Il gioco delle scommesse è asincrono — le risposte aspettano. La chat è live, gira il giorno del matrimonio, e quel giorno non posso essere al laptop. Questo cambia tutto.


Condividere i tipi tra quattro app
ReD Sposi è un monorepo con Expo, Express, React + Vite, e Next.js. Tenere i tipi TypeScript allineati tra tutti e quattro senza un package condiviso formale è una scelta pragmatica che ha un prezzo.


NativeWind: Tailwind CSS su React Native
Ho usato NativeWind in ReD Sposi dall'inizio. Funziona, e abbassa il costo cognitivo di lavorare tra web e mobile. Ma non è Tailwind — e confonderli costa.


Lead engineer di giorno, indie developer di notte
Da anni faccio entrambe le cose in parallelo. Le due modalità si parlano più di quanto sembri — ma il cambio di contesto ha un costo che non si vede dall'esterno.


Il gestionale che ho costruito per me
A un certo punto ho smesso di adattarmi ai software contabili esistenti e ho costruito il mio. Non per venderlo, non per mostrarlo — solo perché niente di quello che esisteva funzionava davvero per il mio caso.


Notifiche push su mobile: quello che impari solo sbagliando
Expo Push Notifications sembrano semplici dalla documentazione. In produzione ci sono token che scadono, permessi che non arrivano, e una differenza fondamentale tra iOS e Android che impari a tue spese.


Il pannello admin che nessuno vede
Ogni prodotto che ho costruito ha un pannello admin. Non lo mostra nessuno, non entra nei case study, non appare negli screenshot. È però la parte che rende possibile tutto il resto.


Prodotti con una scadenza scritta nel DNA
ReD Sposi finisce ad agosto. Non è un bug del design — è una feature. Costruire software con una data di fine prestabilita cambia ogni decisione che prendi lungo la strada.


Il mio server di produzione non usa container
ReD Sposi, Barba Studio, Gestionale Molinari: tutti su Ubuntu con PM2, senza Docker, senza orchestrazione. Non è pigrizia — è una scelta deliberata che tiene ancora.


Expo Router ha cambiato come penso alla navigazione
Prima configuravo stack e tab in codice. Ora creo file. Sembra un dettaglio sintattico, ma è un cambio di modello mentale più profondo di quanto sembri.


Auth per persone che conosci già
La maggior parte dei sistemi di autenticazione è progettata per gli sconosciuti. ReD Sposi era diverso: sapevo già chi erano tutti i miei utenti. Quello che sembra un dettaglio ha cambiato ogni decisione di design.


Chiudere il trimestre da indipendente
Il 31 marzo non è solo la fine del primo trimestre — è un appuntamento fisso con la realtà. Fatture, LiPE, prodotti: come faccio il bilancio ogni tre mesi.


Una LiPE a credito: il formato XML campo per campo
Il file XML che si invia all'Agenzia delle Entrate per una LiPE sempre a credito ha alcune particolarità non ovvie: tag condizionali, campi assenti, e un credito che si propaga di modulo in modulo.


Anatomia di una LiPE
Il modello di comunicazione delle liquidazioni periodiche IVA spiegato campo per campo: cosa contiene il quadro VP, come si calcola l'IVA da versare, e cosa rivela la struttura del modello sul sistema fiscale italiano.


Chi piange per primo: il gioco delle scommesse di ReD Sposi
Come ho costruito il sistema di quiz e classifica dell'app — una state machine semplice, Socket.io per il real-time, e qualche scelta di design che non mi aspettavo di trovare interessante.


Anatomia di una FatturaPA
Il formato XML della fattura elettronica italiana racconta molto più di quanto sembra: burocrazia codificata, scelte di design interessanti, e qualche stranezza da conoscere.


Il design delle API è UX
Gli endpoint che esponi sono un prodotto. Lo sviluppatore che li chiama è il tuo utente. Una cattiva DX si accumula in modi che una cattiva UI non fa mai.


Lavorare senza un designer
La maggior parte degli sviluppatori solisti cerca di progettare tutto da sola. La mossa migliore è prendere il minor numero possibile di decisioni di design — e lasciare che sia un sistema a fare il resto.


Il naming nell'era dell'AI
I buoni nomi hanno sempre avuto importanza. Con gli strumenti di coding AI, ne hanno di più. Un LLM legge il tuo codice come farebbe un nuovo ingegnere — inferendo l'intento dai nomi, non dal comportamento a runtime.


L'interfaccia è il contratto
Le implementazioni sono economiche da cambiare. Le interfacce no. La riga di codice più costosa che scriverai non è nella logica — è nella firma del tipo.


Gli errori sono dati
L'istinto quando qualcosa va storto è catturare l'errore e andare avanti. È l'istinto sbagliato. Gli errori sono informazioni su quello che il tuo sistema sta davvero facendo — ignorarli è come volare alla cieca.


Il testing è un problema di design
La maggior parte degli sviluppatori pensa di avere un problema con i test. In realtà ha un problema di design. Il codice difficile da testare è un sintomo — e la soluzione raramente riguarda i test.


Il mindset asincrono
La maggior parte dei problemi di performance non riguarda il rendere le cose più veloci — riguarda il fare lavoro al momento sbagliato. Il default sincrono è una trappola cognitiva, e uscirne è soprattutto un cambiamento di prospettiva.


Lo scope è il vero prodotto
Il backlog è un cimitero di buone idee che avrebbero ucciso il prodotto. La competenza più difficile nell'indie dev non è costruire — è decidere cosa non costruire.


Traccia le tue decisioni
Git ti dice cosa è cambiato. Non ti dice perché hai fatto quella scelta. Quel contesto mancante è ciò che trasforma una decisione ragionevole in un mistero sei mesi dopo.


Scrivere prompt è programmare
La maggior parte delle persone tratta il prompting come un'attività a tentativi. È invece una disciplina ingegneristica — con gli stessi cicli di feedback, tecniche di debugging e principi di astrazione di qualsiasi altro codice.


Il costo delle dipendenze
Ogni pacchetto che aggiungi è una scommessa che qualcun altro lo manterrà più a lungo di quanto tu ne abbia bisogno. Vale la pena pensarci prima di eseguire npm install.


Il real-time è più difficile di come appare
Le WebSocket sembrano semplici finché non vai in produzione. WebRTC sembra semplice finché non devi farlo funzionare ovunque. Ecco cosa ho imparato costruendo Clover e Argan.


Come progetto un database
Il design dello schema è la parte più difficile da cambiare in un software. Il modo per farlo bene è partire dalle query, non dalle entità.


Quando riscrivere, quando fare refactoring
La conversazione sulla riscrittura è una delle più cariche emotivamente nell'ingegneria del software. Ecco come capire quale delle due ti serve davvero.


La seconda versione
La prima versione ti fa entrare nella stanza. La seconda è dove inizia il lavoro vero.


Rilasciare in produzione è una competenza
La differenza tra chi finisce i progetti e chi no non è il talento o la motivazione. È un insieme di abitudini che si possono imparare.


La maggior parte dei portfolio da sviluppatore è rotta
Cosa cercano davvero chi assume, e perché quasi tutti i portfolio mancano il punto.


IoT e web: cosa ho imparato lavorando in entrambi i mondi
Lavorare tra hardware e frontend insegna cose che nessuno dei due mondi ti dice da solo.


MongoDB senza Mongoose
Mongoose è la scelta predefinita per MongoDB in Node.js. Ho smesso di usarlo — ecco perché il driver nativo è spesso l'opzione migliore.


Costruire nei margini
Un lavoro a tempo pieno, una magistrale, clienti da gestire e due prodotti in produzione. Ecco come funziona davvero.


Perché Expo ha cambiato il modo in cui sviluppo app mobile
Odiavo lo sviluppo mobile. Expo ha risolto quasi tutto — ecco come.


Next.js App Router: cosa uso davvero dopo un anno
Un'analisi pratica delle funzionalità dell'App Router che si guadagnano il posto — e quelle che ho imparato a evitare.
