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.
La red competitiva para todos tus deportes.
Translation pending
Sports & fitnessTypeScript · PLpgSQLGitHub @9dstoreco-wqOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Esta es la versión consolidada y simplificada para montar CHALLENGE DYNASTY.
Solo 4 cosas:
supabase/schema_master.sql.
Este archivo es una foto exacta de la base de datos en vivo tomada el 2026-10-08
(generada por introspección directa de producción, no escrita a mano) — verificado
corriéndolo completo contra un Postgres limpio antes de entregarlo. Si en
supabase/migrations/ hay archivos con fecha posterior a esa, hay que correrlos
también, uno por uno y en orden de fecha, después de schema_master.sql..env.example como .env.local y pegar las 2 claves de Supabase.npm install
npm run dev
Después abre http://localhost:3000.
En Supabase: Project Settings → API.
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYNunca pongas una service_role key en .env.local ni en el navegador.
No ejecutes ninguna migración antigua de V7, V8, V9 o V9.1.
Para un proyecto nuevo, usa supabase/schema_master.sql como punto de partida (ver el
encabezado del archivo para el detalle de qué incluye y qué no). Los archivos en
supabase/migrations/ de ahí en adelante son el historial de cambios nuevos — no una forma
alternativa de montar el proyecto desde cero.
Primero prueba localmente. Cuando ya funcione, puedes desplegar este mismo proyecto en Vercel y añadir las mismas 2 variables de entorno.
El auto-confirmado de resultados ya corre en producción: public.expire_stale_challenge_disputes()
(definida en supabase/migrations/20261007210000_dispute_timeout_and_card_caps.sql) auto-confirma
con la última versión registrada cualquier resultado pending o disputed sin movimiento por más
de 48 horas, y está programada en Supabase como cron job cada 15 minutos (confirmado en vivo:
select jobname,schedule,active from cron.job). La función más vieja
public.auto_confirm_due_match_results() (ventana de 12 horas, solo cubre pending) sigue
existiendo en el esquema pero no está programada — quedó superada por la de arriba, que además
cubre el caso disputed (el ciclo de disputa que antes podía quedar atascado para siempre).
Esta iteración agrega settings/pasaporte, búsqueda, historial competitivo, Skill Challenges completos, cancelación de retos, rating ELO con historial, bloqueos, reportes y límites básicos de abuso. Ejecuta npm run check-routes, npm run check-sql, npm run check-core-flow y node scripts/check-hardening.mjs antes de desplegar.
Consulta CERTIFICACION_TECNICA_7.txt para ver qué validaciones fueron ejecutadas y cuáles permanecen bloqueadas por la disponibilidad del entorno de npm.
V17 is the only master source. The real Supabase project is the backend source of truth. This bundle does not contain service-role secrets. The final release gate must run in the connected GitHub/Vercel environment because this audit environment cannot complete npm dependency resolution.
See SUPABASE_REAL_CONTRACT.md for the live backend contract and the distinction between production truth and bundled offline SQL.