GrupalPersonalEn desarrollo
appFut
PWA mobile first para organizar partidos de fútbol, con gestión de jugadores, pagos y suplentes.
- Mi aporte
- Desarrollé la interfaz, la creación de partidos con código y link de invitación, y el inicio de sesión con Google. El flujo para sumarse, darse de baja o cambiar de equipo lo hicimos en conjunto.
- Tecnologías
- Next.js 16
- React 19
- TypeScript
- Tailwind
- Supabase (Postgres, Auth, Storage, RLS)
- Vitest
Contexto
App para organizar partidos de fútbol amateur entre amigos (5 contra 5, 6 contra 6), con gestión de los pagos de la cancha mediante comprobantes.
Problema
El organizador necesita saber quién juega y quién pagó su parte de la cancha. Además, sumarse no puede obligar a los invitados a registrarse.
Solución
- El organizador inicia sesión con Google, crea el partido y comparte un código o un link de invitación. - Los jugadores se suman ingresando solo su nombre y entran a la reserva. - Los equipos los arma el organizador, o cada jugador elige el suyo. Quienes quedan en un equipo son titulares y reparten el costo de la cancha. - Si un titular se da de baja, el primero de la reserva ocupa su lugar automáticamente. - Cada titular sube el comprobante o declara el pago sin comprobante, y el organizador lo confirma o lo rechaza.
Arquitectura
- Next.js 16 (App Router), con las escrituras resueltas en Server Actions. - Supabase: Postgres con RLS y triggers; Auth, con Google para el organizador y sesiones anónimas para los jugadores; y Storage para los comprobantes.
Decisiones
- Jugadores sin cuenta. Al principio se identificaban con un ID guardado en el navegador. Después pasaron a usar una sesión anónima de Supabase, así las reglas de RLS se aplican con una identidad firmada. - Pagos. Solo el organizador puede confirmar un pago. Lo que marca el jugador queda como "pendiente de confirmación". - Redirecciones. El callback del inicio de sesión solo acepta redirecciones a rutas internas.
Dificultades
- El inicio de sesión con Google. - Recuperar el acceso con el nombre cuando se borra la caché del navegador.