L'insidia del setup di Supabase: cosa i generatori di codice AI non automatizzano

L'insidia del setup di Supabase: cosa i generatori di codice AI non automatizzano

5 giugno 2026

Bastano meno di cinque minuti per sentirsi un mago del software. Apri un generatore di codice AI come Bolt o Lovable, digiti un prompt e guardi mentre crea una splendida dashboard connessa a un backend. L’interfaccia è pulita, la dashboard carica e le tabelle dati iniziali vengono renderizzate perfettamente. L’AI ti dice che la tua app è supportata da un database relazionale via Supabase, e tutto sembra pronto per la produzione.

Poi distribuisci l’applicazione, inviti i primi dieci utenti e guardi tutto crollare.

Il pulsante di login reindirizza gli utenti a una pagina d’errore. Le tabelle dati appaiono completamente vuote. Quando tre utenti cliccano contemporaneamente, il server crasha con un errore di limite di connessione al database.

I generatori di codice AI sono eccellenti nello scrivere componenti frontend e query al database lato client. Tuttavia, non possono configurare le policy di infrastruttura e le impostazioni di sicurezza che risiedono nella console del tuo database. Quando usi strumenti come v0 o Replit per generare la tua applicazione, l’amministratore del database resti comunque tu.

Ecco le quattro impostazioni critiche di configurazione di Supabase che i generatori di codice AI non automatizzano, e come puoi risolverle prima che la tua app vada online.

1. Il punto cieco della Row-Level Security (RLS)

Postgres utilizza un modello di sicurezza chiamato Row-Level Security (RLS) per controllare l’accesso alle singole righe di dati. In Supabase, l’RLS è attivo per impostazione predefinita per ogni nuova tabella. Ciò significa che, a meno che tu non scriva una policy di accesso esplicita, Postgres blocca ogni singola richiesta in entrata.

Quando chiedi a un builder AI di creare una nuova tabella nel database, spesso genererà la definizione dello schema SQL e la eseguirà. Il builder può vedere la struttura della tabella e leggere i dati perché usa la service role key durante lo sviluppo. Una volta configurate le query pubbliche lato client usando la chiave anonima, il database restituirà array vuoti.

La trappola della sicurezza

Per far funzionare le cose velocemente, alcuni builder si limitano a disattivare l’RLS. Questo è un rischio di sicurezza enorme. Poiché le credenziali di connessione a Supabase si trovano nel bundle JavaScript lato client, chiunque può aprire la console del browser, recuperare la tua chiave API anonima e cancellare l’intero database.

Come risolverlo

Devi scrivere policy di sicurezza SQL esplicite all’interno dell’editor SQL o della dashboard di Supabase. Se hai una tabella profili in cui gli utenti dovrebbero modificare solo i propri dati, devi imporre una policy che corrisponda al loro ID autenticato:

create policy "Users can update their own profiles"
on profiles for update
using (auth.uid() = id);

I builder AI possono scrivere i comandi SQL da eseguire, ma non possono accedere alla tua console Supabase per farlo. Verifica sempre che l’RLS sia abilitato su ogni tabella e che tu abbia scritto policy personalizzate per la lettura, l’inserimento e l’aggiornamento dei dati.

2. Esaurimento delle connessioni in ambienti Serverless

Quando esegui un server Node.js tradizionale, questo apre un’unica connessione persistente a Postgres e la condivide tra le richieste. I generatori di codice AI creano app che vengono distribuite in ambienti serverless o edge come Cloudflare Pages, Vercel o Netlify.

Ogni volta che un utente visita l’app o attiva una chiamata API, viene avviata una funzione serverless, che si connette al database, elabora la richiesta e si chiude. Se configuri l’applicazione usando la stringa di connessione diretta (solitamente porta 5432), ogni singola invocazione della funzione occupa la propria connessione diretta al database.

Se utilizzi il piano gratuito di Supabase, il tuo database ha un limite rigoroso di 60 connessioni simultanee. Se dieci utenti aprono l’app e attivano alcuni grafici della dashboard, raggiungerai immediatamente questo limite. I tuoi utenti vedranno query in timeout ed errori di connessione al database.

Connessioni dirette vs Pooled

Devi cambiare le variabili d’ambiente, passando dalla stringa di connessione diretta a una stringa di connessione pooled. Supabase usa Supavisor per mettere in coda e gestire le connessioni al database.

  • Transaction Pooling (Porta 6543): Ideale per applicazioni serverless. Apre e chiude le connessioni a livello di query, permettendo a migliaia di utenti di interrogare il database contemporaneamente.
  • Session Pooling (Porta 5432 con prefisso pooler): Mantiene la connessione attiva per tutta la durata della sessione. È necessario solo se ti affidi a variabili Postgres temporanee o a prepared statements.

