AGPL-3.0Código abierto
Código abierto, de las fórmulas a los servidores
Cada línea de OpenAthlete es pública en GitHub: las matemáticas de la carga de entrenamiento, los conectores de relojes, los prompts de la IA. Usa nuestros servidores o instálalo en los tuyos con un solo comando.
/**
* Banister TRIMP for `minutes` spent at `hr`:
* minutes × HRr × y × e^(k × HRr),
* with HRr = (HR - HRrest) / (HRmax - HRrest)
*/
function trimpAt(hr, minutes, hrMax, hrRest, gender) {
const hrFraction = (hr - hrRest) / (hrMax - hrRest);
if (hrFraction <= 0) {
return 0;
}
const { k, y } = getTrimpCoefficients(gender);
return minutes * hrFraction * y * Math.exp(k * hrFraction);
}La licencia
AGPL-3.0, en palabras sencillas
Una licencia de software libre con una regla adicional para el software que se usa a través de una red. Esto es lo que significa para ti.
Puedes
- Usarlo para lo que quieras: tu propio entrenamiento, tu negocio de entrenador, tu club.
- Leer y estudiar cada línea.
- Modificarlo a tu gusto.
- Ejecutar tu propia copia, para ti o para otros.
La licencia pide
- Si otras personas usan una versión modificada a través de una red, ofréceles su código fuente.
- Comparte tus cambios bajo la misma licencia.
- Conserva los avisos de copyright y de licencia.
Ejecutarlo sin modificar para tu club no añade ninguna obligación. Esto es un resumen, no asesoramiento jurídico: el texto completo está en gnu.org.
Por qué importa
Tu historial de entrenamiento no debería depender del plan de negocio de otro
Marzo de 2024
Today's Plan, propiedad de Specialized, cierra. Sus entrenadores y atletas tienen que cambiar de plataforma.
Julio de 2026
Garmin compra TrainingPeaks. La plataforma independiente de entrenamiento más conocida pertenece ahora a un fabricante de relojes.
Con OpenAthlete
El código es público. Si paráramos mañana, cualquiera podría ejecutarlo al día siguiente, y tu exportación contiene todo tu historial.
Autoalojamiento
Tu propia instancia en tres pasos
Para un club, un laboratorio, un negocio de entrenamiento o solo para ti.
- 1
Consigue un servidor con Docker
Cualquier máquina Linux con Docker y su plugin Compose. 1 GB de RAM es suficiente: el stack usa unos 250 MB en reposo. Apunta el DNS de tu dominio a ella.
- 2
Ejecuta el script de instalación
Descarga el archivo Compose, escribe un .env con secretos nuevos, descarga las imágenes y arranca PostgreSQL, Redis, la API, la app web y Caddy para HTTPS automático.
- 3
Crea la primera cuenta
Abre tu dominio. La primera cuenta es la tuya; después, el registro es por invitación, así que invita a tus atletas o entrenadores. Vuelve a ejecutar el script para actualizar.
- Guarda una copia del .env: sin HASH_PEPPER, no se puede verificar ninguna contraseña.
$ curl -fsSL https://raw.githubusercontent.com/openathleteorg/openathlete/main/scripts/install.sh | sh -s -- --domain your.domain
Created .env with new secrets.
✔ postgres Started
✔ redis Started
✔ api Started
✔ web Started
✔ caddy HTTPS ready
→ https://your.domainFunciona desde el primer momento
- Todas las funciones, sin límite de atletas y sin muro de pago
- Sincronización con COROS, que solo necesita tu dirección
- Importación de FIT, GPX y TCX, y la API de importación de actividades
- El servidor MCP para Claude, ChatGPT y otros agentes
- Claves de IA propias de los usuarios y modelos locales como Ollama
Desactivado hasta que lo configures en .env
- Correo electrónico: invitaciones, restablecimiento de contraseña
SMTP_HOST · BREVO_API_KEY - Sincronización con Strava, Garmin, Polar y Suunto, con una cuenta de desarrollador en cada marca
STRAVA_* · GARMIN_* · POLAR_* · SUUNTO_* - Inicio de sesión único
OIDC_ISSUER · OIDC_CLIENT_ID - IA con las claves de la instancia, con un presupuesto mensual por usuario
OPENAI_API_KEY · AI_HOSTED_MONTHLY_BUDGET_USD - Estimación de carga por IA para las sesiones planificadas
ENABLE_TRAINING_LOAD_ESTIMATION - Analítica e informes de errores
POSTHOG_PROJECT_TOKEN - Facturación, que no necesitas
STRIPE_*
Privacidad
Una instancia autoalojada no nos envía nada
Sin analítica, sin informes de errores, sin llamadas a casa. Un test de extremo a extremo abre la app autoalojada en un navegador real y falla si hace una sola petición a un tercero.
Quedan dos llamadas externas por diseño: los mosaicos del mapa de OpenStreetMap en el navegador y la meteorología de Open-Meteo en tu servidor.
Transparencia
Cada cifra tiene su fórmula
En la app, cada métrica explica qué es y cuáles son sus límites. En el código, puedes ver exactamente cómo se calcula.
Contribuye
Hay sitio para ti
Código
Elige una “good first issue” o arregla lo que te moleste. La configuración de desarrollo está documentada.
Good first issuesTraducciones
La app habla inglés, francés, italiano, español y portugués de Brasil. Corrige una frase torpe o añade un idioma nuevo.
Archivos de traducciónComentarios
Cuéntanos qué falta, qué no funciona, por qué pagarías. En Discord es donde se debate la hoja de ruta.
Únete al DiscordFinanciación
Lo pagan sus usuarios, nadie más
Sin inversores, sin publicidad, sin venta de datos. Los Supporters (5 € al mes o 50 € al año) y los cafés puntuales pagan los servidores, la IA y el tiempo de desarrollo.
Hecho con NestJS, PostgreSQL con pgvector, Redis y BullMQ, React 19 y Vite, Capacitor y Next.js. Imágenes Docker en GHCR para amd64 y arm64.
¿Prefieres que lo alojemos nosotros?
El mismo código, en nuestros servidores en Francia. Gratis, con Supporter si quieres IA con nuestras claves o más de cinco atletas.
Gratis para siempre. Sin tarjeta de crédito.