Aller au contenu
OpenAthlete

AGPL-3.0Open source

Libre, des formules jusqu'aux serveurs

Chaque ligne d'OpenAthlete est publique sur GitHub : les calculs de charge, les connecteurs de montres, les prompts de l'IA. Utilisez nos serveurs, ou installez-le sur les vôtres en une commande.

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);
}
Le calcul de la charge d'une séance, tel qu'il est dans le dépôt

La licence

L'AGPL-3.0, en clair

Une licence libre avec une règle de plus pour les logiciels utilisés en réseau. Voici ce qu'elle implique pour vous.

Vous pouvez

  • L'utiliser pour tout : votre entraînement, votre activité de coach, votre club.
  • Lire et étudier chaque ligne.
  • Le modifier à votre goût.
  • Faire tourner votre propre copie, pour vous ou pour d'autres.

La licence demande

  • Si des personnes utilisent une version modifiée à travers le réseau, proposez-leur son code source.
  • Partagez vos modifications sous la même licence.
  • Conservez les mentions de copyright et de licence.

Le faire tourner sans modification pour votre club n'ajoute aucune obligation. Ceci est un résumé, pas un avis juridique : le texte complet est sur gnu.org.

Pourquoi c'est important

Votre historique ne devrait pas dépendre du business plan de quelqu'un d'autre

Mars 2024

Today's Plan, propriété de Specialized, ferme. Ses coachs et ses athlètes doivent changer de plateforme.

Juillet 2026

Garmin rachète TrainingPeaks. La plateforme de coaching indépendante la plus connue appartient désormais à un fabricant de montres.

Avec OpenAthlete

Le code est public. Si nous arrêtions demain, n'importe qui pourrait le relancer le lendemain, et votre export contient tout votre historique.

Auto-hébergement

Votre instance en trois étapes

Pour un club, un labo, une activité de coach, ou juste pour vous.

  1. 1

    Un serveur avec Docker

    N'importe quelle machine Linux avec Docker et son extension Compose. 1 Go de RAM suffit : l'ensemble consomme environ 250 Mo au repos. Faites pointer le DNS de votre domaine vers elle.

  2. 2

    Lancez le script d'installation

    Il télécharge le fichier Compose, écrit un .env avec des secrets neufs, récupère les images et démarre PostgreSQL, Redis, l'API, l'application web et Caddy pour le HTTPS automatique.

  3. 3

    Créez le premier compte

    Ouvrez votre domaine. Le premier compte est le vôtre ; ensuite, l'inscription se fait sur invitation : invitez vos athlètes ou vos coachs. Relancez le script pour mettre à jour.

  4. Gardez une copie du fichier .env : sans HASH_PEPPER, aucun mot de passe ne peut être vérifié.
~
$ 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

Fonctionne d'emblée

  • Toutes les fonctionnalités, sans limite d'athlètes ni paiement
  • La synchro COROS, qui n'a besoin que de votre adresse
  • L'import FIT, GPX et TCX, et l'API d'import d'activités
  • Le serveur MCP pour Claude, ChatGPT et d'autres agents
  • Les clés d'IA des utilisateurs, et des modèles locaux comme Ollama

Désactivé tant que vous ne le réglez pas dans .env

  • E-mail : invitations, mot de passe oubliéSMTP_HOST · BREVO_API_KEY
  • Synchro Strava, Garmin, Polar et Suunto, avec un compte développeur chez chaque marqueSTRAVA_* · GARMIN_* · POLAR_* · SUUNTO_*
  • Connexion uniqueOIDC_ISSUER · OIDC_CLIENT_ID
  • IA sur les clés de l'instance, avec un budget mensuel par utilisateurOPENAI_API_KEY · AI_HOSTED_MONTHLY_BUDGET_USD
  • Estimation de charge par l'IA pour les séances prévuesENABLE_TRAINING_LOAD_ESTIMATION
  • Statistiques d'audience et rapports d'erreursPOSTHOG_PROJECT_TOKEN
  • La facturation, dont vous n'avez pas besoinSTRIPE_*

Vie privée

Une instance auto-hébergée ne nous envoie rien

Pas de statistiques, pas de rapports d'erreurs, aucun appel vers nous. Un test de bout en bout ouvre l'application auto-hébergée dans un vrai navigateur et échoue si elle fait la moindre requête vers un tiers.

Deux appels extérieurs restent, par choix : les tuiles de carte OpenStreetMap dans le navigateur, et la météo Open-Meteo depuis votre serveur.

Contribuer

Il y a de la place pour vous

Code

Prenez une « good first issue », ou corrigez ce qui vous agace. L'installation de développement est documentée.

Good first issues

Traductions

L'application parle anglais, français, italien, espagnol et portugais du Brésil. Corrigez une tournure maladroite ou apportez une nouvelle langue.

Fichiers de traduction

Retours

Dites-nous ce qui manque, ce qui casse, ce pour quoi vous paieriez. C'est sur Discord que la feuille de route se discute.

Rejoindre le Discord

Financement

Financé par ses utilisateurs, et personne d'autre

Ni investisseurs, ni publicité, ni données revendues. Les Supporters (5 € par mois ou 50 € par an) et les cafés ponctuels paient les serveurs, l'IA et le temps de développement.

Construit avec NestJS, PostgreSQL et pgvector, Redis et BullMQ, React 19 et Vite, Capacitor et Next.js. Images Docker sur GHCR pour amd64 et arm64.

Vous préférez qu'on l'héberge ?

Le même code, sur nos serveurs en France. Gratuit, avec Supporter si vous voulez l'IA sur nos clés ou plus de cinq athlètes.

Gratuit pour toujours. Sans carte bancaire.