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분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Aplicación web (PWA) para quinielas de fútbol entre amigos: cada grupo predice los marcadores de un torneo, la app puntúa sola con los resultados reales y lleva la tabla, el histórico y el pozo. Nació para el Mundial 2026 y hoy corre varios torneos a la vez — Copa del Mundo, UEFA Champions League y la primera división de Costa Rica— cada uno con sus propias quinielas, reglas y puntajes.README 전문 보기 ↗
Aplicación web (PWA) para quinielas de fútbol entre amigos: cada grupo predice los marcadores de un torneo, la app puntúa sola con los resultados reales y lleva la tabla, el histórico y el pozo.
Nació para el Mundial 2026 y hoy corre varios torneos a la vez — Copa del Mundo, UEFA Champions League y la primera división de Costa Rica— cada uno con sus propias quinielas, reglas y puntajes.
La usa un grupo real de 26 personas, y se juega por plata. Eso condiciona casi todas las decisiones de diseño: nadie puede ver las predicciones ajenas antes del saque, las reglas no se cambian con el torneo en marcha sin votación del grupo, y un puntaje mal calculado no es un detalle cosmético.
| Capa | Tecnología |
|---|---|
| Frontend | React 19 · Vite 6 · Tailwind CSS 4 · motion · TanStack Query · vite-plugin-pwa |
| Backend | FastAPI (Python 3.12) · PyJWT · httpx · pywebpush |
| Base de datos | PostgreSQL en Supabase, con Row Level Security y pg_cron |
| Autenticación | Supabase Auth: correo y contraseña, o «Entrar con Google» |
| Despliegue | Vercel (frontend y backend juntos) |
frontend/ React + Vite. La PWA y toda la interfaz.
backend/ FastAPI. Sincronización con ESPN, notificaciones push, tareas de admin.
database/ Migraciones SQL numeradas (87 a la fecha). Se aplican a mano.
docs/ Documentación de funcionalidades concretas.
shared/ Constantes compartidas.
scripts/ Utilidades sueltas de mantenimiento.
Hace falta Node 20 y Python 3.12, y un proyecto de Supabase propio con
las migraciones de database/ aplicadas en orden.
cd frontend
npm install
cp .env.example .env # y completá los valores de tu proyecto
npm run dev # http://localhost:5173
.env necesita:
VITE_SUPABASE_URL=https://<tu-proyecto>.supabase.co
VITE_SUPABASE_ANON_KEY=<tu anon key>
VITE_API_URL=/_backend
cd backend
python -m venv .venv && source .venv/bin/activate
pip install -r requirements-dev.txt
cp .env.example .env # y completá los valores
uvicorn app.main:app --reload # http://localhost:8000
requirements.txt es solo lo que viaja al serverless;
requirements-dev.txt lo incluye y añade el servidor local y pytest.
cd frontend
npm test # 301 pruebas de lógica (vitest)
npm run test:ui # 150 pruebas de interfaz (Playwright, sin backend real)
npm run lint
cd ../backend
python -m pytest # 212 pruebas
Las de Playwright interceptan Supabase: no tocan ninguna base de datos real y no necesitan credenciales.
Cada push a main despliega frontend y backend juntos en Vercel
(vercel.json → experimentalServices; el backend queda bajo /_backend).
Las tareas periódicas —sincronizar marcadores, el resumen de las 6 a.m. y el
recordatorio del saque— las dispara pg_cron desde la propia base de datos,
no GitHub Actions. Se midió que schedule: de GitHub cumplía apenas el 2.5% de
las corridas esperadas.
Las migraciones de database/ se aplican a mano en el editor SQL de
Supabase, en orden. database/verificar_estado.sql es de solo lectura y compara
la base viva contra el repo.
CLAUDE.md — el documento importante: un registro de
decisiones de arquitectura con la medición que motivó cada una, el modo de
fallo que evita y los errores que ya se cometieron. Si vas a tocar el puntaje,
la seguridad de la base o los cupos del comodín, empezá por ahí.docs/CALENDARIO.md — exportación de partidos al calendario.APLICAR_MIGRACIONES.md — cómo aplicar las migraciones.En producción y en uso. No es un proyecto de demostración: los datos son reales y hay dinero de por medio, así que los cambios se miden antes de publicarse.