Resultado visible
Guardarás solicitudes en una tabla privada. Una persona anónima podrá insertar mediante una ruta controlada, pero no listar, leer, modificar ni borrar contactos.
Modelo mínimo
create table public.contact_requests (
id uuid primary key default gen_random_uuid(),
created_at timestamptz not null default now(),
name text not null check (char_length(name) between 2 and 80),
email text not null check (char_length(email) <= 254),
message text not null check (char_length(message) between 20 and 2000),
status text not null default 'new'
);
alter table public.contact_requests enable row level security;
No crees una política de lectura pública. Usa una ruta de servidor y una clave adecuada guardada como variable de entorno; nunca envíes una clave de servicio al navegador.
Prompt
Integra Supabase siguiendo la documentación oficial actual. Antes de editar,
propón modelo, amenazas y políticas RLS. Implementa una ruta de servidor
que valide, limite y guarde contactos. Las claves solo van en variables
de entorno y `.env*` debe estar ignorado por Git. Crea una prueba que
demuestre inserción válida y cuatro pruebas negativas de lectura/cambio.
Documenta cómo borrar los datos de prueba.
Prueba adversaria
Desde un cliente anónimo intenta seleccionar, actualizar y eliminar. Las cuatro operaciones deben fallar. Comprueba que RLS está activado y revisa las políticas en el panel. Borra las filas de prueba.
Fuentes oficiales
Si has guardado la evidencia de esta lección, continúa con «Configura metadata, canonical, sitemap y robots». Si no, repite la comprobación antes de avanzar.