Basta menos de cinco minutos para sentirse como un mago del software. Abres un generador de código con IA como Bolt o Lovable, escribes un prompt y ves cómo monta un panel precioso conectado a un backend. La interfaz es limpia, el panel carga y las tablas de datos iniciales se renderizan perfectamente. La IA te dice que tu app se apoya en una base de datos relacional a través de Supabase y todo parece listo para producción.
Entonces despliegas la aplicación, invitas a tus primeros diez usuarios y ves cómo todo se desmorona.
El botón de inicio de sesión redirige a los usuarios a una página rota. Las tablas de datos aparecen totalmente vacías. Cuando tres usuarios navegan al mismo tiempo, el servidor se cae con un error de límite de conexión a la base de datos.
Los generadores de código con IA son excelentes escribiendo componentes front-end y consultas de base de datos del lado del cliente. Sin embargo, no pueden configurar las políticas de infraestructura y los ajustes de seguridad que residen dentro de la consola de tu base de datos. Cuando usas herramientas como v0 o Replit para generar tu aplicación, tú sigues siendo el administrador de la base de datos.
Aquí tienes los cuatro ajustes críticos de configuración de Supabase que los generadores de código con IA no automatizan, y cómo puedes solucionarlos antes de que tu app salga a la luz.
1. El punto ciego de la Row-Level Security (RLS)
Postgres utiliza un modelo de seguridad llamado Row-Level Security (RLS) para controlar el acceso a filas de datos individuales. En Supabase, la RLS está activada por defecto en cada tabla nueva. Esto significa que, a menos que escribas una política de acceso explícita, Postgres bloquea cada una de las solicitudes entrantes.
Cuando pides a un constructor de IA que cree una nueva tabla de base de datos, a menudo generará la definición del esquema SQL y la ejecutará. El constructor puede ver la estructura de la tabla y leer los datos porque utiliza la clave de rol de servicio durante el desarrollo. Una vez que configuras las consultas públicas del lado del cliente usando la clave anónima, la base de datos devuelve arrays vacíos.
La trampa de la seguridad
Para que todo funcione rápido, algunos constructores simplemente desactivan la RLS. Esto es un riesgo de seguridad masivo. Dado que tus credenciales de conexión a Supabase están en el paquete JavaScript del lado del cliente, cualquiera puede abrir la consola del navegador, copiar tu clave API anónima y borrar toda tu base de datos.
Cómo solucionarlo
Debes escribir políticas de seguridad SQL explícitas dentro del Editor SQL o el panel de Supabase. Si tienes una tabla de perfiles donde los usuarios solo deben editar sus propios datos, debes aplicar una política que coincida con su ID autenticado:
create policy "Users can update their own profiles"
on profiles for update
using (auth.uid() = id);
Los constructores de IA pueden escribir los comandos SQL para que tú los ejecutes, pero no pueden entrar en tu consola de Supabase para hacerlo ellos. Verifica siempre que la RLS esté activada en cada tabla y que hayas escrito políticas personalizadas para leer, insertar y actualizar datos.
2. Agotamiento de conexiones en entornos serverless
Cuando ejecutas un servidor Node.js tradicional, este abre una única conexión persistente a Postgres y la comparte entre todas las solicitudes. Los generadores de código con IA crean apps que se despliegan en entornos serverless o edge como Cloudflare Pages, Vercel o Netlify.
Cada vez que un usuario visita tu app o activa una llamada a la API, se levanta una función serverless, se conecta a tu base de datos, procesa la solicitud y se cierra. Si configuras tu aplicación usando la cadena de conexión directa (normalmente el puerto 5432), cada invocación de función reclama su propia conexión directa a la base de datos.
Si usas el plan gratuito de Supabase, tu base de datos tiene un límite estricto de 60 conexiones concurrentes. Si diez usuarios abren tu app y cargan unos cuantos gráficos del panel, alcanzarás este límite enseguida. Tus usuarios verán errores de conexión a la base de datos y consultas agotadas por tiempo de espera.
Conexiones directas frente a conexiones agrupadas
Debes cambiar tus variables de entorno de la cadena de conexión directa a una cadena de conexión agrupada (pooled). Supabase utiliza Supavisor para encolar y gestionar las conexiones de la base de datos.
- Transaction Pooling (Puerto 6543): Ideal para aplicaciones serverless. Abre y cierra conexiones a nivel de consulta, lo que permite que miles de usuarios consulten la base de datos simultáneamente.
- Session Pooling (Puerto 5432 con prefijo de pooler): Mantiene la conexión activa durante toda la sesión. Solo es necesario si dependes de variables temporales de Postgres o sentencias preparadas.
Sustituye la variable de entorno de la URL de la base de datos de tu aplicación por la cadena de conexión agrupada que aparece en la configuración de tu base de datos de Supabase, en la sección del connection pooler.
3. Bucles de redirección de Auth y fallos de SMTP
Los constructores de IA escriben código de autenticación asumiendo que tu app se ejecuta en http://localhost:3000 o http://localhost:5173. Cuando un usuario se registra, la app envía un email de verificación con un enlace de redirección que lo devuelve a localhost en lugar de a tu URL de producción real.
La trampa de la redirección
Si tu dominio real es mycoolapp.com y un usuario hace clic en un enlace de confirmación enviado por Supabase Auth, será redirigido a una dirección local que su ordenador no puede encontrar. Si inicia sesión mediante Google OAuth, el proveedor de OAuth rechazará la solicitud porque la URI de redirección no coincide con la lista de redirecciones permitidas.
Cómo solucionarlo
Debes configurar tus URL de producción directamente en la consola de Supabase:
- Ve a Project Settings > Auth.
- Actualiza el campo Site URL con tu dominio de producción (por ejemplo,
https://mycoolapp.com). - Añade cualquier ruta de callback adicional en Redirect URLs (por ejemplo,
https://mycoolapp.com/auth/callback).
Además, no dependas del servicio de correo integrado de Supabase para tus usuarios de producción. El servidor SMTP predeterminado tiene un límite estricto de tres correos por hora. En cuanto unos pocos usuarios intenten registrarse, el servicio bloqueará nuevos registros. Configura un proveedor SMTP externo como Resend o SendGrid e introduce esas credenciales en tu configuración de auth.
4. Desviación del esquema y la pesadilla de las migraciones
Los generadores de IA funcionan escuchando prompts y ejecutando inmediatamente sentencias SQL para cambiar tu base de datos. Si le pides a la IA que añada un nuevo campo de categoría a tu tabla de productos, ejecutará una consulta ALTER TABLE.
Esto funciona bien para validaciones rápidas, pero ignora por completo el control de versiones. Si tienes un entorno de desarrollo local, el esquema local, la base de datos de staging y la de producción dejarán de estar sincronizados.
Cuando intentes implementar nuevas funciones, no tendrás ningún registro de los cambios en la base de datos necesarios para que el código del frontend funcione.
La solución: Mantener las migraciones de la base de datos en Git
Si quieres mantener tu app a largo plazo, no permitas que la IA modifique tu base de datos de producción directamente.
- Usa la Supabase CLI para gestionar los esquemas de la base de datos localmente.
- Genera archivos de migración para cada actualización del esquema:
supabase migration new add_category_to_products - Aplica estas migraciones a tus entornos de staging y producción mediante un pipeline de CI/CD, en lugar de ejecutar consultas SQL aleatorias mediante prompts.
Así, la estructura de tu base de datos quedará documentada en Git y evitarás desplegar código que haga referencia a columnas que no existen en producción.
Cuándo evitar la carga de gestión de Postgres
Si estás creando un MVP de SaaS o un producto de consumo complejo, configurar poolers de base de datos y escribir políticas de RLS es parte del trabajo. Pero si tu objetivo es crear software operativo para negocios -como portales de clientes, paneles internos o directorios de socios- puede que no necesites pagar este impuesto de infraestructura.
Para herramientas de negocio y portales de clientes, puedes saltarte por completo la carga de la administración de bases de datos usando Softr.
En lugar de obligarte a configurar cadenas de conexión, gestionar migraciones o escribir políticas SQL, Softr ofrece una base de datos relacional nativa integrada directamente en la plataforma. Tienes permisos de usuario visuales, filtros de búsqueda instantáneos y reglas de acceso seguras sin escribir una sola política ni gestionar un pool de conexiones de Postgres.
Puedes describir el caso de uso de tu aplicación al Softr AI Co-Builder y este configurará automáticamente la interfaz, el esquema de la base de datos y las reglas de acceso seguro. Si quieres modificar un nivel de permiso, añadir un campo a la base de datos o actualizar un flujo de trabajo, puedes hacerlo visualmente en el editor. Tienes la velocidad de la generación por IA combinada con la fiabilidad de un alojamiento sin mantenimiento, lo que te permite centrarte en la lógica de la app y no en depurar la base de datos.