diff --git a/playground/public/moves/index.html b/playground/public/moves/index.html
index b2592e7..f52d6a7 100644
--- a/playground/public/moves/index.html
+++ b/playground/public/moves/index.html
@@ -186,6 +186,44 @@
Martial arts
@@ -320,44 +358,6 @@
Education
-
Yoga
diff --git a/playground/public/sitemap.xml b/playground/public/sitemap.xml
index 821e8f9..6f9b6c1 100644
--- a/playground/public/sitemap.xml
+++ b/playground/public/sitemap.xml
@@ -42,6 +42,12 @@
weekly
0.5
+
+ https://www.posecode.org/moves/demi-plie.html
+ 2026-07-17
+ weekly
+ 0.5
+
https://www.posecode.org/moves/deadlift.html
2026-07-17
@@ -198,12 +204,6 @@
weekly
0.5
-
- https://www.posecode.org/moves/demi-plie.html
- 2026-07-17
- weekly
- 0.5
-
https://www.posecode.org/moves/releve.html
2026-07-17
diff --git a/playground/src/presets.ts b/playground/src/presets.ts
index 49cc63a..28e0845 100644
--- a/playground/src/presets.ts
+++ b/playground/src/presets.ts
@@ -129,6 +129,9 @@ export const PRESETS: Preset[] = [
{ id: "squat", label: "Body-weight squat", domain: "Fitness", bodyPart: "Upper legs", target: "Quadriceps", equipment: "Body weight", difficulty: "Beginner", status: "ready", source: squat },
{ id: "superhero-landing", label: "Superhero three-point landing", domain: "Performance", bodyPart: "Full body", target: "Full body", equipment: "Body weight", difficulty: "Advanced", status: "ready", source: superheroLanding },
{ id: "dance-phrase", label: "Dance phrase (8-count)", domain: "Dance", bodyPart: "Full body", target: "Full body", equipment: "Body weight", difficulty: "Intermediate", status: "experimental", source: dancePhrase },
+ // Keep one ready Dance entry here so first-seen domain grouping places Dance
+ // immediately after Performance even when experimental previews are hidden.
+ { id: "demi-plie", label: "Demi-plié", domain: "Dance", bodyPart: "Upper legs", target: "Quadriceps", equipment: "Body weight", difficulty: "Beginner", status: "ready", source: demiPlie },
{ id: "deadlift", label: "Deadlift (hip hinge)", domain: "Fitness", bodyPart: "Back", target: "Hamstrings & glutes", equipment: "Body weight", difficulty: "Intermediate", status: "ready", source: deadlift },
{ id: "shoulder-abduction", label: "Shoulder abduction (ROM)", domain: "Education", bodyPart: "Shoulders", target: "Deltoids", equipment: "Body weight", difficulty: "Beginner", status: "experimental", source: shoulderAbduction },
{ id: "front-kick", label: "Front kick", domain: "Martial arts", bodyPart: "Upper legs", target: "Hip flexors", equipment: "Body weight", difficulty: "Intermediate", status: "ready", source: frontKick },
@@ -179,7 +182,6 @@ export const PRESETS: Preset[] = [
{ id: "high-knee-march", label: "High-knee march", domain: "Warm-up", bodyPart: "Full body", target: "Hip flexors", equipment: "Body weight", difficulty: "Beginner", status: "ready", source: highKneeMarch },
// --- Dance / choreography (flagship) ---
- { id: "demi-plie", label: "Demi-plié", domain: "Dance", bodyPart: "Upper legs", target: "Quadriceps", equipment: "Body weight", difficulty: "Beginner", status: "ready", source: demiPlie },
{ id: "releve", label: "Relevé", domain: "Dance", bodyPart: "Lower legs", target: "Calves", equipment: "Body weight", difficulty: "Beginner", status: "ready", source: releve },
{ id: "tendu", label: "Tendu", domain: "Dance", bodyPart: "Upper legs", target: "Hip flexors", equipment: "Body weight", difficulty: "Intermediate", status: "ready", source: tendu },
{ id: "port-de-bras", label: "Port de bras", domain: "Dance", bodyPart: "Shoulders", target: "Deltoids", equipment: "Body weight", difficulty: "Beginner", status: "experimental", source: portDeBras },
diff --git a/playground/test/library-order.test.ts b/playground/test/library-order.test.ts
index b6d28a9..8851c96 100644
--- a/playground/test/library-order.test.ts
+++ b/playground/test/library-order.test.ts
@@ -3,6 +3,7 @@ import {
FEATURED_LIBRARY_MOVEMENT_ID,
prioritizeFeaturedMovement,
} from "../src/library-order.js";
+import { PRESETS } from "../src/presets.js";
describe("movement library ordering", () => {
it("promotes Jumping jacks ahead of otherwise stable results", () => {
@@ -29,4 +30,14 @@ describe("movement library ordering", () => {
expect(prioritizeFeaturedMovement(movements)).toEqual(movements);
});
+
+ it("places the ready Dance category immediately after Performance", () => {
+ const readyDomains = [
+ ...new Set(PRESETS.filter((preset) => preset.status === "ready").map((preset) => preset.domain)),
+ ];
+ const performanceIndex = readyDomains.indexOf("Performance");
+
+ expect(performanceIndex).toBeGreaterThanOrEqual(0);
+ expect(readyDomains[performanceIndex + 1]).toBe("Dance");
+ });
});