Charge un programme et lance ta séance.
—
Charge un programme d'entraînement en JSON, suis le déroulé, exporte ton récap.
SportProgLoader est une application qui te guide pas à pas pendant ta séance de sport. Tu charges un programme au format JSON, et l'app déroule chaque exercice avec chronos, pauses et conseils.
3 étapes pour commencer :
À la fin, tu peux exporter un récap de ta séance (durée réelle, ressentis, exercices passés/faits).
Si tu utilises déjà une IA conversationnelle (ChatGPT, Claude, Gemini, Mistral…) comme coach pour gérer tes séances, tu peux lui apprendre le format JSON de l'app.
Comment ça marche :
Avantage : pas besoin de tout redécrire, l'IA reprend le contexte de votre conversation et peut suivre ta progression sur le long terme.
Note : une fois le JSON généré par l'IA, copie-le et colle-le dans l'onglet « Coller un JSON » de l'app, ou utilise l'icône 📋 pour coller directement.
Si tu veux écrire ton programme à la main ou ajuster un programme existant, voici comment le format fonctionne.
Un programme = un objet JSON avec 3 parties principales :
version : toujours "1.0"meta : informations sur la séance (nom, date, durée estimée…)phases : la liste ordonnée des phases de la séanceUne séance peut contenir autant de phases que tu veux. Typiquement : Échauffement, Circuit principal, Étirements.
Chaque phase a :
nom (string)type : "sequence" ou "circuit"exercicessequence : exercices enchaînés simplement, sans pause structurée. Idéal pour l'échauffement et les étirements.
circuit : exercices répétés sur plusieurs tours, avec pauses configurables.
Chaque exercice a :
nom (string)type : "reps", "secondes" ou "custom"objectif pour reps, duree pour secondes, instructions pour custom avec chrono libre)conseil (affiché pendant l'exo)Exemples des 3 types :
// Exercice en répétitions
{ "nom": "Pompes", "type": "reps", "objectif": 10 }
// Exercice en temps
{ "nom": "Gainage", "type": "secondes", "duree": 30 }
// Exercice avec instructions libres et chrono montant
{ "nom": "Étirement libre", "type": "custom", "instructions": "..." }
Exercice asymétrique (gauche/droite) :
{
"nom": "Fente avant",
"type": "reps",
"objectif": 5,
"objectif_mode": "par_cote",
"cotes": ["gauche", "droite"]
}
Exercice répété plusieurs fois (étirements typiquement) :
{
"nom": "Squat profond statique",
"type": "secondes",
"duree": 30,
"series": 3,
"pause_entre_series_sec": 120,
"series_auto": true
}
Pauses dans un circuit :
{
"nom": "Circuit",
"type": "circuit",
"tours": 4,
"pause_entre_exos_sec": 45,
"pause_entre_tours_sec": 90,
"pause_fin_circuit_sec": 60
}
Dans un circuit, tu peux faire varier l'objectif d'un exercice à chaque tour avec deux champs optionnels :
objectifs_par_tour : tableau de nombres pour les exos en reps (remplace objectif)durees_par_tour : tableau de secondes pour les exos en secondes (remplace duree)Le tableau doit avoir exactement autant de valeurs que de tours. Index 0 = tour 1, index 1 = tour 2, etc.
Exemple — décrescendo sur 3 tours :
{
"nom": "Circuit",
"type": "circuit",
"tours": 3,
"pause_entre_exos_sec": 30,
"pause_entre_tours_sec": 60,
"exercices": [
{
"nom": "Pompes",
"type": "reps",
"objectifs_par_tour": [10, 8, 6],
"conseil": "Décrescendo : on baisse à chaque tour."
},
{
"nom": "Gainage",
"type": "secondes",
"durees_par_tour": [30, 25, 20]
}
]
}
Ces champs n'ont de sens que dans un circuit. Dans une sequence, ils sont ignorés.
Le champ travail_principal (booléen, requis) sur chaque phase
indique si elle compte dans les statistiques principales
et l'analyse du cœur de séance, ou si elle relève de l'accompagnement
(échauffement, récupération, mobilité douce).
Comportement de l'app selon ce champ :
Tu dois le renseigner explicitement pour chaque phase :
{
"nom": "Mobilité avancée travaillée",
"type": "sequence",
"travail_principal": true,
"exercices": [...]
}
Le champ collecter_ressenti (booléen, requis) sur une
phase indique si l'app doit demander à l'utilisateur son ressenti après
chaque exo de la phase.
Comportement :
true → l'app demande un ressenti après chaque exo. Si
la phase est une sequence sans pauses naturelles, l'app
injecte automatiquement une mini-pause libre après chaque exo pour
permettre la saisie.false → l'app ne demande jamais de ressenti pour
cette phase.À noter : travail_principal et
collecter_ressenti sont deux champs indépendants.
travail_principal contrôle les stats principales et le récap,
collecter_ressenti contrôle uniquement la demande de
ressenti pendant la séance.
{
"nom": "Étirements travaillés",
"type": "sequence",
"travail_principal": true,
"collecter_ressenti": true,
"exercices": [
{ "nom": "Squat profond statique", "type": "secondes", "duree": 30 },
{ "nom": "Toucher ses pieds", "type": "secondes", "duree": 30 }
]
}
Avec ce JSON, après chaque exo l'app insère une petite pause libre pendant laquelle l'utilisateur peut taper son ressenti, puis "Suivant" pour enchaîner.
Pour les exos avec un champ cotes, le champ optionnel
mode_cotes contrôle comment les côtés s'enchaînent :
"separe" (défaut) : un step par côté, avec pause
éventuelle entre eux."auto" : tous les côtés enchaînés automatiquement
en un seul step.À noter : cotes n'est pas limité à
gauche/droite. Tu peux mettre ["bras 1", "bras 2"],
["prise large", "prise neutre", "prise serrée"], ou
n'importe quels libellés à enchaîner.
Pour un exo secondes en mode auto :
à la fin du chrono d'un côté, l'app joue un bip + un compte à rebours
3s avec le côté suivant affiché, puis relance le chrono. Idéal pour
les étirements bilatéraux.
{
"nom": "Fléchisseurs des hanches",
"type": "secondes",
"duree": 20,
"cotes": ["gauche", "droite"],
"mode_cotes": "auto",
"series": 3,
"pause_entre_series_sec": 60,
"series_auto": true,
"conseil": "Bassin vers l'avant, dos non cambré."
}
Déroulement : gauche 20s + transition 3s + droite 20s, pause 60s, puis répété 3 fois en tout.
Pour un exo reps en mode auto : un
seul step. objectif_mode précise si l'objectif est total
ou par côté.
{
"nom": "Fentes alternées",
"type": "reps",
"objectif": 10,
"objectif_mode": "total",
"cotes": ["gauche", "droite"],
"mode_cotes": "auto",
"conseil": "5 par jambe en alternance, descente lente."
}
Le mode auto n'est
pas applicable aux exos custom (ignoré dans ce cas).
Voici un programme complet que tu peux télécharger ou copier pour tester l'app, ou comme base pour créer le tien.
.json, ou copie le contenu et envoie-le par message (Discord, mail, SMS). Il pourra le charger sur cette même app.pause_entre_exos_sec, pause_entre_tours_sec, etc. dans ton fichier et l'app applique ces valeurs.```json : il doit commencer par { et finir par }. Si l'IA ajoute des commentaires (//) ou du texte dans le bloc, demande-lui de les retirer.ressenti et duree_reelle_sec sont précieux pour calibrer la difficulté.SportProgLoader est une application web légère, qui fonctionne entièrement dans ton navigateur. Aucune donnée n'est envoyée vers un serveur, tout reste sur ton appareil.
Pour partager l'app : il suffit de partager l'URL. Tout le monde peut l'utiliser avec son propre programme JSON.
Pour signaler un bug ou proposer une amélioration : [contact à compléter ultérieurement]