Encuentra un Niño
Aplicación construida en contexto de emergencia (sismo en Venezuela) para que cualquier persona pueda publicar o buscar reportes de menores extraviados, revelando el teléfono de contacto solo bajo demanda. El foco del proyecto no es el frontend sino el modelo de datos: los teléfonos están protegidos por revoke/grant a nivel de columna, una vista pública con security_invoker expone solo los campos no sensibles, y una única Supabase Edge Function en Deno controla el revelado de contacto con rate limiting por hash de IP. La app funciona offline: si no hay conexión, el reporte se encola en IndexedDB y se reenvía automáticamente al reconectar.
Proteger datos sensibles sin backend propio
El frontend consume Supabase directamente con la clave anónima; exponer teléfonos de contacto sería trivial para cualquier cliente. Solución: revoke de la columna de teléfono para el rol anon, vista pública sin esos campos, y una Edge Function con service role que es la única vía para revelarlos.
Abuso del revelado de contacto
Sin control, un actor malicioso podría enumerar todos los teléfonos del sistema. Solución: rate limiting de 15 solicitudes/minuto por IP, hasheada con SHA-256 antes de loguearla, implementado dentro de la propia Edge Function.
Row Level Security como capa de autorización
En vez de validar permisos en el cliente o en un backend intermedio, las policies de Postgres deciden qué fila puede insertar/leer/actualizar cada rol, con una función es_admin() security definer en un schema privado no expuesto por la API REST.
PWA offline-first
Service worker con Workbox (precache de app shell, StaleWhileRevalidate para fotos, NetworkFirst para el listado) y una cola en IndexedDB que reintenta el envío de reportes al recuperar conexión.