Sostituisci la variabile d’ambiente dell’URL del database della tua applicazione con la stringa di connessione pooled fornita nelle impostazioni del database di Supabase, nella sezione connection pooler.

3. Loop di reindirizzamento Auth e fallimenti SMTP

Gli AI builder scrivono codice di autenticazione che presuppone che l’app sia in esecuzione su http://localhost:3000 o http://localhost:5173. Quando un utente si registra, l’app invia un’email di verifica con un link di reindirizzamento che lo rimanda a localhost invece che all’URL di produzione live.

La trappola del reindirizzamento

Se il tuo dominio live è mycoolapp.com e un utente clicca su un link di conferma inviato da Supabase Auth, verrà reindirizzato a un indirizzo locale che il suo computer non può trovare. Se effettua l’accesso tramite Google OAuth, il provider OAuth rifiuterà la richiesta perché l’URI di reindirizzamento non corrisponde alla lista dei redirect consentiti.

Come risolvere

Devi configurare gli URL di produzione direttamente nella console di Supabase:

  1. Vai in Project Settings > Auth.
  2. Aggiorna il campo Site URL con il tuo dominio di produzione (es. https://mycoolapp.com).
  3. Aggiungi eventuali rotte di callback aggiuntive sotto Redirect URLs (es. https://mycoolapp.com/auth/callback).

Inoltre, non fare affidamento sul mailer integrato di Supabase per gli utenti in produzione. Il server SMTP predefinito ha un limite rigoroso di tre email all’ora. Non appena un gruppo di utenti proverà a registrarsi, il mailer bloccherà le ulteriori registrazioni. Configura un provider SMTP personalizzato come Resend o SendGrid e inserisci le credenziali nelle impostazioni di auth.

4. Schema Drift e l’incubo delle migrazioni

I generatori AI funzionano ascoltando i prompt ed eseguendo immediatamente istruzioni SQL per modificare il database. Se chiedi all’AI di aggiungere un nuovo campo categoria alla tabella dei prodotti, questa eseguirà una query ALTER TABLE.

Questo funziona bene per una convalida rapida, ma bypassa completamente il controllo di versione. Se hai un ambiente di sviluppo locale, lo schema locale, il database di staging e quello di produzione andranno fuori sincrono.

Quando proverai a pubblicare nuove funzionalità, non avrai alcuna traccia delle modifiche al database necessarie per far funzionare il codice frontend.

La soluzione: tenere le migrazioni del database in Git

Se vuoi mantenere la tua app a lungo termine, non lasciare che l’AI modifichi direttamente il database di produzione.

  1. Usa la Supabase CLI per gestire gli schemi del database localmente.
  2. Genera file di migrazione per ogni aggiornamento dello schema: supabase migration new add_category_to_products
  3. Applica queste migrazioni agli ambienti di staging e produzione tramite una pipeline CI/CD, invece di eseguire query SQL casuali tramite prompt.

In questo modo la struttura del database resta documentata in Git ed eviti di distribuire codice che fa riferimento a colonne inesistenti in produzione.

Quando evitare la “tassa” della gestione Postgres

Se stai creando un MVP SaaS o un prodotto consumer complesso, configurare i database pooler e scrivere policy RLS fa semplicemente parte del lavoro. Ma se il tuo obiettivo è creare software aziendale operativo - come portali clienti, dashboard interne o directory di partner - potresti non aver bisogno di pagare questa “tassa” infrastrutturale.

Per gli strumenti aziendali e i portali clienti, puoi bypassare completamente l’onere dell’amministrazione del database usando Softr.

Invece di costringerti a configurare stringhe di connessione, gestire migrazioni di database o scrivere policy SQL, Softr offre un database relazionale nativo integrato direttamente nella piattaforma. Avrai permessi utente visuali, filtri di ricerca istantanei e regole di accesso sicure senza scrivere una singola policy o gestire un connection pool di Postgres.

Puoi descrivere il caso d’uso della tua applicazione al Softr AI Co-Builder, che configurerà automaticamente l’interfaccia, lo schema del database e le regole di accesso sicuro. Se vuoi modificare un livello di permesso, aggiungere un campo al database o aggiornare un workflow, puoi farlo visivamente nell’editor. Ottieni la velocità della generazione AI combinata con l’affidabilità di un hosting a manutenzione zero, potendoti concentrare sulla logica dell’app piuttosto che sul debugging del database.