Ñuñoa Runners
De sitio informativo a herramienta de gestión
Sitio público y plataforma interna para un team de running con cerca de cien integrantes activos, organizados en dos turnos. Cada corredor mantiene su propia ficha, mientras entrenadores y representantes validan nuevas incorporaciones y coordinan inscripciones mediante permisos definidos por rol.
Ver el sitioUn sitio para organizar un equipo en crecimiento
El proyecto reúne la información y las herramientas que los corredores utilizan cada semana.
La primera versión atendía a cerca de treinta corredores y reunía recursos públicos para entrenar y competir con un registro interno del equipo. Cuando la base superó los cien integrantes, el sitio dejó de ser solo un punto de consulta y pasó a sostener parte de la organización.
La información debía mantenerse vigente aunque cambiaran corredores y responsables. Por eso el sitio evolucionó hacia una plataforma interna: cada corredor mantiene su ficha y los responsables coordinan las incorporaciones.
- Next.js
- TypeScript
- Supabase
- Resend
- Vercel
De un acceso compartido a una cuenta por corredor
Cada etapa resolvió un límite de la anterior: primero reunir la información, luego distribuir su mantención y finalmente automatizar tareas recurrentes.
Herramientas para correr, gestión para el equipo
El proyecto combina un sitio abierto de consulta frecuente con una plataforma interna que distribuye la actualización de la información.
Sitio público
Reúne una guía de pistas atléticas, el calendario de carreras y una calculadora de ritmo para distancias desde cinco kilómetros hasta la maratón. También presenta al equipo y explica cómo incorporarse. Todos estos recursos pueden utilizarse sin crear una cuenta.
Plataforma interna
Organiza a cerca de cien corredores en dos turnos. Cada integrante accede con su propia cuenta, completa su ficha y actualiza su información cuando cambia, evitando que el registro dependa de una sola persona.
Las nuevas cuentas permanecen pendientes hasta que un entrenador o representante del turno valida el ingreso. Así, el equipo combina autonomía individual con control sobre las incorporaciones.
La seguridad se garantiza desde el backend
Pasar a cuentas individuales resolvió la identificación, pero abrió una segunda pregunta: qué puede consultar y modificar cada persona. Con dos turnos y distintos niveles de responsabilidad, ocultar acciones en la interfaz no era suficiente. Los permisos debían formar parte del modelo de datos.
La plataforma traduce la estructura del equipo en cinco roles. Cada corredor administra su propia ficha, mientras representantes y entrenadores validan incorporaciones y supervisan los registros dentro de su ámbito. A medida que aumenta la responsabilidad, el acceso se amplía de forma controlada sin permitir que un rol actúe fuera de su nivel.
Las reglas se aplican directamente en Postgres mediante Row Level Security. Así, cada consulta respeta las mismas restricciones sin importar desde qué pantalla o proceso se origine. La interfaz y el servidor validan el recorrido, pero la base de datos conserva la decisión final: cualquier cambio fuera del alcance asignado se rechaza antes de modificar la información.
Cada corredor tiene el control de sus datos
Cada integrante accede mediante una cuenta individual y administra su propia información. Puede actualizarla cuando lo necesite, definir una clave de acceso almacenada mediante un hash no reversible y elegir su foto de perfil, sin depender de otra persona para mantener su ficha al día.
La ficha y la fotografía no se publican en el sitio abierto. Solo pueden verlas los integrantes activos del mismo turno dentro de la plataforma privada. Así, el registro funciona como una herramienta de reconocimiento y coordinación sin exponer la información fuera de su grupo.
El contacto de emergencia tiene un alcance todavía más limitado: nunca es visible para los compañeros y solo las personas responsables del turno pueden consultarlo cuando la situación lo requiere. Los permisos por rol permiten ajustar el acceso según el propósito de cada dato.
Nuevas funciones para crear comunidad
El sitio comenzó como un espacio de consulta, pero el equipo también necesitaba participar en actividades compartidas. Las inscripciones a eventos se integraron en la misma experiencia, incluyendo la transferencia y el envío del comprobante. Cada persona completa el proceso sin abandonar el sitio, mientras los organizadores reciben los registros en la planilla que ya utilizan.
El correo permite mantener una comunicación directa con los integrantes. Los mensajes salen desde un dominio verificado que representa al equipo y se realizan mediante envíos individuales por lotes, de modo que cada destinatario recibe su propio correo sin ver las direcciones de los demás.
El calendario reúne las próximas carreras y deja de mostrar automáticamente las fechas que ya pasaron, manteniendo visibles los objetivos que vienen. Inscripciones, correo y calendario amplían el proyecto más allá del registro de corredores: facilitan la participación, la coordinación y la continuidad del equipo.
Una arquitectura diseñada para durar y crecer
El proyecto no se construyó como una colección de funciones independientes. El sitio público y la operación privada comparten una arquitectura coherente que protege la información, reduce la carga de mantenimiento y permite incorporar nuevas capacidades sin reconstruir la plataforma. Cada decisión técnica fortalece una parte concreta del sistema.
| Tecnología | Decisión arquitectónica |
|---|---|
| Next.js, React y TypeScript | Unifican el sitio público y la plataforma interna en una sola aplicación. El procesamiento en el servidor separa ambos contextos y TypeScript convierte roles, estados y reglas del negocio en contratos verificables. |
| Supabase: Postgres, Auth, Row Level Security y Storage | Centraliza datos, identidades, permisos y fotografías. Postgres aporta integridad; Row Level Security protege la información en su origen; Auth y Storage completan el sistema sin dispersar la seguridad entre servicios. |
| Resend con dominio verificado | Entrega correos desde el dominio del equipo y realiza envíos individuales por lotes. La comunicación mantiene una identidad institucional sin exponer las direcciones de los destinatarios. |
| Apps Script y Google Sheets | Lleva las inscripciones estacionales a la herramienta que los organizadores ya saben revisar y exportar. Se integra con la operación existente sin imponer otro panel administrativo. |
| CSS propio | Construye una identidad visual propia y un responsive controlado con precisión, sin añadir un framework de componentes ni su carga de mantenimiento. |
| Vercel | Convierte cada cambio del repositorio en un despliegue trazable y repetible. Su integración con Next.js evita operar infraestructura propia. |
Una plataforma que coordina a un team completo
Más de 100 corredores
Dos turnos comparten un mismo sistema, con información organizada y actualizable aunque la composición del equipo cambie.
Cinco niveles de responsabilidad
Cada rol cuenta con un alcance definido para consultar información, mantener registros y validar incorporaciones.
Inscripciones dentro del sitio
Cada convocatoria puede incorporar su propio formulario y entregar los registros a los organizadores sin desviar al participante hacia otra plataforma.
Gestión compartida
Cada corredor mantiene su información, los responsables coordinan las incorporaciones y el calendario conserva visibles las próximas carreras.