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
| Champ | Valeur |
|---|---|
v | Version du format. Toujours 1. |
n | Nom de la séance, ou null. |
m | Mode : "c" classique, "x" circuit. |
p | Pause imposée en secondes (mode circuit uniquement). |
t | Transition entre exercices en secondes (0 pour aucune). |
i | Lignes 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]
| Position | Valeur |
|---|---|
| clé | Une des 62 clés ci-dessous, ou "custom". |
| groupe | Un des 9 identifiants de groupe musculaire. |
| effort | "r" répétitions, "t" durée. |
| séries | Entier ≥ 1. |
| répétitions | Entier ≥ 1. Utilisé si l’effort est "r". |
| secondes | Entier ≥ 1. Utilisé si l’effort est "t". |
| repos | Secondes entre deux séries (mode classique). |
| nomPerso | Neuviè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é | Nom | Groupe | Effort | Réglages par défaut |
|---|---|---|---|---|
inclined | Pompes inclinées | push | reps | 3 × 10 reps, repos 90 s |
chairsquat | Squat sur chaise | legs | reps | 3 × 10 reps, repos 90 s |
calf | Mollets debout | calves | reps | 3 × 15 reps, repos 90 s |
wallsit | Wall sit | legs | time | 3 × 30 s, repos 90 s |
rotation | Rotation externe d’épaule | shoulders | reps | 3 × 12 reps, repos 60 s |
deadbug | Dead bug | core | reps | 3 × 8 reps, repos 60 s |
plank | Planche | core | time | 3 × 20 s, repos 60 s |
walk | Marche | cardio | time | 1 × 1200 s, repos 0 s |
kneePushup | Pompes genoux | push | reps | 3 × 10 reps, repos 90 s |
wallPushup | Pompes contre le mur | push | reps | 3 × 12 reps, repos 60 s |
chairDips | Dips triceps sur chaise | arms | reps | 3 × 8 reps, repos 90 s |
armCircles | Moulinets de bras | shoulders | time | 3 × 30 s, repos 30 s |
wallSlides | Glissés au mur | shoulders | reps | 3 × 10 reps, repos 60 s |
superman | Superman | back | reps | 3 × 10 reps, repos 60 s |
reverseSnowAngel | Ange inversé au sol | back | reps | 3 × 10 reps, repos 60 s |
birdDog | Chien-oiseau | back | reps | 3 × 8 reps, repos 60 s |
catCow | Chat-vache | back | time | 3 × 30 s, repos 20 s |
reverseLunge | Fente arrière | legs | reps | 3 × 10 reps, repos 90 s |
stepUp | Montée sur chaise | legs | reps | 3 × 10 reps, repos 90 s |
lateralLunge | Fente latérale | legs | reps | 3 × 10 reps, repos 90 s |
gluteBridge | Pont fessier | glutes | reps | 3 × 12 reps, repos 60 s |
donkeyKick | Lever de jambe à 4 pattes | glutes | reps | 3 × 10 reps, repos 60 s |
hipAbduction | Abduction de hanche debout | glutes | reps | 3 × 12 reps, repos 60 s |
sidePlank | Planche latérale | core | time | 3 × 20 s, repos 60 s |
standingKneeRaise | Montées de genoux debout | core | reps | 3 × 10 reps, repos 45 s |
crunch | Crunch | core | reps | 3 × 15 reps, repos 45 s |
highKneeMarch | Marche genoux hauts sur place | cardio | time | 2 × 45 s, repos 30 s |
buttKickMarch | Talons-fesses sur place | cardio | time | 2 × 45 s, repos 30 s |
bandPullApart | Écarté élastique | back | reps | 3 × 12 reps, repos 60 s |
bandSquat | Squat élastique | legs | reps | 3 × 10 reps, repos 90 s |
dumbbellGobletSquat | Squat gobelet | legs | reps | 3 × 10 reps, repos 90 s |
dumbbellRow | Rowing haltère un bras | back | reps | 3 × 10 reps, repos 90 s |
legPressMachine | Presse à cuisses | legs | reps | 3 × 10 reps, repos 90 s |
latPulldownMachine | Tirage vertical | back | reps | 3 × 10 reps, repos 90 s |
hamstringStretch | Étirement des ischio-jambiers | legs | time | 3 × 30 s, repos 20 s |
chestDoorwayStretch | Étirement pectoraux (cadre de porte) | push | time | 3 × 30 s, repos 20 s |
squat | Squat | legs | reps | 3 × 12 reps, repos 90 s |
pushup | Pompes | push | reps | 3 × 8 reps, repos 90 s |
pikePushup | Pompes piquées | shoulders | reps | 3 × 8 reps, repos 90 s |
mountainClimber | Grimpeur | cardio | time | 3 × 40 s, repos 45 s |
legSwing | Balancements de jambe | legs | time | 2 × 30 s, repos 20 s |
torsoTwist | Rotations du buste | core | time | 2 × 30 s, repos 20 s |
quadStretch | Étirement quadriceps debout | legs | time | 3 × 30 s, repos 20 s |
gluteStretch | Étirement fessier (figure 4) | glutes | time | 3 × 30 s, repos 20 s |
calfStretch | Étirement mollets au mur | calves | time | 3 × 30 s, repos 20 s |
childPose | Posture de l’enfant | back | time | 3 × 30 s, repos 20 s |
tricepsStretch | Étirement triceps | arms | time | 3 × 30 s, repos 20 s |
bandChestPress | Développé poitrine élastique | push | reps | 3 × 12 reps, repos 60 s |
bandLateralRaise | Élévations latérales élastique | shoulders | reps | 3 × 12 reps, repos 60 s |
bandLateralWalk | Marche latérale élastique | glutes | reps | 3 × 12 reps, repos 60 s |
bandCurl | Curl biceps élastique | arms | reps | 3 × 12 reps, repos 60 s |
dumbbellShoulderPress | Développé militaire haltères | shoulders | reps | 3 × 10 reps, repos 90 s |
dumbbellFloorPress | Développé haltères au sol | push | reps | 3 × 10 reps, repos 90 s |
dumbbellRomanianDeadlift | Soulevé de terre jambes tendues | glutes | reps | 3 × 10 reps, repos 90 s |
dumbbellCalfRaise | Mollets debout avec haltères | calves | reps | 3 × 15 reps, repos 60 s |
dumbbellCurl | Curl biceps haltères | arms | reps | 3 × 10 reps, repos 60 s |
dumbbellTricepsExtension | Extension triceps | arms | reps | 3 × 10 reps, repos 60 s |
chestPressMachine | Développé poitrine machine | push | reps | 3 × 10 reps, repos 90 s |
legCurlMachine | Leg curl (ischio-jambiers) | legs | reps | 3 × 10 reps, repos 90 s |
treadmill | Tapis de course | cardio | time | 1 × 1200 s, repos 0 s |
stationaryBike | Vélo d’appartement | cardio | time | 1 × 1200 s, repos 0 s |
rowingMachine | Rameur | cardio | time | 1 × 900 s, repos 0 s |
Les 9 groupes musculaires
| Identifiant | Nom |
|---|---|
push | Poitrine |
shoulders | Épaules |
back | Dos |
arms | Bras |
legs | Cuisses |
glutes | Fessiers |
calves | Mollets |
core | Gainage |
cardio | Cardio |
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
- Alterner les groupes musculaires plutôt que d’enchaîner deux fois le même.
- Rester dans les ordres de grandeur des réglages par défaut ci-dessus : ils sont propres à chaque exercice.
- Préférer les clés de la bibliothèque aux exercices personnalisés : elles apportent une figure, un conseil d’exécution et une fiche détaillée.
- Ne jamais poser de diagnostic ni prescrire à une personne blessée : proposer une séance, pas un traitement.