Ir al contenido
OpenAthlete

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.

apps/api/src/modules/core/helpers/training-load.ts
/**
 * 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);
}
Cómo se calcula la carga de una sesión, directamente del repositorio

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. 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. 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. 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.

  4. 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.domain

Funciona 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ñaSMTP_HOST · BREVO_API_KEY
  • Sincronización con Strava, Garmin, Polar y Suunto, con una cuenta de desarrollador en cada marcaSTRAVA_* · GARMIN_* · POLAR_* · SUUNTO_*
  • Inicio de sesión únicoOIDC_ISSUER · OIDC_CLIENT_ID
  • IA con las claves de la instancia, con un presupuesto mensual por usuarioOPENAI_API_KEY · AI_HOSTED_MONTHLY_BUDGET_USD
  • Estimación de carga por IA para las sesiones planificadasENABLE_TRAINING_LOAD_ESTIMATION
  • Analítica e informes de erroresPOSTHOG_PROJECT_TOKEN
  • Facturación, que no necesitasSTRIPE_*

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.

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 issues

Traducciones

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ón

Comentarios

Cuéntanos qué falta, qué no funciona, por qué pagarías. En Discord es donde se debate la hoja de ruta.

Únete al Discord

Financiació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.