Créer une séance par lien

CIRKALI sait recevoir une séance entière décrite dans son adresse. Ouvrir un tel lien affiche un résumé et propose de l’importer : rien n’est enregistré sans que la personne ait choisi une destination. Aucun compte n’est nécessaire pour cela — la séance voyage dans l’URL et ne passe par aucun serveur.

Cette page est écrite pour une intelligence artificielle à qui on donne l’adresse du site et qui doit produire un lien valide du premier coup.

La forme du lien

https://cirkali.fr/?s=<base64url du JSON>

L’enveloppe JSON

ChampValeur
vVersion du format. Toujours 1.
nNom de la séance, ou null.
mMode : "c" classique, "x" circuit.
pPause imposée en secondes (mode circuit uniquement).
tTransition entre exercices en secondes (0 pour aucune).
iLignes du déroulé, dans l’ordre.

En mode classique, les séries d’un exercice s’enchaînent avant de passer au suivant, avec le repos réglé sur chaque ligne. En mode circuit, les séries alternent les groupes musculaires et le repos de chaque ligne est ignoré : c’est p qui s’applique.

Les lignes

Chaque ligne est un tableau positionnel, pas un objet.

Exercice : ["e", clé, groupe, effort, séries, répétitions, secondes, repos, nomPerso?]
Pause    : ["r", secondes]
PositionValeur
cléUne des 62 clés ci-dessous, ou "custom".
groupeUn des 9 identifiants de groupe musculaire.
effort"r" répétitions, "t" durée.
sériesEntier ≥ 1.
répétitionsEntier ≥ 1. Utilisé si l’effort est "r".
secondesEntier ≥ 1. Utilisé si l’effort est "t".
reposSecondes entre deux séries (mode classique).
nomPersoNeuvième élément, uniquement si la clé est "custom".

Renseigner les deux valeurs (répétitions et secondes) est normal : seule celle qui correspond à l’effort choisi est affichée, l’autre sert si l’on bascule l’unité. Une clé absente de la liste est traitée comme "custom".

Exercice personnalisé

Un mouvement absent de la bibliothèque s’écrit avec la clé "custom", le groupe musculaire qui lui correspond, et son nom en neuvième position. Le groupe compte : c’est lui qui fait alterner les efforts en mode circuit.

["e", "custom", "cardio", "r", 3, 10, 30, 60, "Burpees"]

Encodage

Le JSON est encodé en base64url : base64 standard, puis + remplacé par -, / par _, et le remplissage = retiré. Aucune compression.

Exemple complet

Le JSON ci-dessous et la chaîne qui le suit sont générés ensemble à chaque build : ce lien fonctionne.

{"v":1,"n":"Haut du corps","m":"x","p":60,"t":0,"i":[["e","kneePushup","push","r",4,12,30,60],["e","superman","back","r",3,10,30,60],["e","plank","core","t",3,10,45,60],["r",90],["e","custom","cardio","r",3,10,30,60,"Burpees"]]}
https://cirkali.fr/?s=eyJ2IjoxLCJuIjoiSGF1dCBkdSBjb3JwcyIsIm0iOiJ4IiwicCI6NjAsInQiOjAsImkiOltbImUiLCJrbmVlUHVzaHVwIiwicHVzaCIsInIiLDQsMTIsMzAsNjBdLFsiZSIsInN1cGVybWFuIiwiYmFjayIsInIiLDMsMTAsMzAsNjBdLFsiZSIsInBsYW5rIiwiY29yZSIsInQiLDMsMTAsNDUsNjBdLFsiciIsOTBdLFsiZSIsImN1c3RvbSIsImNhcmRpbyIsInIiLDMsMTAsMzAsNjAsIkJ1cnBlZXMiXV19

Le lien à donner

Donnez toujours ce lien tel quel — jamais enveloppé dans une recherche (google.com/search) ni raccourci. Certains assistants ajoutent cette enveloppe automatiquement : si le lien que vous vous apprêtez à donner en contient une, retirez-la avant de répondre. L’import en un clic ne fonctionne qu’avec le lien exact.

Les 62 clés d’exercice

