OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Sistema personal de scouting y coaching de pádel para Fran. Aplicación web mobile-first, sin backend, sin login, sin instalación. Cada partido alimenta datos. Los datos alimentan la estrategia del siguiente partido. JUGAR → REGISTRAR → ACUMULAR → ANALIZAR → PREPARAR → JUGAR Cuatro pantallas y un único objetivo: que registrar un partido cueste menos de 2 minutos desde el móvil, sentado en el banquillo, y que con el tiempo esos registros se conviertan en decisiones tácticas. La fuente de verdad funcional es PROJECT_SPEC.md. El historial de cambios está en `CHANG查看完整 README ↗
Sistema personal de scouting y coaching de pádel para Fran. Aplicación web mobile-first, sin backend, sin login, sin instalación.
Cada partido alimenta datos. Los datos alimentan la estrategia del siguiente partido.
JUGAR → REGISTRAR → ACUMULAR → ANALIZAR → PREPARAR → JUGAR
Cuatro pantallas y un único objetivo: que registrar un partido cueste menos de 2 minutos desde el móvil, sentado en el banquillo, y que con el tiempo esos registros se conviertan en decisiones tácticas.
| Pantalla | Para qué |
|---|---|
| Barra de arriba | Título con la competición debajo (tócala para cambiar), ⚙ Configuración, 🏠 Inicio, ☰ Menú y tu perfil. |
| Este mes | Tu grupo en curso: fechas, comparativa con cada rival, probabilidad de subir o bajar, y el resultado al terminar. |
| La pista | Inicio. Pista azul en perspectiva que es el menú: tocas una zona y la bola vuela hasta ella. Marcador con puesto, forma y balance. |
| Nuestra temporada | Números, escalera animada (5 métricas), mes a mes, acantilado, todos los partidos, rivales y techo. |
| La liga | Clasificación general ordenable, explorador de cualquier pareja y carga de datos. |
| Crónica | Tres actos, Ernesto & Jordi, izquierda y derecha, los dos niveles del club. |
| Mi perfil | Foto, quién eres en la liga, categoría, mixto y qué ver al abrir. |
| Configuración | Competición al abrir, carga de datos de la liga y copia de seguridad. |
| Rival | Eliges la pareja que te toca y salen proyección, historial directo, comparativa y lectura. |
| Registrar | Formulario rápido post-partido. |
| Historial | Tarjeta por partido, con filtros por rival, arquetipo, resultado y fecha. |
| Análisis | Win rate por arquetipo, juego medio de lectura, evolución temporal. |
| Briefing | Eliges el arquetipo esperado → máximo 3 bullets accionables antes de jugar. |
La fuente de verdad funcional es PROJECT_SPEC.md.
El historial de cambios está en CHANGELOG.md.
No hay que instalar ni compilar nada.
Opción 1 — abrir el archivo directamente
Haz doble clic en index.html. Se abre en el navegador y funciona.
Opción 2 — servidor local (recomendado si algo no carga bien)
cd PadelScouting
python3 -m http.server 8000
Luego abre http://localhost:8000 en el navegador.
Opción 3 — en el móvil Publica la carpeta en GitHub Pages, Netlify o Vercel y añade la URL a la pantalla de inicio del teléfono. Así se abre como si fuera una app.
⚠️ Los datos viven en el navegador donde registras. Si registras en el móvil y luego abres la web en el ordenador, no verás los mismos partidos: hay que mover los datos con export/import.
En el localStorage del navegador, bajo la clave padel-scouting.v1. Eso significa:
Por eso el backup no es opcional.
Exportar (guardar copia):
.json. Guárdalo en Drive, en el correo, donde quieras.Importar (restaurar o mover a otro dispositivo):
.json.Formato del backup:
{ "version": 1, "exportedAt": "2026-09-22T10:00:00.000Z", "matches": [] }
Recomendación: exportar una vez al mes o después de cada jornada de liga.
PadelScouting/
├── index.html estructura, navegación, carga de recursos
├── manifest.webmanifest para instalarla como app en el móvil
├── assets/ escudo del club: favicon, iconos de app y logo
├── css/
│ └── styles.css variables, componentes, responsive
├── js/
│ ├── liga-parser.js lee la clasificación de la liga (navegador y Node)
│ ├── liga.js motor: rating, simulación y calibración
│ ├── db.js lectura desde Supabase con caché local
│ ├── views-liga.js pantalla Rival y carga de datos
│ ├── views-temporada.js Nuestra temporada (secciones 01–06)
│ ├── views-general.js La pista (inicio), La liga y Crónica
│ ├── court.js la pista (foto o dibujo), la pelota y los iconos
│ ├── views-estemes.js Este mes: ronda en curso, avisos al abrir, resultados
│ ├── sync.js el registro de scouting sincronizado con la cuenta
│ ├── shell.js barra de arriba, panel ☰, Mi perfil, Configuración, bienvenida
│ ├── data.js catálogos (arquetipos, patrones, funcionó, no funcionó, estados)
│ ├── storage.js leer/guardar/editar/borrar · export · import · validación
│ ├── analysis.js win rate, medias, evolución, muestra insuficiente
│ ├── briefing.js reglas de briefing por arquetipo
│ └── app.js navegación, render, eventos, formularios
├── PROJECT_SPEC.md qué construimos y por qué
├── README.md cómo funciona y cómo trabajar con él
└── CHANGELOG.md qué ha cambiado
Separación de responsabilidades: UI → lógica → datos. Nada de meter toda la app en app.js, y los
catálogos en un solo sitio (data.js) para que no haya dos listas de patrones distintas conviviendo.
Sin frameworks, sin build, sin dependencias: HTML + CSS + JavaScript plano. Es suficiente y evita que el proyecto se vuelva difícil de mantener.
Hereda la estructura del motor predictivo ya validado: fuerzas → distribución → simulación → derivados → calibración.
Con los datos del primer semestre el motor acierta quién gana el 61,3% de las veces (moneda al aire: 50%). Es una ayuda para preparar el partido, no un pronóstico fiable, y la app lo dice.
Un detalle que costó encontrar: en la tabla de la liga, el equipo listado primero gana el 89,4% de los partidos. Ese orden depende del propio resultado, así que no mide nada. La calibración se hace en orientación neutra para no engañarse con ese 89%.
Formato de partido: al mejor de 3, con dos sets normales y super tie-break a 10 como tercero. El super tie-break no cuenta como juegos.
Incluye: registro rápido, persistencia local, edición, historial con filtros, análisis por arquetipo con protección ante muestras pequeñas, briefing de 3 bullets, export/import JSON.
No incluye (decidido explícitamente): backend, login, multiusuario, predicción de resultados, IA generativa de análisis, tracking punto a punto, estadísticas de cada golpe, ratings avanzados.
Ninguna de las dos se construye hasta que haya suficientes partidos acumulados para justificarla. Primero datos, después modelo.
main. Los cambios relevantes van por PR.CHANGELOG.md y la documentación que corresponda.