Skip to content
leoco/dev
← Volver a proyectos
Full-stack (frontend + modelo de seguridad en base de datos)·2026·Repo público

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.

STACK TÉCNICO
ReactTypeScriptSupabasePostgreSQL RLSPWA
DESAFÍOS

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.

SOLUCIONES

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.

¿Te interesa este proyecto o tienes una idea similar?