kinemotion 0.60.1__tar.gz → 0.61.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kinemotion might be problematic. Click here for more details.

Files changed (591) hide show
  1. {kinemotion-0.60.1 → kinemotion-0.61.0}/.github/workflows/deploy-backend.yml +1 -1
  2. {kinemotion-0.60.1 → kinemotion-0.61.0}/CHANGELOG.md +7 -0
  3. {kinemotion-0.60.1 → kinemotion-0.61.0}/PKG-INFO +1 -1
  4. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/database.py +13 -2
  5. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/routes/health.py +21 -0
  6. kinemotion-0.61.0/backend/supabase-schema.sql +70 -0
  7. kinemotion-0.61.0/frontend/src/lib/supabase.ts +23 -0
  8. {kinemotion-0.60.1 → kinemotion-0.61.0}/pyproject.toml +1 -1
  9. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/supabasedb/setup-supabase-database.sh +23 -15
  10. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/supabasedb/setup_supabase_db.py +21 -13
  11. {kinemotion-0.60.1 → kinemotion-0.61.0}/uv.lock +1 -1
  12. kinemotion-0.60.1/backend/supabase-schema.sql +0 -148
  13. kinemotion-0.60.1/frontend/src/lib/supabase.ts +0 -20
  14. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/README.md +0 -0
  15. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  16. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +0 -0
  17. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
  18. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
  19. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
  20. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
  21. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
  22. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
  23. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
  24. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
  25. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
  26. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
  27. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  28. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  29. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  30. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  31. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  32. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  33. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  34. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
  35. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
  36. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
  37. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
  38. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
  39. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
  40. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
  41. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
  42. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
  43. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
  44. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
  45. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
  46. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
  47. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
  48. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  49. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
  50. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
  51. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
  52. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
  53. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
  54. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
  55. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
  56. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/backend-granular-logging-implementation.md +0 -0
  57. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
  58. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
  59. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  60. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  61. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  62. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  63. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  64. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/commit-review-r2-video-storage-migration-fe74d1f.md +0 -0
  65. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
  66. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
  67. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/database-setup-scripts-complete-implementation.md +0 -0
  68. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  69. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
  70. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
  71. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
  72. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/fast-api-app.py Refactoring Plan - Modular Architecture.md +0 -0
  73. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/fast-api-refactoring-completion-summary.md +0 -0
  74. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/feature-request-system-configuration.md +0 -0
  75. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/follow-up-improvements-to-r2-video-storage-migration.md +0 -0
  76. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  77. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
  78. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
  79. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  80. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
  81. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/hook-quick-reference.md +0 -0
  82. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/i18n-implementation-plan-for-validation-messages.md +0 -0
  83. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
  84. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/model-import-conflict-resolution-fast-api-refactoring.md +0 -0
  85. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
  86. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/optimal-timing-implementation-summary.md +0 -0
  87. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
  88. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
  89. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
  90. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
  91. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
  92. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
  93. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
  94. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/supabase-database-integration-setup.md +0 -0
  95. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/supabase-documentation-validation-december-2025.md +0 -0
  96. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
  97. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
  98. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
  99. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
  100. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
  101. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
  102. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
  103. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
  104. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
  105. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
  106. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  107. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
  108. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
  109. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/agent-documentation-standards-update.md +0 -0
  110. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
  111. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/i18n-documentation-cleanup-completed.md +0 -0
  112. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  113. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  114. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  115. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  116. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
  117. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  118. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +0 -0
  119. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
  120. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  121. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
  122. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
  123. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/research/performance-improvement-analysis-30s-18s.md +0 -0
  124. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  125. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  126. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  127. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  128. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
  129. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  130. {kinemotion-0.60.1 → kinemotion-0.61.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
  131. {kinemotion-0.60.1 → kinemotion-0.61.0}/.claude/agents/biomechanics-specialist.md +0 -0
  132. {kinemotion-0.60.1 → kinemotion-0.61.0}/.claude/agents/computer-vision-engineer.md +0 -0
  133. {kinemotion-0.60.1 → kinemotion-0.61.0}/.claude/agents/devops-cicd-engineer.md +0 -0
  134. {kinemotion-0.60.1 → kinemotion-0.61.0}/.claude/agents/frontend-developer.md +0 -0
  135. {kinemotion-0.60.1 → kinemotion-0.61.0}/.claude/agents/ml-data-scientist.md +0 -0
  136. {kinemotion-0.60.1 → kinemotion-0.61.0}/.claude/agents/project-manager.md +0 -0
  137. {kinemotion-0.60.1 → kinemotion-0.61.0}/.claude/agents/python-backend-developer.md +0 -0
  138. {kinemotion-0.60.1 → kinemotion-0.61.0}/.claude/agents/qa-test-engineer.md +0 -0
  139. {kinemotion-0.60.1 → kinemotion-0.61.0}/.claude/agents/technical-writer.md +0 -0
  140. {kinemotion-0.60.1 → kinemotion-0.61.0}/.claude/settings.local.json +0 -0
  141. {kinemotion-0.60.1 → kinemotion-0.61.0}/.cursor/mcp.json +0 -0
  142. {kinemotion-0.60.1 → kinemotion-0.61.0}/.dockerignore +0 -0
  143. {kinemotion-0.60.1 → kinemotion-0.61.0}/.envrc +0 -0
  144. {kinemotion-0.60.1 → kinemotion-0.61.0}/.gitattributes +0 -0
  145. {kinemotion-0.60.1 → kinemotion-0.61.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  146. {kinemotion-0.60.1 → kinemotion-0.61.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  147. {kinemotion-0.60.1 → kinemotion-0.61.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  148. {kinemotion-0.60.1 → kinemotion-0.61.0}/.github/dependabot.yml +0 -0
  149. {kinemotion-0.60.1 → kinemotion-0.61.0}/.github/pull_request_template.md +0 -0
  150. {kinemotion-0.60.1 → kinemotion-0.61.0}/.github/workflows/docs.yml +0 -0
  151. {kinemotion-0.60.1 → kinemotion-0.61.0}/.github/workflows/release.yml +0 -0
  152. {kinemotion-0.60.1 → kinemotion-0.61.0}/.github/workflows/test.yml +0 -0
  153. {kinemotion-0.60.1 → kinemotion-0.61.0}/.gitignore +0 -0
  154. {kinemotion-0.60.1 → kinemotion-0.61.0}/.mcp.json +0 -0
  155. {kinemotion-0.60.1 → kinemotion-0.61.0}/.pre-commit-config.yaml +0 -0
  156. {kinemotion-0.60.1 → kinemotion-0.61.0}/.readthedocs.yml +0 -0
  157. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/.gitignore +0 -0
  158. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
  159. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
  160. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/code_style_and_conventions.md +0 -0
  161. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/current-project-architecture.md +0 -0
  162. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
  163. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/deployment-setup-complete.md +0 -0
  164. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/github-project-setup-summary.md +0 -0
  165. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/mvp-first-strategy.md +0 -0
  166. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
  167. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/project_overview.md +0 -0
  168. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/specialist-agents-routing.md +0 -0
  169. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/memories/suggested_commands.md +0 -0
  170. {kinemotion-0.60.1 → kinemotion-0.61.0}/.serena/project.yml +0 -0
  171. {kinemotion-0.60.1 → kinemotion-0.61.0}/.tool-versions +0 -0
  172. {kinemotion-0.60.1 → kinemotion-0.61.0}/.vercelignore +0 -0
  173. {kinemotion-0.60.1 → kinemotion-0.61.0}/CLAUDE.md +0 -0
  174. {kinemotion-0.60.1 → kinemotion-0.61.0}/CODE_OF_CONDUCT.md +0 -0
  175. {kinemotion-0.60.1 → kinemotion-0.61.0}/CONTRIBUTING.md +0 -0
  176. {kinemotion-0.60.1 → kinemotion-0.61.0}/Dockerfile +0 -0
  177. {kinemotion-0.60.1 → kinemotion-0.61.0}/GEMINI.md +0 -0
  178. {kinemotion-0.60.1 → kinemotion-0.61.0}/LICENSE +0 -0
  179. {kinemotion-0.60.1 → kinemotion-0.61.0}/README.md +0 -0
  180. {kinemotion-0.60.1 → kinemotion-0.61.0}/SECURITY.md +0 -0
  181. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/.coveragerc +0 -0
  182. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/.dockerignore +0 -0
  183. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/.env.example +0 -0
  184. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/Dockerfile +0 -0
  185. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/README.md +0 -0
  186. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/docs/fly-deployment.md +0 -0
  187. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/docs/implementation-summary.md +0 -0
  188. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/docs/setup.md +0 -0
  189. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/docs/tests.md +0 -0
  190. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/pyproject.toml +0 -0
  191. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/__init__.py +0 -0
  192. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/analysis_api.py +0 -0
  193. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/app/__init__.py +0 -0
  194. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/app/config.py +0 -0
  195. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/app/dependencies.py +0 -0
  196. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/app/exceptions.py +0 -0
  197. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/app/main.py +0 -0
  198. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/app.py +0 -0
  199. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/auth.py +0 -0
  200. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
  201. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/middleware.py +0 -0
  202. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/models/__init__.py +0 -0
  203. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/models/database.py +0 -0
  204. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/models/responses.py +0 -0
  205. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/models/storage.py +0 -0
  206. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/routes/__init__.py +0 -0
  207. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/routes/analysis.py +0 -0
  208. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/routes/database.py +0 -0
  209. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/routes/platform.py +0 -0
  210. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/services/__init__.py +0 -0
  211. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/services/analysis_service.py +0 -0
  212. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/services/storage_service.py +0 -0
  213. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/services/validation.py +0 -0
  214. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/services/video_processor.py +0 -0
  215. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/types.py +0 -0
  216. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/utils/__init__.py +0 -0
  217. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/src/kinemotion_backend/utils/rate_limiter.py +0 -0
  218. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/tests/README.md +0 -0
  219. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/tests/__init__.py +0 -0
  220. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/tests/conftest.py +0 -0
  221. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/tests/test_api_endpoints.py +0 -0
  222. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/tests/test_error_handling.py +0 -0
  223. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/tests/test_health.py +0 -0
  224. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/tests/test_r2_integration.py +0 -0
  225. {kinemotion-0.60.1 → kinemotion-0.61.0}/backend/tests/test_validation.py +0 -0
  226. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/README.md +0 -0
  227. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/api/cmj.md +0 -0
  228. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/api/core.md +0 -0
  229. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/api/dropjump.md +0 -0
  230. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/api/overview.md +0 -0
  231. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/I18N-README.md +0 -0
  232. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/agents-guide.md +0 -0
  233. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/errors-findings.md +0 -0
  234. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/feature-request-system.md +0 -0
  235. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/feedback-system-setup.md +0 -0
  236. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/i18n-architecture-diagram.md +0 -0
  237. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/i18n-cheat-sheet.md +0 -0
  238. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/i18n-quick-start-guide.md +0 -0
  239. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/i18n-summary.md +0 -0
  240. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/i18n-validation-messages-specification.md +0 -0
  241. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/supabase-database-setup.md +0 -0
  242. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/test-suite-review-december-2025.md +0 -0
  243. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/testing-standards.md +0 -0
  244. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/testing.md +0 -0
  245. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/type-hints.md +0 -0
  246. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/validation-plan.md +0 -0
  247. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/validation-roadmap.md +0 -0
  248. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/development/wallball-norep-detection.md +0 -0
  249. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/bulk-processing.md +0 -0
  250. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/camera-setup.md +0 -0
  251. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/cloud-run-deployment.md +0 -0
  252. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/cmj-guide.md +0 -0
  253. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
  254. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/cmj-recording-protocol.md +0 -0
  255. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/deployment-checklist.md +0 -0
  256. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/local-testing.md +0 -0
  257. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/setup-issue-12.md +0 -0
  258. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/supabase-setup/README.md +0 -0
  259. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/supabase-setup/quickstart.md +0 -0
  260. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/supabase-setup/scripts-reference.md +0 -0
  261. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/guides/supabase-setup/setup-guide.md +0 -0
  262. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/index.md +0 -0
  263. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/quick-start.md +0 -0
  264. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/reference/cloud-run-quick-reference.md +0 -0
  265. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/reference/json-output-format.md +0 -0
  266. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/reference/json-structure-comparison.md +0 -0
  267. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/reference/parameters.md +0 -0
  268. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/reference/pose-systems.md +0 -0
  269. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  270. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/paper-downloader/README.md +0 -0
  271. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/paper-downloader/dois.txt +0 -0
  272. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/paper-downloader/download.py +0 -0
  273. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/paper-downloader/pyproject.toml +0 -0
  274. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/paper-downloader/uv.lock +0 -0
  275. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  276. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  277. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/README.md +0 -0
  278. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
  279. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  280. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  281. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  282. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  283. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  284. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  285. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  286. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  287. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  288. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  289. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  290. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  291. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  292. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  293. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  294. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  295. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  296. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  297. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  298. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  299. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  300. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  301. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  302. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  303. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  304. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  305. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  306. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  307. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  308. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  309. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  310. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  311. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  312. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  313. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  314. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  315. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  316. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  317. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  318. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  319. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  320. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  321. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  322. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  323. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  324. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  325. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  326. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  327. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  328. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  329. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  330. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  331. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  332. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  333. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  334. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  335. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  336. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  337. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  338. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  339. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  340. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  341. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  342. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  343. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  344. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  345. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  346. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  347. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  348. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  349. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  350. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  351. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  352. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  353. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  354. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  355. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  356. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  357. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  358. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  359. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  360. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  361. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  362. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  363. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  364. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  365. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  366. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/README.md +0 -0
  367. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/STYLE_GUIDE.md +0 -0
  368. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  369. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  370. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  371. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  372. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  373. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  374. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  375. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  376. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  377. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  378. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  379. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  380. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  381. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  382. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  383. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  384. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  385. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  386. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  387. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  388. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  389. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  390. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  391. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  392. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  393. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  394. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  395. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  396. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  397. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  398. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  399. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  400. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  401. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  402. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  403. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
  404. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/technical/framerate.md +0 -0
  405. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/technical/implementation-details.md +0 -0
  406. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/technical/imu-metadata.md +0 -0
  407. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/technical/real-time-analysis.md +0 -0
  408. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/technical/triple-extension.md +0 -0
  409. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/translations/es/camera-setup.md +0 -0
  410. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/validation/determinism-test.md +0 -0
  411. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/validation/known-height-validation.md +0 -0
  412. {kinemotion-0.60.1 → kinemotion-0.61.0}/docs/validation-status.md +0 -0
  413. {kinemotion-0.60.1 → kinemotion-0.61.0}/examples/bulk/README.md +0 -0
  414. {kinemotion-0.60.1 → kinemotion-0.61.0}/examples/bulk/bulk_processing.py +0 -0
  415. {kinemotion-0.60.1 → kinemotion-0.61.0}/examples/bulk/simple_example.py +0 -0
  416. {kinemotion-0.60.1 → kinemotion-0.61.0}/examples/programmatic_usage.py +0 -0
  417. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/.editorconfig +0 -0
  418. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/.env.example +0 -0
  419. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/.gitattributes +0 -0
  420. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/.gitignore +0 -0
  421. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  422. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/.yarnrc.yml +0 -0
  423. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/README.md +0 -0
  424. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/index.html +0 -0
  425. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/package.json +0 -0
  426. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/App.i18n.integration.test.tsx +0 -0
  427. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/App.test.tsx +0 -0
  428. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/App.tsx +0 -0
  429. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/Auth.test.tsx +0 -0
  430. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/Auth.tsx +0 -0
  431. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/ErrorBoundary.test.tsx +0 -0
  432. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
  433. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
  434. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/FeatureRequestButton.tsx +0 -0
  435. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/FeedbackForm.css +0 -0
  436. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/FeedbackForm.test.tsx +0 -0
  437. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/FeedbackForm.tsx +0 -0
  438. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/LanguageSwitcher.css +0 -0
  439. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/LanguageSwitcher.test.tsx +0 -0
  440. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/LanguageSwitcher.tsx +0 -0
  441. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/LoadingSpinner.test.tsx +0 -0
  442. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
  443. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/RecentUploads.test.tsx +0 -0
  444. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/RecentUploads.tsx +0 -0
  445. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/ResultsDisplay.test.tsx +0 -0
  446. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
  447. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  448. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/UploadForm.test.tsx +0 -0
  449. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/components/UploadForm.tsx +0 -0
  450. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/config/links.ts +0 -0
  451. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/hooks/useAnalysis.test.ts +0 -0
  452. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/hooks/useAnalysis.ts +0 -0
  453. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/hooks/useAuth.ts +0 -0
  454. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
  455. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/hooks/useDatabaseStatus.ts +0 -0
  456. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/hooks/useLanguage.test.ts +0 -0
  457. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/hooks/useLanguage.ts +0 -0
  458. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
  459. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/i18n/config.ts +0 -0
  460. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/i18n/locales/en/translation.json +0 -0
  461. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/i18n/locales/es/translation.json +0 -0
  462. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/i18n/locales/fr/translation.json +0 -0
  463. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/index.css +0 -0
  464. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/main.tsx +0 -0
  465. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/test/setup.ts +0 -0
  466. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/types/api.ts +0 -0
  467. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/src/vite-env.d.ts +0 -0
  468. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/vercel.json +0 -0
  469. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/vite.config.ts +0 -0
  470. {kinemotion-0.60.1 → kinemotion-0.61.0}/frontend/yarn.lock +0 -0
  471. {kinemotion-0.60.1 → kinemotion-0.61.0}/justfile +0 -0
  472. {kinemotion-0.60.1 → kinemotion-0.61.0}/local_dev.sh +0 -0
  473. {kinemotion-0.60.1 → kinemotion-0.61.0}/mkdocs.yml +0 -0
  474. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/.gitignore +0 -0
  475. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/README.md +0 -0
  476. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/demos/.gitignore +0 -0
  477. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/demos/README.md +0 -0
  478. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/demos/api_demo.ipynb +0 -0
  479. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/demos/batch_processing_demo.py +0 -0
  480. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/demos/sample_data/.gitkeep +0 -0
  481. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/presentation_guide.md +0 -0
  482. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/revealjs/.gitignore +0 -0
  483. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/revealjs/Makefile +0 -0
  484. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/revealjs/README.md +0 -0
  485. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/revealjs/slides.md +0 -0
  486. {kinemotion-0.60.1 → kinemotion-0.61.0}/presentation/speaker_script.md +0 -0
  487. {kinemotion-0.60.1 → kinemotion-0.61.0}/requirements-docs.txt +0 -0
  488. {kinemotion-0.60.1 → kinemotion-0.61.0}/samples/cmjs/README.md +0 -0
  489. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/README.md +0 -0
  490. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
  491. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/analyze_determinism_variance.py +0 -0
  492. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/basic-memory-utils.sh +0 -0
  493. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/debug_contact_states.py +0 -0
  494. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/debug_detection.py +0 -0
  495. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/find_unused_features.py +0 -0
  496. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/generate_test_data.py +0 -0
  497. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/optimize_detection_params.py +0 -0
  498. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/plot_cmj_velocities.py +0 -0
  499. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/plot_validation_results.py +0 -0
  500. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/plot_velocities.py +0 -0
  501. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/prepare_ground_truth.py +0 -0
  502. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/project/README.md +0 -0
  503. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/project/add-issue.sh +0 -0
  504. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/project/batch-set-fields.sh +0 -0
  505. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/project/helpers.sh +0 -0
  506. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/project/list.sh +0 -0
  507. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/project/set-field.sh +0 -0
  508. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/project/set-status.sh +0 -0
  509. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/project/summary.sh +0 -0
  510. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/project.sh +0 -0
  511. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/setup-github-deploy.sh +0 -0
  512. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/setup-google-oauth.sh +0 -0
  513. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/setup-supabase-local.sh +0 -0
  514. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/setup-supabase-production.sh +0 -0
  515. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/test_acceleration_standing.py +0 -0
  516. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/test_determinism.sh +0 -0
  517. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/test_drop_start_debug.py +0 -0
  518. {kinemotion-0.60.1 → kinemotion-0.61.0}/scripts/validate_known_heights.py +0 -0
  519. {kinemotion-0.60.1 → kinemotion-0.61.0}/sonar-project.properties +0 -0
  520. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/__init__.py +0 -0
  521. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/api.py +0 -0
  522. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/cli.py +0 -0
  523. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/cmj/__init__.py +0 -0
  524. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/cmj/analysis.py +0 -0
  525. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/cmj/api.py +0 -0
  526. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/cmj/cli.py +0 -0
  527. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
  528. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/cmj/joint_angles.py +0 -0
  529. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/cmj/kinematics.py +0 -0
  530. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
  531. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
  532. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/__init__.py +0 -0
  533. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/auto_tuning.py +0 -0
  534. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/cli_utils.py +0 -0
  535. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/debug_overlay_utils.py +0 -0
  536. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/determinism.py +0 -0
  537. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/experimental.py +0 -0
  538. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/filtering.py +0 -0
  539. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/formatting.py +0 -0
  540. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/metadata.py +0 -0
  541. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/pipeline_utils.py +0 -0
  542. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/pose.py +0 -0
  543. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/quality.py +0 -0
  544. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/smoothing.py +0 -0
  545. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/timing.py +0 -0
  546. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/validation.py +0 -0
  547. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/core/video_io.py +0 -0
  548. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/dropjump/__init__.py +0 -0
  549. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/dropjump/analysis.py +0 -0
  550. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/dropjump/api.py +0 -0
  551. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/dropjump/cli.py +0 -0
  552. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  553. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/dropjump/kinematics.py +0 -0
  554. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
  555. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
  556. {kinemotion-0.60.1 → kinemotion-0.61.0}/src/kinemotion/py.typed +0 -0
  557. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/__init__.py +0 -0
  558. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/cli/__init__.py +0 -0
  559. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/cli/test_cmj.py +0 -0
  560. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/cli/test_dropjump.py +0 -0
  561. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/cli/test_imports.py +0 -0
  562. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/cmj/__init__.py +0 -0
  563. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/cmj/test_analysis.py +0 -0
  564. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/cmj/test_api.py +0 -0
  565. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/cmj/test_cli.py +0 -0
  566. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/cmj/test_joint_angles.py +0 -0
  567. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/cmj/test_kinematics.py +0 -0
  568. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/cmj/test_physiological_bounds.py +0 -0
  569. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/conftest.py +0 -0
  570. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/__init__.py +0 -0
  571. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_auto_tuning.py +0 -0
  572. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_cli_utils.py +0 -0
  573. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_filtering.py +0 -0
  574. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_formatting.py +0 -0
  575. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_metadata.py +0 -0
  576. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_pipeline_utils.py +0 -0
  577. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_pose.py +0 -0
  578. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_quality.py +0 -0
  579. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_smoothing.py +0 -0
  580. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_timing.py +0 -0
  581. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_validation.py +0 -0
  582. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/core/test_video_io.py +0 -0
  583. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/dropjump/__init__.py +0 -0
  584. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
  585. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/dropjump/test_analysis.py +0 -0
  586. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/dropjump/test_api.py +0 -0
  587. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/dropjump/test_cli.py +0 -0
  588. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/dropjump/test_contact_detection.py +0 -0
  589. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/dropjump/test_kinematics.py +0 -0
  590. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/dropjump/test_physiological_bounds.py +0 -0
  591. {kinemotion-0.60.1 → kinemotion-0.61.0}/tests/dropjump/test_validation_integration.py +0 -0
@@ -134,7 +134,7 @@ jobs:
134
134
  --allow-unauthenticated
135
135
  --service-account=kinemotion-backend-runtime@${{ env.GCP_PROJECT_ID }}.iam.gserviceaccount.com
136
136
  --set-env-vars=CORS_ORIGINS=https://kinemotion.vercel.app,JSON_LOGS=true,LOG_LEVEL=INFO
137
- --set-secrets=SUPABASE_URL=SUPABASE_URL:latest,SUPABASE_ANON_KEY=SUPABASE_ANON_KEY:latest,R2_ENDPOINT=R2_ENDPOINT:latest,R2_ACCESS_KEY=R2_ACCESS_KEY:latest,R2_SECRET_KEY=R2_SECRET_KEY:latest,R2_BUCKET_NAME=R2_BUCKET_NAME:latest
137
+ --set-secrets=SUPABASE_URL=SUPABASE_URL:latest,SUPABASE_PUBLISHABLE_KEY=SUPABASE_PUBLISHABLE_KEY:latest,SUPABASE_SECRET_KEY=SUPABASE_SECRET_KEY:latest,R2_ENDPOINT=R2_ENDPOINT:latest,R2_ACCESS_KEY=R2_ACCESS_KEY:latest,R2_SECRET_KEY=R2_SECRET_KEY:latest,R2_BUCKET_NAME=R2_BUCKET_NAME:latest
138
138
 
139
139
  - name: Verify deployment health
140
140
  run: |
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!-- version list -->
9
9
 
10
+ ## kinemotion-v0.61.0 (2025-12-15)
11
+
12
+ ### Feat
13
+
14
+ - update Supabase integration to use modern API keys
15
+ - update frontend to use modern Supabase publishable key
16
+
10
17
  ## kinemotion-v0.60.1 (2025-12-15)
11
18
 
12
19
  ### Fix
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.60.1
3
+ Version: 0.61.0
4
4
  Summary: Video-based kinematic analysis for athletic performance
5
5
  Project-URL: Homepage, https://github.com/feniix/kinemotion
6
6
  Project-URL: Repository, https://github.com/feniix/kinemotion
@@ -15,13 +15,24 @@ class DatabaseClient:
15
15
  def __init__(self) -> None:
16
16
  """Initialize Supabase client."""
17
17
  self.supabase_url = os.getenv("SUPABASE_URL", "")
18
- self.supabase_key = os.getenv("SUPABASE_ANON_KEY", "")
18
+
19
+ # Prefer modern keys, fall back to legacy for compatibility
20
+ self.supabase_key = (
21
+ os.getenv("SUPABASE_PUBLISHABLE_KEY")
22
+ or os.getenv("SUPABASE_SECRET_KEY")
23
+ or os.getenv("SUPABASE_ANON_KEY")
24
+ or os.getenv("SUPABASE_KEY")
25
+ )
19
26
 
20
27
  if not self.supabase_url:
21
28
  raise ValueError("SUPABASE_URL must be set")
22
29
 
23
30
  if not self.supabase_key:
24
- raise ValueError("SUPABASE_ANON_KEY must be set")
31
+ raise ValueError(
32
+ "No Supabase API key found. Set one of: "
33
+ "SUPABASE_PUBLISHABLE_KEY, SUPABASE_SECRET_KEY, "
34
+ "SUPABASE_ANON_KEY, or SUPABASE_KEY"
35
+ )
25
36
 
26
37
  self.client: Client = create_client(self.supabase_url, self.supabase_key)
27
38
  logger.info("database_client_initialized", supabase_url=self.supabase_url)
@@ -2,6 +2,7 @@
2
2
 
3
3
  import os
4
4
  from datetime import datetime, timezone
5
+ from importlib.metadata import version
5
6
 
6
7
  import structlog
7
8
  from fastapi import APIRouter
@@ -22,11 +23,31 @@ async def health_check() -> dict[str, str | bool]:
22
23
  os.getenv("R2_ENDPOINT") and os.getenv("R2_ACCESS_KEY") and os.getenv("R2_SECRET_KEY")
23
24
  )
24
25
 
26
+ # Get kinemotion version safely
27
+ try:
28
+ kinemotion_version = version("kinemotion")
29
+ except Exception:
30
+ kinemotion_version = "unknown"
31
+
32
+ # Check database connection
33
+ database_connected = False
34
+ try:
35
+ from kinemotion_backend.database import get_database_client
36
+
37
+ db_client = get_database_client()
38
+ # Test database with a simple query
39
+ db_client.client.table("analysis_sessions").select("id").limit(1).execute()
40
+ database_connected = True
41
+ except Exception as db_error:
42
+ logger.warning("database_health_check_failed", error=str(db_error))
43
+
25
44
  return {
26
45
  "status": "healthy",
27
46
  "service": "kinemotion-backend",
28
47
  "version": "0.1.0",
29
48
  "environment": os.getenv("ENVIRONMENT", "development"),
49
+ "kinemotion_version": kinemotion_version,
30
50
  "timestamp": datetime.now(timezone.utc).isoformat(),
31
51
  "r2_configured": r2_configured,
52
+ "database_connected": database_connected,
32
53
  }
@@ -0,0 +1,70 @@
1
+
2
+ -- Enable required extensions
3
+ CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
4
+
5
+ -- Analysis Sessions Table
6
+ CREATE TABLE IF NOT EXISTS analysis_sessions (
7
+ id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
8
+ user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
9
+ jump_type VARCHAR(50) NOT NULL CHECK (jump_type IN ('cmj', 'drop_jump')),
10
+ quality_preset VARCHAR(20) NOT NULL CHECK (quality_preset IN ('fast', 'balanced', 'accurate')),
11
+ original_video_url TEXT,
12
+ debug_video_url TEXT,
13
+ results_json_url TEXT,
14
+ analysis_data JSONB NOT NULL,
15
+ processing_time_s FLOAT,
16
+ upload_id VARCHAR(50),
17
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
18
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
19
+ );
20
+
21
+ -- Coach Feedback Table
22
+ CREATE TABLE IF NOT EXISTS coach_feedback (
23
+ id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
24
+ analysis_session_id UUID NOT NULL REFERENCES analysis_sessions(id) ON DELETE CASCADE,
25
+ coach_user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
26
+ notes TEXT,
27
+ rating INTEGER CHECK (rating >= 1 AND rating <= 5),
28
+ tags TEXT[] DEFAULT '{}',
29
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
30
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
31
+ );
32
+
33
+ -- Create indexes for performance
34
+ CREATE INDEX IF NOT EXISTS idx_analysis_sessions_user_id ON analysis_sessions(user_id);
35
+ CREATE INDEX IF NOT EXISTS idx_analysis_sessions_created_at ON analysis_sessions(created_at DESC);
36
+ CREATE INDEX IF NOT EXISTS idx_coach_feedback_analysis_session_id ON coach_feedback(analysis_session_id);
37
+ CREATE INDEX IF NOT EXISTS idx_coach_feedback_coach_user_id ON coach_feedback(coach_user_id);
38
+
39
+ -- Enable Row Level Security
40
+ ALTER TABLE analysis_sessions ENABLE ROW LEVEL SECURITY;
41
+ ALTER TABLE coach_feedback ENABLE ROW LEVEL SECURITY;
42
+
43
+ -- RLS Policy: Users can only see their own analysis sessions
44
+ CREATE POLICY "users_can_read_own_sessions" ON analysis_sessions
45
+ FOR SELECT
46
+ USING (auth.uid() = user_id);
47
+
48
+ CREATE POLICY "users_can_create_own_sessions" ON analysis_sessions
49
+ FOR INSERT
50
+ WITH CHECK (auth.uid() = user_id);
51
+
52
+ -- RLS Policy: Coaches can read feedback for their own analyses or sessions they're coaching
53
+ CREATE POLICY "coaches_can_read_feedback" ON coach_feedback
54
+ FOR SELECT
55
+ USING (
56
+ auth.uid() = coach_user_id OR
57
+ auth.uid() IN (
58
+ SELECT user_id FROM analysis_sessions
59
+ WHERE id = coach_feedback.analysis_session_id
60
+ )
61
+ );
62
+
63
+ CREATE POLICY "coaches_can_create_feedback" ON coach_feedback
64
+ FOR INSERT
65
+ WITH CHECK (auth.uid() = coach_user_id);
66
+
67
+ CREATE POLICY "coaches_can_update_own_feedback" ON coach_feedback
68
+ FOR UPDATE
69
+ USING (auth.uid() = coach_user_id)
70
+ WITH CHECK (auth.uid() = coach_user_id);
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Supabase client configuration for Kinemotion frontend
3
+ */
4
+
5
+ import { createClient } from '@supabase/supabase-js'
6
+
7
+ const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
8
+ // Prefer modern VITE_SUPABASE_PUBLISHABLE_KEY, fall back to legacy VITE_SUPABASE_ANON_KEY
9
+ const supabaseKey =
10
+ import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY ||
11
+ import.meta.env.VITE_SUPABASE_ANON_KEY
12
+
13
+ const isConfigured = supabaseUrl && supabaseKey
14
+
15
+ if (!isConfigured) {
16
+ console.warn(
17
+ 'Missing Supabase environment variables (VITE_SUPABASE_URL, VITE_SUPABASE_PUBLISHABLE_KEY). Authentication will be mocked.'
18
+ )
19
+ }
20
+
21
+ export const supabase = isConfigured
22
+ ? createClient(supabaseUrl, supabaseKey)
23
+ : null
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion"
3
- version = "0.60.1"
3
+ version = "0.61.0"
4
4
  description = "Video-based kinematic analysis for athletic performance"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -20,17 +20,25 @@ if [ -z "$SUPABASE_URL" ]; then
20
20
  echo -e "${RED}❌ Error: SUPABASE_URL is not set${NC}"
21
21
  echo "Please run setup-supabase-local.sh first or set environment variables:"
22
22
  echo " export SUPABASE_URL='https://your-project.supabase.co'"
23
- echo " export SUPABASE_KEY='sb_anon_your-key'"
23
+ echo " export SUPABASE_PUBLISHABLE_KEY='sb_publishable_...'"
24
24
  exit 1
25
25
  fi
26
26
 
27
- if [ -z "$SUPABASE_KEY" ] && [ -z "$SUPABASE_ANON_KEY" ]; then
28
- echo -e "${RED}❌ Error: SUPABASE_KEY or SUPABASE_ANON_KEY is not set${NC}"
27
+ # Prefer modern keys, fall back to legacy for compatibility
28
+ if [ -z "$SUPABASE_PUBLISHABLE_KEY" ] && [ -z "$SUPABASE_SECRET_KEY" ] && \
29
+ [ -z "$SUPABASE_KEY" ] && [ -z "$SUPABASE_ANON_KEY" ]; then
30
+ echo -e "${RED}❌ Error: No Supabase API key found${NC}"
31
+ echo ""
32
+ echo "Recommended (modern): export SUPABASE_PUBLISHABLE_KEY='sb_publishable_...'"
33
+ echo "Or for admin operations: export SUPABASE_SECRET_KEY='sb_secret_...'"
34
+ echo ""
35
+ echo "Legacy (not recommended):"
36
+ echo " export SUPABASE_KEY='...' or SUPABASE_ANON_KEY='...'"
29
37
  exit 1
30
38
  fi
31
39
 
32
- # Use SUPABASE_KEY if set, otherwise use SUPABASE_ANON_KEY
33
- API_KEY="${SUPABASE_KEY:-$SUPABASE_ANON_KEY}"
40
+ # Use SUPABASE_PUBLISHABLE_KEY if set, otherwise fall back to legacy keys
41
+ API_KEY="${SUPABASE_PUBLISHABLE_KEY:-${SUPABASE_SECRET_KEY:-${SUPABASE_KEY:-$SUPABASE_ANON_KEY}}}"
34
42
 
35
43
  echo -e "${BLUE}Project URL:${NC} $SUPABASE_URL"
36
44
  echo ""
@@ -98,16 +106,16 @@ ALTER TABLE analysis_sessions ENABLE ROW LEVEL SECURITY;
98
106
  ALTER TABLE coach_feedback ENABLE ROW LEVEL SECURITY;
99
107
 
100
108
  -- RLS Policy: Users can only see their own analysis sessions
101
- CREATE POLICY IF NOT EXISTS "users_can_read_own_sessions" ON analysis_sessions
109
+ CREATE POLICY "users_can_read_own_sessions" ON analysis_sessions
102
110
  FOR SELECT
103
111
  USING (auth.uid() = user_id);
104
112
 
105
- CREATE POLICY IF NOT EXISTS "users_can_create_own_sessions" ON analysis_sessions
113
+ CREATE POLICY "users_can_create_own_sessions" ON analysis_sessions
106
114
  FOR INSERT
107
115
  WITH CHECK (auth.uid() = user_id);
108
116
 
109
117
  -- RLS Policy: Coaches can read feedback for their own analyses or sessions they'"'"'re coaching
110
- CREATE POLICY IF NOT EXISTS "coaches_can_read_feedback" ON coach_feedback
118
+ CREATE POLICY "coaches_can_read_feedback" ON coach_feedback
111
119
  FOR SELECT
112
120
  USING (
113
121
  auth.uid() = coach_user_id OR
@@ -117,11 +125,11 @@ CREATE POLICY IF NOT EXISTS "coaches_can_read_feedback" ON coach_feedback
117
125
  )
118
126
  );
119
127
 
120
- CREATE POLICY IF NOT EXISTS "coaches_can_create_feedback" ON coach_feedback
128
+ CREATE POLICY "coaches_can_create_feedback" ON coach_feedback
121
129
  FOR INSERT
122
130
  WITH CHECK (auth.uid() = coach_user_id);
123
131
 
124
- CREATE POLICY IF NOT EXISTS "coaches_can_update_own_feedback" ON coach_feedback
132
+ CREATE POLICY "coaches_can_update_own_feedback" ON coach_feedback
125
133
  FOR UPDATE
126
134
  USING (auth.uid() = coach_user_id)
127
135
  WITH CHECK (auth.uid() = coach_user_id);
@@ -181,7 +189,7 @@ echo -e "${YELLOW}⚠️ Environment Variables${NC}"
181
189
  echo ""
182
190
  echo "Your current setup:"
183
191
  echo " SUPABASE_URL: $SUPABASE_URL"
184
- echo " SUPABASE_KEY: ${API_KEY:0:20}... (hidden)"
192
+ echo " API_KEY: ${API_KEY:0:20}... (hidden)"
185
193
  echo ""
186
194
 
187
195
  echo -e "${BLUE}═══════════════════════════════════════════════════════${NC}"
@@ -200,11 +208,11 @@ if [ -f "backend/.env" ]; then
200
208
  echo "Please add it manually or run setup-supabase-local.sh"
201
209
  fi
202
210
 
203
- if grep -q "SUPABASE_KEY=" backend/.env || grep -q "SUPABASE_ANON_KEY=" backend/.env; then
204
- echo "✅ SUPABASE_KEY (or SUPABASE_ANON_KEY) configured in backend/.env"
211
+ if grep -q "SUPABASE_PUBLISHABLE_KEY=" backend/.env || grep -q "SUPABASE_SECRET_KEY=" backend/.env || grep -q "SUPABASE_KEY=" backend/.env || grep -q "SUPABASE_ANON_KEY=" backend/.env; then
212
+ echo "✅ Supabase API key configured in backend/.env"
205
213
  else
206
- echo -e "${YELLOW}⚠️ SUPABASE_KEY not found in backend/.env${NC}"
207
- echo "Please add it manually or run setup-supabase-local.sh"
214
+ echo -e "${YELLOW}⚠️ No Supabase API key found in backend/.env${NC}"
215
+ echo "Please add SUPABASE_PUBLISHABLE_KEY or SUPABASE_SECRET_KEY manually or run setup-supabase-local.sh"
208
216
  fi
209
217
  else
210
218
  echo -e "${YELLOW}⚠️ backend/.env not found${NC}"
@@ -3,16 +3,17 @@
3
3
  Supabase database schema setup script for Kinemotion.
4
4
 
5
5
  This script automates the creation of database tables and Row Level Security (RLS) policies.
6
- It requires SUPABASE_URL and SUPABASE_KEY (or SUPABASE_ANON_KEY) to be set.
6
+ It requires SUPABASE_URL and SUPABASE_PUBLISHABLE_KEY to be set.
7
7
 
8
8
  Usage:
9
9
  python scripts/setup_supabase_db.py
10
10
 
11
11
  Environment variables:
12
12
  SUPABASE_URL: Your Supabase project URL (e.g., https://project.supabase.co)
13
- SUPABASE_KEY: Your Supabase API key (anon or service role)
14
- SUPABASE_ANON_KEY: Alternative name for SUPABASE_KEY
15
- SUPABASE_SERVICE_ROLE_KEY: Service role key for admin operations
13
+ SUPABASE_PUBLISHABLE_KEY: Your Supabase publishable key (format: sb_publishable_...)
14
+ SUPABASE_SECRET_KEY: Your Supabase secret key for admin operations (format: sb_secret_...)
15
+
16
+ Note: Modern API keys (publishable/secret) are recommended over legacy anon/service_role keys.
16
17
  """
17
18
 
18
19
  import os
@@ -80,11 +81,18 @@ def validate_credentials() -> tuple[str, str]:
80
81
  print("Set it with: export SUPABASE_URL='https://your-project.supabase.co'")
81
82
  sys.exit(1)
82
83
 
83
- # Try SUPABASE_KEY first, then SUPABASE_ANON_KEY
84
- key = os.getenv("SUPABASE_KEY") or os.getenv("SUPABASE_ANON_KEY")
84
+ # Prefer SUPABASE_PUBLISHABLE_KEY, fall back to legacy keys for compatibility
85
+ key = (os.getenv("SUPABASE_PUBLISHABLE_KEY") or
86
+ os.getenv("SUPABASE_SECRET_KEY") or
87
+ os.getenv("SUPABASE_KEY") or
88
+ os.getenv("SUPABASE_ANON_KEY"))
89
+
85
90
  if not key:
86
- print_error("SUPABASE_KEY or SUPABASE_ANON_KEY not found")
87
- print("Set it with: export SUPABASE_KEY='sb_anon_your-key'")
91
+ print_error("No Supabase API key found")
92
+ print("\nRecommended (modern): export SUPABASE_PUBLISHABLE_KEY='sb_publishable_...'")
93
+ print("Or for admin operations: export SUPABASE_SECRET_KEY='sb_secret_...'")
94
+ print("\nLegacy (not recommended):")
95
+ print(" export SUPABASE_KEY='...' or SUPABASE_ANON_KEY='...'")
88
96
  sys.exit(1)
89
97
 
90
98
  return url, key
@@ -159,16 +167,16 @@ ALTER TABLE analysis_sessions ENABLE ROW LEVEL SECURITY;
159
167
  ALTER TABLE coach_feedback ENABLE ROW LEVEL SECURITY;
160
168
 
161
169
  -- RLS Policy: Users can only see their own analysis sessions
162
- CREATE POLICY IF NOT EXISTS "users_can_read_own_sessions" ON analysis_sessions
170
+ CREATE POLICY "users_can_read_own_sessions" ON analysis_sessions
163
171
  FOR SELECT
164
172
  USING (auth.uid() = user_id);
165
173
 
166
- CREATE POLICY IF NOT EXISTS "users_can_create_own_sessions" ON analysis_sessions
174
+ CREATE POLICY "users_can_create_own_sessions" ON analysis_sessions
167
175
  FOR INSERT
168
176
  WITH CHECK (auth.uid() = user_id);
169
177
 
170
178
  -- RLS Policy: Coaches can read feedback for their own analyses or sessions they're coaching
171
- CREATE POLICY IF NOT EXISTS "coaches_can_read_feedback" ON coach_feedback
179
+ CREATE POLICY "coaches_can_read_feedback" ON coach_feedback
172
180
  FOR SELECT
173
181
  USING (
174
182
  auth.uid() = coach_user_id OR
@@ -178,11 +186,11 @@ CREATE POLICY IF NOT EXISTS "coaches_can_read_feedback" ON coach_feedback
178
186
  )
179
187
  );
180
188
 
181
- CREATE POLICY IF NOT EXISTS "coaches_can_create_feedback" ON coach_feedback
189
+ CREATE POLICY "coaches_can_create_feedback" ON coach_feedback
182
190
  FOR INSERT
183
191
  WITH CHECK (auth.uid() = coach_user_id);
184
192
 
185
- CREATE POLICY IF NOT EXISTS "coaches_can_update_own_feedback" ON coach_feedback
193
+ CREATE POLICY "coaches_can_update_own_feedback" ON coach_feedback
186
194
  FOR UPDATE
187
195
  USING (auth.uid() = coach_user_id)
188
196
  WITH CHECK (auth.uid() = coach_user_id);
@@ -882,7 +882,7 @@ wheels = [
882
882
 
883
883
  [[package]]
884
884
  name = "kinemotion"
885
- version = "0.60.0"
885
+ version = "0.60.1"
886
886
  source = { editable = "." }
887
887
  dependencies = [
888
888
  { name = "click" },
@@ -1,148 +0,0 @@
1
- -- Supabase Database Schema for Kinemotion Analysis Sessions
2
- --
3
- -- Run this SQL in your Supabase SQL Editor to create the required tables
4
-
5
- -- Enable UUID extension if not already enabled
6
- CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
7
-
8
- -- Analysis Sessions Table
9
- CREATE TABLE IF NOT EXISTS analysis_sessions (
10
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
11
- user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
12
- jump_type VARCHAR(50) NOT NULL CHECK (jump_type IN ('cmj', 'drop_jump')),
13
- quality_preset VARCHAR(20) NOT NULL CHECK (quality_preset IN ('fast', 'balanced', 'accurate')),
14
-
15
- -- R2 Storage references
16
- original_video_url TEXT,
17
- debug_video_url TEXT,
18
- results_json_url TEXT,
19
-
20
- -- Analysis results stored as JSONB for flexible querying
21
- analysis_data JSONB NOT NULL,
22
-
23
- -- Processing metadata
24
- processing_time_s FLOAT,
25
- upload_id VARCHAR(50),
26
-
27
- -- Timestamps
28
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
29
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
30
- );
31
-
32
- -- Coach Feedback Table
33
- CREATE TABLE IF NOT EXISTS coach_feedback (
34
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
35
- analysis_session_id UUID NOT NULL REFERENCES analysis_sessions(id) ON DELETE CASCADE,
36
- coach_user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
37
-
38
- -- Feedback content
39
- notes TEXT,
40
- rating INTEGER CHECK (rating >= 1 AND rating <= 5),
41
- tags TEXT[] DEFAULT '{}',
42
-
43
- -- Timestamps
44
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
45
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
46
- );
47
-
48
- -- Create updated_at trigger function
49
- CREATE OR REPLACE FUNCTION update_updated_at_column()
50
- RETURNS TRIGGER AS $$
51
- BEGIN
52
- NEW.updated_at = NOW();
53
- RETURN NEW;
54
- END;
55
- $$ language 'plpgsql';
56
-
57
- -- Create triggers for updated_at
58
- CREATE TRIGGER update_analysis_sessions_updated_at
59
- BEFORE UPDATE ON analysis_sessions
60
- FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
61
-
62
- CREATE TRIGGER update_coach_feedback_updated_at
63
- BEFORE UPDATE ON coach_feedback
64
- FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
65
-
66
- -- Indexes for performance
67
- CREATE INDEX IF NOT EXISTS idx_analysis_sessions_user_id ON analysis_sessions(user_id);
68
- CREATE INDEX IF NOT EXISTS idx_analysis_sessions_jump_type ON analysis_sessions(jump_type);
69
- CREATE INDEX IF NOT EXISTS idx_analysis_sessions_created_at ON analysis_sessions(created_at DESC);
70
- CREATE INDEX IF NOT EXISTS idx_analysis_sessions_upload_id ON analysis_sessions(upload_id);
71
-
72
- -- JSONB GIN index for flexible querying of analysis data
73
- CREATE INDEX IF NOT EXISTS idx_analysis_sessions_analysis_data ON analysis_sessions USING GIN(analysis_data);
74
-
75
- -- Indexes for coach feedback
76
- CREATE INDEX IF NOT EXISTS idx_coach_feedback_session_id ON coach_feedback(analysis_session_id);
77
- CREATE INDEX IF NOT EXISTS idx_coach_feedback_coach_id ON coach_feedback(coach_user_id);
78
- CREATE INDEX IF NOT EXISTS idx_coach_feedback_created_at ON coach_feedback(created_at DESC);
79
-
80
- -- Row Level Security (RLS)
81
-
82
- -- Enable RLS on both tables
83
- ALTER TABLE analysis_sessions ENABLE ROW LEVEL SECURITY;
84
- ALTER TABLE coach_feedback ENABLE ROW LEVEL SECURITY;
85
-
86
- -- RLS Policies for analysis_sessions
87
- -- Users can read their own analysis sessions
88
- CREATE POLICY "Users can view own analysis sessions" ON analysis_sessions
89
- FOR SELECT USING (auth.uid() = user_id);
90
-
91
- -- Users can insert their own analysis sessions
92
- CREATE POLICY "Users can insert own analysis sessions" ON analysis_sessions
93
- FOR INSERT WITH CHECK (auth.uid() = user_id);
94
-
95
- -- Users can update their own analysis sessions
96
- CREATE POLICY "Users can update own analysis sessions" ON analysis_sessions
97
- FOR UPDATE USING (auth.uid() = user_id);
98
-
99
- -- Users can delete their own analysis sessions
100
- CREATE POLICY "Users can delete own analysis sessions" ON analysis_sessions
101
- FOR DELETE USING (auth.uid() = user_id);
102
-
103
- -- RLS Policies for coach_feedback
104
- -- All authenticated users can view feedback (for collaboration)
105
- CREATE POLICY "Authenticated users can view feedback" ON coach_feedback
106
- FOR SELECT USING (auth.role() = 'authenticated');
107
-
108
- -- All authenticated users can insert feedback
109
- CREATE POLICY "Authenticated users can create feedback" ON coach_feedback
110
- FOR INSERT WITH CHECK (auth.role() = 'authenticated');
111
-
112
- -- Users can update their own feedback
113
- CREATE POLICY "Users can update own feedback" ON coach_feedback
114
- FOR UPDATE USING (auth.uid() = coach_user_id);
115
-
116
- -- Users can delete their own feedback
117
- CREATE POLICY "Users can delete own feedback" ON coach_feedback
118
- FOR DELETE USING (auth.uid() = coach_user_id);
119
-
120
- -- Grant permissions
121
- GRANT ALL ON analysis_sessions TO authenticated;
122
- GRANT ALL ON coach_feedback TO authenticated;
123
- GRANT ALL ON analysis_sessions TO service_role;
124
- GRANT ALL ON coach_feedback TO service_role;
125
-
126
- -- Optional: Create a view for common queries
127
- CREATE OR REPLACE VIEW analysis_sessions_with_feedback AS
128
- SELECT
129
- a.*,
130
- COALESCE(
131
- json_agg(
132
- json_build_object(
133
- 'id', f.id,
134
- 'coach_user_id', f.coach_user_id,
135
- 'notes', f.notes,
136
- 'rating', f.rating,
137
- 'tags', f.tags,
138
- 'created_at', f.created_at
139
- ) ORDER BY f.created_at DESC
140
- ) FILTER (WHERE f.id IS NOT NULL),
141
- '[]'::json
142
- ) as feedback
143
- FROM analysis_sessions a
144
- LEFT JOIN coach_feedback f ON a.id = f.analysis_session_id
145
- GROUP BY a.id, a.user_id, a.jump_type, a.quality_preset,
146
- a.original_video_url, a.debug_video_url, a.results_json_url,
147
- a.analysis_data, a.processing_time_s, a.upload_id,
148
- a.created_at, a.updated_at;
@@ -1,20 +0,0 @@
1
- /**
2
- * Supabase client configuration for Kinemotion frontend
3
- */
4
-
5
- import { createClient } from '@supabase/supabase-js'
6
-
7
- const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
8
- const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY
9
-
10
- const isConfigured = supabaseUrl && supabaseAnonKey
11
-
12
- if (!isConfigured) {
13
- console.warn(
14
- 'Missing Supabase environment variables (VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY). Authentication will be mocked.'
15
- )
16
- }
17
-
18
- export const supabase = isConfigured
19
- ? createClient(supabaseUrl, supabaseAnonKey)
20
- : null