### Fase 4 — Búsqueda y Pulido Final **Duración estimada: 1 semana** **Objetivo: completar el MVP con calidad de producción.** #### 4.1 Búsqueda global - [ ] Función PostgreSQL `buscar_en_colectivo(colectivo_id, query, filtros)` usando `tsvector` + `tsquery` - [ ] Columnas `tsvector` en `items_compra`, `tareas`, `notas` con índice GIN - [ ] Trigger para mantener los vectores actualizados en cada INSERT/UPDATE - [ ] Pantalla `/buscar`: - Input de búsqueda con debounce 300ms - Resultados agrupados por tipo (listas, tareas, notas) - Filtros: tipo de contenido, miembro creador, rango de fechas, estado - La búsqueda no opera sobre papelera (RN-08) #### 4.2 Perfil de usuario - [ ] Pantalla `/perfil`: - Editar nombre y avatar (Supabase Storage) - Lista de colectivos a los que pertenece con rol - Opción de abandonar colectivo - Eliminar cuenta (con aviso sobre promoción de admin si aplica) #### 4.3 PWA — Validación final - [ ] Lighthouse PWA score ≥ 90 en mobile - [ ] Instalable en iOS (Safari → Añadir a pantalla de inicio) y Android (Chrome → Instalar app) - [ ] Notificaciones push configuradas para iOS 16.4+ (requiere PWA instalada) - [ ] Offline completo verificado: desconectar red, operar en todos los módulos, reconectar y verificar sync #### 4.4 Seguridad y hardening - [ ] Auditoría de políticas RLS: verificar aislamiento total entre colectivos con tests de integración - [ ] Rate limiting en Kong para endpoints de auth y invitaciones - [ ] Headers de seguridad en nginx: CSP, HSTS, X-Frame-Options — gestionados externamente en la config de nginx del VPS - [ ] Rotación de `JWT_SECRET` y `ANON_KEY` para producción (no usar los valores por defecto de Supabase)