BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기App de gestion del Infantil B - Cultural y Deportiva Leonesa
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
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.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).