CléNomGroupeEffortRéglages par défaut
inclinedPompes inclinéespushreps3 × 10 reps, repos 90 s
chairsquatSquat sur chaiselegsreps3 × 10 reps, repos 90 s
calfMollets deboutcalvesreps3 × 15 reps, repos 90 s
wallsitWall sitlegstime3 × 30 s, repos 90 s
rotationRotation externe d’épauleshouldersreps3 × 12 reps, repos 60 s
deadbugDead bugcorereps3 × 8 reps, repos 60 s
plankPlanchecoretime3 × 20 s, repos 60 s
walkMarchecardiotime1 × 1200 s, repos 0 s
kneePushupPompes genouxpushreps3 × 10 reps, repos 90 s
wallPushupPompes contre le murpushreps3 × 12 reps, repos 60 s
chairDipsDips triceps sur chaisearmsreps3 × 8 reps, repos 90 s
armCirclesMoulinets de brasshoulderstime3 × 30 s, repos 30 s
wallSlidesGlissés au murshouldersreps3 × 10 reps, repos 60 s
supermanSupermanbackreps3 × 10 reps, repos 60 s
reverseSnowAngelAnge inversé au solbackreps3 × 10 reps, repos 60 s
birdDogChien-oiseaubackreps3 × 8 reps, repos 60 s
catCowChat-vachebacktime3 × 30 s, repos 20 s
reverseLungeFente arrièrelegsreps3 × 10 reps, repos 90 s
stepUpMontée sur chaiselegsreps3 × 10 reps, repos 90 s
lateralLungeFente latéralelegsreps3 × 10 reps, repos 90 s
gluteBridgePont fessierglutesreps3 × 12 reps, repos 60 s
donkeyKickLever de jambe à 4 pattesglutesreps3 × 10 reps, repos 60 s
hipAbductionAbduction de hanche deboutglutesreps3 × 12 reps, repos 60 s
sidePlankPlanche latéralecoretime3 × 20 s, repos 60 s
standingKneeRaiseMontées de genoux deboutcorereps3 × 10 reps, repos 45 s
crunchCrunchcorereps3 × 15 reps, repos 45 s
highKneeMarchMarche genoux hauts sur placecardiotime2 × 45 s, repos 30 s
buttKickMarchTalons-fesses sur placecardiotime2 × 45 s, repos 30 s
bandPullApartÉcarté élastiquebackreps3 × 12 reps, repos 60 s
bandSquatSquat élastiquelegsreps3 × 10 reps, repos 90 s
dumbbellGobletSquatSquat gobeletlegsreps3 × 10 reps, repos 90 s
dumbbellRowRowing haltère un brasbackreps3 × 10 reps, repos 90 s
legPressMachinePresse à cuisseslegsreps3 × 10 reps, repos 90 s
latPulldownMachineTirage verticalbackreps3 × 10 reps, repos 90 s
hamstringStretchÉtirement des ischio-jambierslegstime3 × 30 s, repos 20 s
chestDoorwayStretchÉtirement pectoraux (cadre de porte)pushtime3 × 30 s, repos 20 s
squatSquatlegsreps3 × 12 reps, repos 90 s
pushupPompespushreps3 × 8 reps, repos 90 s
pikePushupPompes piquéesshouldersreps3 × 8 reps, repos 90 s
mountainClimberGrimpeurcardiotime3 × 40 s, repos 45 s
legSwingBalancements de jambelegstime2 × 30 s, repos 20 s
torsoTwistRotations du bustecoretime2 × 30 s, repos 20 s
quadStretchÉtirement quadriceps deboutlegstime3 × 30 s, repos 20 s
gluteStretchÉtirement fessier (figure 4)glutestime3 × 30 s, repos 20 s
calfStretchÉtirement mollets au murcalvestime3 × 30 s, repos 20 s
childPosePosture de l’enfantbacktime3 × 30 s, repos 20 s
tricepsStretchÉtirement tricepsarmstime3 × 30 s, repos 20 s
bandChestPressDéveloppé poitrine élastiquepushreps3 × 12 reps, repos 60 s
bandLateralRaiseÉlévations latérales élastiqueshouldersreps3 × 12 reps, repos 60 s
bandLateralWalkMarche latérale élastiqueglutesreps3 × 12 reps, repos 60 s
bandCurlCurl biceps élastiquearmsreps3 × 12 reps, repos 60 s
dumbbellShoulderPressDéveloppé militaire haltèresshouldersreps3 × 10 reps, repos 90 s
dumbbellFloorPressDéveloppé haltères au solpushreps3 × 10 reps, repos 90 s
dumbbellRomanianDeadliftSoulevé de terre jambes tenduesglutesreps3 × 10 reps, repos 90 s
dumbbellCalfRaiseMollets debout avec haltèrescalvesreps3 × 15 reps, repos 60 s
dumbbellCurlCurl biceps haltèresarmsreps3 × 10 reps, repos 60 s
dumbbellTricepsExtensionExtension tricepsarmsreps3 × 10 reps, repos 60 s
chestPressMachineDéveloppé poitrine machinepushreps3 × 10 reps, repos 90 s
legCurlMachineLeg curl (ischio-jambiers)legsreps3 × 10 reps, repos 90 s
treadmillTapis de coursecardiotime1 × 1200 s, repos 0 s
stationaryBikeVélo d’appartementcardiotime1 × 1200 s, repos 0 s
rowingMachineRameurcardiotime1 × 900 s, repos 0 s

Les 9 groupes musculaires

IdentifiantNom
pushPoitrine
shouldersÉpaules
backDos
armsBras
legsCuisses
glutesFessiers
calvesMollets
coreGainage
cardioCardio

Si le base64 pose problème

Un second paramètre, ?plan=, accepte la même séance en JSON lisible non encodé, avec des noms de champs explicites. Il est plus long et ne rentre pas dans un QR code, mais il se relit à l’œil et se corrige. À utiliser en repli lorsque la chaîne base64 risque d’être approximative.

https://cirkali.fr/?plan={"name":"Haut du corps","mode":"circuit","pause":60,"items":[
  {"ex":"kneePushup","sets":4,"reps":12,"rest":60},
  {"ex":"plank","sets":3,"seconds":45},
  {"ex":"Burpees","group":"cardio","sets":3,"reps":10},
  {"rest":90}
]}

Dans cette forme : ex accepte une clé de la bibliothèque ou un nom libre (qui devient un exercice personnalisé) ; le groupe, le type d’effort et tout champ absent sont déduits de la bibliothèque ; reps seul impose l’effort en répétitions, seconds seul l’impose en durée ; une ligne sans ex est une pause dont rest donne la durée. Les noms de champs sont insensibles à la casse et les nombres acceptés sous forme de chaîne. Maximum 60 lignes.

Une réserve d’encodage propre à cette forme : le JSON voyage en clair dans la partie requête de l’URL, donc & et # doivent être encodés en %26 et %23 — sinon le premier coupe le paramètre en deux et le second tronque tout ce qui suit. Le plus sûr reste d’encoder l’ensemble de la valeur avec un encodeURIComponent. Le paramètre ?s= n’a pas ce problème : le base64url n’utilise que des caractères sans signification dans une URL.

Consignes de rédaction d’une séance