Costruire un'app AI sembra semplice finché non la metti in produzione. Ecco gli errori che ho fatto — e che spero tu possa evitare.
Errore 1: SQLite in produzione su serverless
Il mio primo deploy su Vercel usava SQLite. In locale funzionava perfettamente. In produzione, ogni richiesta creava un nuovo file database perché le serverless functions sono stateless. Risultato: ogni utente vedeva un database vuoto.
Lezione: su serverless, usa sempre un database esterno (PostgreSQL, MySQL, MongoDB). Mai file-based.
Errore 2: JWT_SECRET = "maiteam2026"
Sì, l'ho fatto davvero. Il secret per firmare i token JWT era una stringa hardcoded nel codice sorgente. Chiunque leggesse il repo poteva generare token validi per qualsiasi utente.
L'ho scoperto durante un audit di sicurezza che mi sono fatto da solo (dopo 3 mesi di produzione). Ho dovuto invalidare tutti i token esistenti e forzare il re-login di tutti gli utenti.
Lezione: i secret vanno SEMPRE in variabili d'ambiente. Mai nel codice. Mai.
Errore 3: ignoreBuildErrors: true
Per settimane ho avuto ignoreBuildErrors: true nel next.config. Il motivo? Avevo 80+ errori TypeScript che non volevo fixare. Il risultato? Bug in produzione che non capivo perché il compilatore non me li segnalava.
Quando finalmente ho rimosso quel flag e fixato tutti gli 82 errori, l'app è diventata 10 volte più stabile.
Lezione: TypeScript strict è tuo amico. Non ignorare gli errori, fixali.
Errore 4: "Sono MAITEAM, il tuo assistente"
Il Team Leader si presentava come "MAITEAM". Ma MAITEAM è il nome dell'azienda, non dell'agente. Gli utenti erano confusi. "Chi sei? Un'app? Una persona? Un bot?"
Ho dovuto riscrivere l'intero prompt di identità: "Sono il tuo Team Leader" — chiaro, semplice, senza ambiguità.
Lezione: l'identità dell'AI deve essere cristallina. L'utente deve sapere con chi sta parlando.
Errore 5: Nessun rate limiting
Per le prime due settimane, chiunque poteva mandare 1000 messaggi al giorno. Un singolo utente mi ha generato €47 di costi API in un weekend. Ho implementato il rate limiting il lunedì mattina.
Lezione: il rate limiting va implementato PRIMA del lancio, non dopo il primo conto salato.
Errore 6: Deploy senza test
Ho pushato codice in produzione senza test automatici per mesi. Ogni deploy era una roulette russa. Un giorno ho rotto il login per tutti gli utenti con un typo in una riga.
Ora ho 1180 test automatici. Ogni push viene verificato prima del deploy. Dormire è diventato più facile.
Lezione: i test non sono un lusso. Sono l'unica cosa che ti separa dal disastro.