Analysing posture & movement...
Processing all three views simultaneously
Test, Don't Guess — Movement Science
Posture & Movement Assessment
Three-view visual screen · FMS-informed · Corrective priority output
TDG Suite · v1.1
Screening tool to support clinical reasoning — not a diagnostic assessment
Client Name
Assessment Date
Activity Level
Primary Goal
STEP 1 Upload Your Three Photographs All three views are analysed together in a single assessment
1
Anterior View
FRONT FACING
EAR SHLD HIP KNEE
Stand facing the camera
Feet shoulder-width apart
Arms relaxed at your sides
Camera at waist height
2
Lateral View
SIDE PROFILE
EAR SHLD HIP KNEE PLUMB
Stand sideways to the camera
Right or left side facing lens
Look straight ahead
Camera at waist/hip height
3
Overhead Squat
FRONT FACING
SHOULDER-WIDTH STANCE
Face camera, feet shoulder-width
Arms straight overhead, thumbs up
Squat as deep as comfortable
Have someone take this photo
Known injuries / conditions
Area of main concern
Hours sitting per day
Additional context for the practitioner
Photos uploaded:
0 of 3 photos ready
All three views are sent in a single AI call for cross-referenced analysis
Assessment Report
Top 3 Corrective Priorities
⚕️ Practitioner clinical terminology. Cross-reference with functional movement testing and clinical history before prescribing corrective exercise. AI findings are indicative, not diagnostic.
`); pw.document.close(); setTimeout(() => pw.print(), 600); } // ══ UTILITIES ══ function resetAssessment() { if (!confirm('Start a new assessment? This will clear the current results.')) return; ['anterior','lateral','squat'].forEach(removeZonePhoto); document.getElementById('resultsSection').classList.remove('visible'); document.getElementById('regionGrid').innerHTML = ''; document.getElementById('prioritiesContainer').innerHTML = ''; document.getElementById('pracContent').innerHTML = ''; lastResult = null; window.scrollTo({ top: 0, behavior: 'smooth' }); } function showToast(message, type) { const toast = document.getElementById('toast'); toast.textContent = message; toast.className = 'toast toast-' + type + ' show'; setTimeout(() => toast.classList.remove('show'), 3500); } document.getElementById('assessDate').valueAsDate = new Date(); updatePhotoCount();