Ícono de la app Unnoticed

Descripción

Unnoticed es una app colaborativa de fotografía. Los usuarios crean viajes, toman fotos en rondas basadas en prompts creativos asignados por rol, y votan por las mejores tomas. Las fotos están protegidas con encriptación de extremo a extremo: ni siquiera el servidor puede verlas, solo los participantes del viaje.

Proyecto colaborativo desarrollado en la Apple Developer Academy de Nápoles con un equipo internacional. Es el proyecto más completo y ambicioso que he liderado en la Academy.

Problemática

Las actividades de fotografía en grupo carecen de estructura y diversión. Las apps existentes para compartir fotos no crean una experiencia de juego colaborativa con restricciones creativas. Queríamos algo que motivara a las personas a ver el mundo desde perspectivas diferentes, guiadas por prompts y roles asignados.

Mi rol

Líder técnico y de proyecto. Definí la arquitectura completa (monorepo, backend, base de datos, almacenamiento en la nube), levanté los requerimientos con el equipo, implementé el backend y la API REST, diseñé el ciclo de vida del producto, elegí la infraestructura, configuré el entorno de desarrollo y establecí la metodología de trabajo (Scrum con Jira, CI/CD). También lideré la organización general del equipo: sprint planning, división de trabajo y estándares de calidad de código.

Decisiones técnicas

  • Monorepo: una sola fuente de verdad para iOS, backend y landing page. Facilita compartir configuración y que todo el equipo entienda la arquitectura completa.
  • Cloudflare R2 sobre Amazon S3: elegido por el precio (sin cargos por egreso de datos), la facilidad de configuración y la compatibilidad con la API de S3 para una posible migración futura.
  • Encriptación de extremo a extremo: el servidor es zero-knowledge. Las fotos se cifran antes de salir del teléfono y solo los dispositivos de los participantes pueden descifrarlas. Lideré la decisión y los requerimientos; la implementación la llevó un compañero del equipo.
  • Caché inteligente de imágenes: sistema de caché en memoria y disco con deduplicación de solicitudes. Adaptado después para manejar fotos encriptadas: descifra una sola vez y almacena el resultado.
  • Sin login/registro: decisión de producto para priorizar la velocidad de onboarding en el prototipo. El usuario puede crear o unirse a un viaje en segundos.
  • Ciclo de vida de viaje: una máquina de estados que guía toda la experiencia del producto, desde la creación del viaje hasta los resultados finales.

Aprendizajes clave

  • Liderar un equipo no es hacer todo: es crear las condiciones para que el equipo trabaje bien. Definir arquitectura, estándares y procesos es tan importante como escribir código.
  • Saber delegar y definir requerimientos claros es tan valioso como implementar. La encriptación E2E es la feature de la que más orgulloso estoy, y no la escribí yo.
  • Los problemas más frecuentes en desarrollo en equipo no son bugs técnicos, son de colaboración y calidad de código. Establecer reglas de desarrollo temprano ahorra horas de merge conflicts.
  • Elegir la infraestructura correcta (R2 vs S3, monorepo vs multi-repo) son decisiones que impactan todo el ciclo de vida del proyecto.