OpenAthlete
AGPLv3 기반 지구력 훈련 플랫폼—EU 호스팅, 투명한 로직, 자체 호스팅·전체 내보내기 지원
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Plataforma para organizar torneos de pádel: inscripciones, zonas, resultados, posiciones automáticas, cuadros eliminatorios, cronograma de canchas, ranking individual acumulativo, exportación a Excel, auditoría y vista pública para jugadores.
Dominio previsto: padel-match.net
Panel de administración (/admin)
Vista pública (sin cuenta, pensada primero para el celular)
Vas a necesitar:
| Servicio | Para qué | Costo inicial |
|---|---|---|
| GitHub (ya lo tenés) | Guarda el código; Vercel publica desde ahí | Gratis |
| Vercel | Hosting de la aplicación | Plan Hobby gratis*; Pro USD 20/mes |
| Neon (desde Vercel) | Base de datos PostgreSQL con backups | Gratis para empezar; planes pagos con más retención de backups |
| Tu registrador de dominio | Apuntar padel-match.net a Vercel | Ya pagado |
*Revisá las condiciones de uso del plan Hobby de Vercel. Si el uso es comercial (por ejemplo, si cobrás a organizadores), corresponde el plan Pro.
ximmec/padel-match → Import.DATABASE_URL.En Settings → Environment Variables agregá:
| Nombre | Valor |
|---|---|
APP_URL | https://padel-match.net |
SETUP_KEY | Una clave inventada por vos (ej. cancha-azul-2026). Se pide una sola vez para crear el administrador. |
Deployments → Redeploy (o "Deploy" si es la primera vez). El build aplica las migraciones de la base y compila la app. Cuando termine, Vercel te da una dirección https://padel-match-xxxx.vercel.app para probar.
En Vercel: Settings → Domains → Add → escribí padel-match.net y después agregá también www.padel-match.net, que redirige al principal.
Vercel te muestra qué registros DNS crear. Normalmente son:
@, valor 76.76.21.21www, valor cname.vercel-dns.comUsá siempre los valores exactos que te muestre Vercel, porque pueden variar.
Entrá al panel de tu registrador, en la sección DNS de padel-match.net, y creá esos registros. Borrá cualquier registro A o CNAME anterior para @ o www que apunte a otro lado.
La propagación tarda entre minutos y algunas horas. Vercel emite el certificado HTTPS automáticamente cuando el dominio queda verificado.
Hasta que Vercel muestre el dominio como Valid Configuration, no está publicado en padel-match.net.
Cada cambio que se sube a la rama main de GitHub se publica solo. Antes, GitHub Actions corre todas las pruebas automáticas (pestaña Actions del repositorio).
https://padel-match.net/setup (o la dirección de Vercel).SETUP_KEY, el nombre de tu organización, tu nombre, email y una contraseña de al menos 10 caracteres con letras y números. Este paso solo funciona mientras no exista ningún usuario.Para sumar a otras personas: Configuración → Usuarios y permisos.
npm run backup con DATABASE_URL de producción genera backups/padel-match-FECHA.json.gz con todas las tablas. También podés usar pg_dump "$DATABASE_URL" > respaldo.sql.match_result_versions), la auditoría no se puede modificar ni borrar (lo impide la propia base de datos) y el ranking conserva las asignaciones reemplazadas. Así, la mayoría de los errores se corrigen desde la app, sin restaurar backups.Las que acordamos:
| Tema | Decisión |
|---|---|
| Retiro de una pareja en la zona | Se elige en cada caso. Por defecto: se mantienen los partidos jugados y los pendientes se dan por W.O. al rival. La alternativa es anular todos sus partidos. Una pareja retirada nunca clasifica. |
| Comparar zonas de distinto tamaño (ej. mejores segundos) | Promedios por partido: % de partidos ganados → diferencia de sets por partido → diferencia de games por partido → games a favor por partido. Opcional por categoría: descontar los partidos contra el último. |
| Orden de desempate por defecto | Partidos ganados → resultado entre sí (empate de 2) → diferencia de sets → diferencia de games → sorteo manual registrado. Se configura por categoría. |
| Acceso de jugadores | Vista pública sin cuenta, buscando por nombre. Nunca se muestran teléfono, email ni documento. |
Criterios adoptados que podés pedir cambiar:
src/
├─ core/ Lógica de dominio pura (sin base de datos ni UI), 100 % probada
│ ├─ scoring.ts formatos y validación de resultados
│ ├─ zones.ts tamaños de zona, sorteo con siembra, todos contra todos
│ ├─ standings.ts posiciones, desempates, comparación entre zonas
│ ├─ bracket.ts cuadro, pases libres, resolución, impacto de cambios, instancias
│ ├─ scheduling.ts cronograma por canchas, descansos, conflictos, recálculo
│ ├─ ranking.ts puntos por instancia y agregación
│ └─ engine.ts combina todo para una categoría
├─ server/ Acceso a datos y operaciones transaccionales
│ ├─ db.ts cliente PostgreSQL
│ ├─ auth.ts sesiones (cookie httpOnly) y permisos
│ ├─ ops.ts operaciones de negocio (cada una en una transacción, con auditoría)
│ ├─ schedule.ts cronograma de un torneo
│ ├─ ranking.ts libro contable de puntos
│ ├─ export.ts Excel
│ └─ actions/ Server Actions que usan los formularios
├─ app/ Next.js (App Router): /admin, vista pública y /api
└─ components/ Componentes de interfaz
db/migrations/ Esquema SQL versionado (se aplica en cada build)
tests/core/ Pruebas de la lógica (8, 9, 10, 11, 12 y 14 parejas, empates, cuadros, etc.)
tests/db/ Pruebas de integración contra PostgreSQL real
/api/public/version y se refresca sola si algo cambió. Funciona bien en Vercel y no requiere servicios extra.Requisitos: Node.js 20 o superior y PostgreSQL 14 o superior.
cp .env.example .env.local # completar DATABASE_URL
npm install
npm run migrate # crea las tablas
npm run dev # http://localhost:3000 → /setup
Pruebas:
npm test # lógica de dominio (no necesita base)
npm run test:db # integración (necesita DATABASE_URL a una base de prueba)
npx tsc --noEmit # verificación de tipos
GitHub Actions corre todo esto, más la compilación y una prueba de humo del servidor, en cada cambio.