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 @@

Performance

+
+

Dance

+
+ + Demi-plié + Quadriceps · Body weight · Beginner + + + Relevé + Calves · Body weight · Beginner + + + Tendu + Hip flexors · Body weight · Intermediate + + + Pirouette (full turn) + Full body · Body weight · Intermediate + + + Box step (travels) + Full body · Body weight · Beginner + + + Grapevine (travels) + Full body · Body weight · Beginner + + + Waltz box step + Full body · Body weight · Beginner + + + Chassé (travels) + Full body · Body weight · Intermediate + +
+
+

Martial arts

@@ -320,44 +358,6 @@

Education

-
-

Dance

-
- - Demi-plié - Quadriceps · Body weight · Beginner - - - Relevé - Calves · Body weight · Beginner - - - Tendu - Hip flexors · Body weight · Intermediate - - - Pirouette (full turn) - Full body · Body weight · Intermediate - - - Box step (travels) - Full body · Body weight · Beginner - - - Grapevine (travels) - Full body · Body weight · Beginner - - - Waltz box step - Full body · Body weight · Beginner - - - Chassé (travels) - Full body · Body weight · Intermediate - -
-
-

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"); + }); });