OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
Gestión del equipo Infantil B (Cultural y Deportiva Leonesa)
Translation pending
Sports & fitnessTypeScript · JavaScriptGitHub @Valmaseda10OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
App de gestion del Infantil B - Cultural y Deportiva Leonesa
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Infantil B — Cultural y Deportiva Leonesa App de gestión para el cuerpo técnico del Infantil B (temporada 2026-2027): asistencia a entrenamientos, convocatorias y alineaciones de partidos, valoraciones y estadísticas. Sustituye al Excel actual. Uso principal desde iPhone/iPad — diseño mobile-first. Ver CLAUDE.md para el contexto completo de producto, modelo de datos y fases de desarrollo.Read the full README ↗
App de gestión para el cuerpo técnico del Infantil B (temporada 2026-2027): asistencia a entrenamientos, convocatorias y alineaciones de partidos, valoraciones y estadísticas. Sustituye al Excel actual. Uso principal desde iPhone/iPad — diseño mobile-first.
Ver CLAUDE.md para el contexto completo de producto, modelo de datos y fases de desarrollo.
Estado actual: Fase 1 — Scaffold. Autenticación, flujo de solicitud/aprobación de acceso, esquema de base de datos con RLS, y navegación base con las 5 secciones vacías. La lógica de cada módulo se irá añadiendo en fases sucesivas.
npm install
Crea un proyecto nuevo en supabase.com.
En Project Settings → API, copia la Project URL, la anon public key y la service_role key.
Copia .env.example a .env.local y rellena esas tres variables, más NEXT_PUBLIC_SITE_URL=http://localhost:3000:
cp .env.example .env.local
Los archivos están en supabase/migrations/, en orden:
0001_schema.sql — todas las tablas.0002_rls.sql — Row Level Security (activado en todas las tablas) y sus políticas.0003_seed_estados.sql — estados iniciales (SI, IA, VACACIONES, LESIÓN, AMISTOSO).Puedes aplicarlas pegando el contenido de cada archivo, en orden, en el SQL Editor del dashboard de Supabase; o con la Supabase CLI:
npx supabase login
npx supabase link --project-ref <tu-project-ref>
npx supabase db push
El registro no es abierto: el primer usuario admin hay que crearlo a mano una vez, para poder aprobar el resto de solicitudes desde la app.
id = el UUID de ese usuario (columna id en Authentication → Users), tu nombre, tu email y rol = 'admin'./login con ese usuario y aprobar el resto de solicitudes desde Ajustes.En Authentication → URL Configuration, añade a Redirect URLs:
http://localhost:3000/auth/set-password (desarrollo)https://<tu-dominio-de-vercel>/auth/set-password (producción, una vez desplegado)Esto es necesario para que los enlaces de invitación y de "olvidé mi contraseña" funcionen. El
redirectTo de esos dos flujos apunta directamente a /auth/set-password (página cliente): el
token de sesión llega en el fragmento de la URL (#access_token=...), que solo el navegador
puede leer, así que no puede pasar por un Route Handler de servidor intermedio — el cliente de
Supabase lo detecta y procesa automáticamente al cargar la página.
src/lib/types/database.types.ts está escrito a mano, reflejando el esquema de las migraciones. En cuanto el proyecto esté enlazado, regenéralo desde el esquema real:
npx supabase gen types typescript --project-id <tu-project-ref> --schema public > src/lib/types/database.types.ts
npm run dev
Abre http://localhost:3000.
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEY (marca la variable como sensitive: solo se usa server-side, en los Route Handlers de aprobación de solicitudes)NEXT_PUBLIC_SITE_URL — la URL de producción, p. ej. https://infantil-b.vercel.app/auth/set-password a las Redirect URLs de Supabase Auth (paso 5 de arriba).La app está pensada para desplegarse una vez por club (cada uno con su propio proyecto de Vercel + Supabase, siguiendo los pasos de arriba). Para adaptar el nombre, el escudo y los colores sin tocar código, añade estas variables de entorno (opcionales — sin ninguna, se usan los valores del Infantil B):
| Variable | Ejemplo | Por defecto |
|---|---|---|
NEXT_PUBLIC_CLUB_NOMBRE | Real Club Deportivo | Cultural y Deportiva Leonesa |
NEXT_PUBLIC_EQUIPO_NOMBRE | Cadete A | Infantil B |
NEXT_PUBLIC_ESCUDO_INICIALES | CA | IB |
NEXT_PUBLIC_COLOR_PRIMARIO | #1d4ed8 | #8a1b24 |
NEXT_PUBLIC_COLOR_SECUNDARIO | #f59e0b | #9c7328 |
NEXT_PUBLIC_LUGAR_ENTRENO_DEFECTO | Ciudad Deportiva | Área Deportiva de Puente Castro |
Ver src/lib/club-config.ts para el detalle. Dos cosas que sí hay que cambiar a mano por cada club, porque son archivos binarios:
public/icon-192.png, public/icon-512.png, public/apple-touch-icon.png) — sustitúyelos por el escudo real del club si lo tienen, o genera unos nuevos a partir del escudo genérico con los colores/iniciales de arriba.src/app/globals.css (:root y .dark) siguen fijos en CSS — las variables de entorno solo cambian el escudo genérico y los textos; para un rediseño de color completo de la interfaz hay que editar ese archivo.npm run dev # servidor de desarrollo
npm run build # build de producción
npm run start # servir el build de producción
npm run lint # ESLint
usuarios (rol = 'admin' | 'staff' y activo = true) pueden leer/escribir datos del equipo.SUPABASE_SERVICE_ROLE_KEY nunca se expone al cliente: solo se usa en src/lib/supabase/admin.ts, importado exclusivamente desde Route Handlers server-side (el flujo de aprobación de solicitudes, que necesita invitar usuarios por email).