kinemotion 0.32.2__tar.gz → 0.33.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 (401) hide show
  1. kinemotion-0.33.0/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +267 -0
  2. kinemotion-0.33.0/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +350 -0
  3. kinemotion-0.33.0/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +397 -0
  4. kinemotion-0.33.0/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +342 -0
  5. kinemotion-0.33.0/.basic-memory/development/backend-code-coverage-analysis.md +121 -0
  6. kinemotion-0.33.0/.basic-memory/development/backend-code-duplication-analysis.md +161 -0
  7. kinemotion-0.33.0/.basic-memory/development/backend-sonar-cloud-integration-status.md +149 -0
  8. kinemotion-0.32.2/.github/workflows/deploy.yml → kinemotion-0.33.0/.github/workflows/deploy-backend.yml +28 -17
  9. kinemotion-0.33.0/.serena/memories/backend-cors-fastapi-middleware-order.md +122 -0
  10. {kinemotion-0.32.2 → kinemotion-0.33.0}/CHANGELOG.md +45 -0
  11. {kinemotion-0.32.2 → kinemotion-0.33.0}/PKG-INFO +1 -1
  12. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/src/kinemotion_backend/app.py +114 -43
  13. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/tests/test_validation.py +2 -1
  14. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/hooks/useAnalysis.ts +1 -5
  15. {kinemotion-0.32.2 → kinemotion-0.33.0}/pyproject.toml +1 -1
  16. kinemotion-0.33.0/scripts/setup-github-deploy.sh +136 -0
  17. {kinemotion-0.32.2 → kinemotion-0.33.0}/sonar-project.properties +1 -0
  18. {kinemotion-0.32.2 → kinemotion-0.33.0}/uv.lock +1 -1
  19. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/README.md +0 -0
  20. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  21. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  22. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  23. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  24. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  25. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  26. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  27. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  28. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  29. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  30. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  31. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  32. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  33. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  34. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  35. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  36. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  37. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
  38. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/development/hook-quick-reference.md +0 -0
  39. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  40. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  41. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  42. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  43. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  44. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  45. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  46. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  47. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  48. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  49. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  50. {kinemotion-0.32.2 → kinemotion-0.33.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  51. {kinemotion-0.32.2 → kinemotion-0.33.0}/.claude/agents/biomechanics-specialist.md +0 -0
  52. {kinemotion-0.32.2 → kinemotion-0.33.0}/.claude/agents/computer-vision-engineer.md +0 -0
  53. {kinemotion-0.32.2 → kinemotion-0.33.0}/.claude/agents/devops-cicd-engineer.md +0 -0
  54. {kinemotion-0.32.2 → kinemotion-0.33.0}/.claude/agents/frontend-developer.md +0 -0
  55. {kinemotion-0.32.2 → kinemotion-0.33.0}/.claude/agents/ml-data-scientist.md +0 -0
  56. {kinemotion-0.32.2 → kinemotion-0.33.0}/.claude/agents/project-manager.md +0 -0
  57. {kinemotion-0.32.2 → kinemotion-0.33.0}/.claude/agents/python-backend-developer.md +0 -0
  58. {kinemotion-0.32.2 → kinemotion-0.33.0}/.claude/agents/qa-test-engineer.md +0 -0
  59. {kinemotion-0.32.2 → kinemotion-0.33.0}/.claude/agents/technical-writer.md +0 -0
  60. {kinemotion-0.32.2 → kinemotion-0.33.0}/.claude/hooks/fix-basic-memory-names.sh +0 -0
  61. {kinemotion-0.32.2 → kinemotion-0.33.0}/.claude/settings.local.json +0 -0
  62. {kinemotion-0.32.2 → kinemotion-0.33.0}/.cursor/mcp.json +0 -0
  63. {kinemotion-0.32.2 → kinemotion-0.33.0}/.dockerignore +0 -0
  64. {kinemotion-0.32.2 → kinemotion-0.33.0}/.gitattributes +0 -0
  65. {kinemotion-0.32.2 → kinemotion-0.33.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  66. {kinemotion-0.32.2 → kinemotion-0.33.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  67. {kinemotion-0.32.2 → kinemotion-0.33.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  68. {kinemotion-0.32.2 → kinemotion-0.33.0}/.github/dependabot.yml +0 -0
  69. {kinemotion-0.32.2 → kinemotion-0.33.0}/.github/pull_request_template.md +0 -0
  70. {kinemotion-0.32.2 → kinemotion-0.33.0}/.github/workflows/docs.yml +0 -0
  71. {kinemotion-0.32.2 → kinemotion-0.33.0}/.github/workflows/release.yml +0 -0
  72. {kinemotion-0.32.2 → kinemotion-0.33.0}/.github/workflows/security.yml +0 -0
  73. {kinemotion-0.32.2 → kinemotion-0.33.0}/.github/workflows/test.yml +0 -0
  74. {kinemotion-0.32.2 → kinemotion-0.33.0}/.gitignore +0 -0
  75. {kinemotion-0.32.2 → kinemotion-0.33.0}/.mcp.json +0 -0
  76. {kinemotion-0.32.2 → kinemotion-0.33.0}/.pre-commit-config.yaml +0 -0
  77. {kinemotion-0.32.2 → kinemotion-0.33.0}/.readthedocs.yml +0 -0
  78. {kinemotion-0.32.2 → kinemotion-0.33.0}/.serena/.gitignore +0 -0
  79. {kinemotion-0.32.2 → kinemotion-0.33.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
  80. {kinemotion-0.32.2 → kinemotion-0.33.0}/.serena/memories/code_style_and_conventions.md +0 -0
  81. {kinemotion-0.32.2 → kinemotion-0.33.0}/.serena/memories/github-project-setup-summary.md +0 -0
  82. {kinemotion-0.32.2 → kinemotion-0.33.0}/.serena/memories/mvp-first-strategy.md +0 -0
  83. {kinemotion-0.32.2 → kinemotion-0.33.0}/.serena/memories/project_overview.md +0 -0
  84. {kinemotion-0.32.2 → kinemotion-0.33.0}/.serena/memories/specialist-agents-routing.md +0 -0
  85. {kinemotion-0.32.2 → kinemotion-0.33.0}/.serena/memories/suggested_commands.md +0 -0
  86. {kinemotion-0.32.2 → kinemotion-0.33.0}/.serena/project.yml +0 -0
  87. {kinemotion-0.32.2 → kinemotion-0.33.0}/.tool-versions +0 -0
  88. {kinemotion-0.32.2 → kinemotion-0.33.0}/.vercelignore +0 -0
  89. {kinemotion-0.32.2 → kinemotion-0.33.0}/CLAUDE.md +0 -0
  90. {kinemotion-0.32.2 → kinemotion-0.33.0}/CODE_OF_CONDUCT.md +0 -0
  91. {kinemotion-0.32.2 → kinemotion-0.33.0}/CONTRIBUTING.md +0 -0
  92. {kinemotion-0.32.2 → kinemotion-0.33.0}/Dockerfile +0 -0
  93. {kinemotion-0.32.2 → kinemotion-0.33.0}/GEMINI.md +0 -0
  94. {kinemotion-0.32.2 → kinemotion-0.33.0}/LICENSE +0 -0
  95. {kinemotion-0.32.2 → kinemotion-0.33.0}/README.md +0 -0
  96. {kinemotion-0.32.2 → kinemotion-0.33.0}/SECURITY.md +0 -0
  97. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/.dockerignore +0 -0
  98. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/.env.example +0 -0
  99. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/Dockerfile +0 -0
  100. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/README.md +0 -0
  101. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/docs/fly-deployment.md +0 -0
  102. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/docs/implementation-summary.md +0 -0
  103. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/docs/setup.md +0 -0
  104. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/docs/tests.md +0 -0
  105. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/fly.toml +0 -0
  106. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/pyproject.toml +0 -0
  107. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/src/kinemotion_backend/__init__.py +0 -0
  108. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/tests/README.md +0 -0
  109. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/tests/__init__.py +0 -0
  110. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/tests/conftest.py +0 -0
  111. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/tests/test_api_endpoints.py +0 -0
  112. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/tests/test_error_handling.py +0 -0
  113. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/tests/test_health.py +0 -0
  114. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/tests/test_r2_integration.py +0 -0
  115. {kinemotion-0.32.2 → kinemotion-0.33.0}/backend/uv.lock +0 -0
  116. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/README.md +0 -0
  117. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/api/cmj.md +0 -0
  118. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/api/core.md +0 -0
  119. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/api/dropjump.md +0 -0
  120. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/api/overview.md +0 -0
  121. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/development/agents-guide.md +0 -0
  122. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/development/errors-findings.md +0 -0
  123. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/development/testing.md +0 -0
  124. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/development/type-hints.md +0 -0
  125. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/development/validation-plan.md +0 -0
  126. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/development/validation-roadmap.md +0 -0
  127. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/development/wallball-norep-detection.md +0 -0
  128. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/guides/bulk-processing.md +0 -0
  129. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/guides/camera-setup.md +0 -0
  130. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/guides/cloud-run-deployment.md +0 -0
  131. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/guides/cmj-guide.md +0 -0
  132. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
  133. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/guides/cmj-recording-protocol.md +0 -0
  134. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/guides/deployment-checklist.md +0 -0
  135. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/guides/local-testing.md +0 -0
  136. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/guides/setup-issue-12.md +0 -0
  137. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/index.md +0 -0
  138. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/quick-start.md +0 -0
  139. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/reference/cloud-run-quick-reference.md +0 -0
  140. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/reference/json-output-format.md +0 -0
  141. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/reference/json-structure-comparison.md +0 -0
  142. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/reference/parameters.md +0 -0
  143. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/reference/pose-systems.md +0 -0
  144. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  145. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/paper-downloader/README.md +0 -0
  146. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/paper-downloader/dois.txt +0 -0
  147. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/paper-downloader/download.py +0 -0
  148. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/paper-downloader/pyproject.toml +0 -0
  149. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/paper-downloader/uv.lock +0 -0
  150. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  151. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  152. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/README.md +0 -0
  153. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
  154. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  155. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  156. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  157. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  158. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  159. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  160. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  161. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  162. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  163. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  164. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  165. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  166. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  167. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  168. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  169. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  170. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  171. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  172. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  173. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  174. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  175. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  176. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  177. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  178. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  179. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  180. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  181. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  182. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  183. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  184. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  185. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  186. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  187. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  188. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  189. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  190. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  191. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  192. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  193. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  194. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  195. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  196. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  197. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  198. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  199. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  200. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  201. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  202. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  203. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  204. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  205. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  206. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  207. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  208. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  209. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  210. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  211. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  212. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  213. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  214. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  215. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  216. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  217. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  218. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  219. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  220. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  221. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  222. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  223. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  224. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  225. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  226. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  227. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  228. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  229. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  230. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  231. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  232. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  233. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  234. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  235. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  236. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  237. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  238. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  239. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  240. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  241. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/README.md +0 -0
  242. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/STYLE_GUIDE.md +0 -0
  243. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  244. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  245. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  246. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  247. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  248. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  249. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  250. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  251. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  252. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  253. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  254. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  255. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  256. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  257. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  258. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  259. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  260. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  261. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  262. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  263. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  264. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  265. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  266. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  267. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  268. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  269. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  270. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  271. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  272. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  273. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  274. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  275. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  276. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  277. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  278. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/technical/framerate.md +0 -0
  279. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/technical/implementation-details.md +0 -0
  280. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/technical/imu-metadata.md +0 -0
  281. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/technical/real-time-analysis.md +0 -0
  282. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/technical/triple-extension.md +0 -0
  283. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/translations/es/camera-setup.md +0 -0
  284. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/validation/determinism-test.md +0 -0
  285. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/validation/known-height-validation.md +0 -0
  286. {kinemotion-0.32.2 → kinemotion-0.33.0}/docs/validation-status.md +0 -0
  287. {kinemotion-0.32.2 → kinemotion-0.33.0}/examples/bulk/README.md +0 -0
  288. {kinemotion-0.32.2 → kinemotion-0.33.0}/examples/bulk/bulk_processing.py +0 -0
  289. {kinemotion-0.32.2 → kinemotion-0.33.0}/examples/bulk/simple_example.py +0 -0
  290. {kinemotion-0.32.2 → kinemotion-0.33.0}/examples/programmatic_usage.py +0 -0
  291. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/.editorconfig +0 -0
  292. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/.env.example +0 -0
  293. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/.gitattributes +0 -0
  294. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/.gitignore +0 -0
  295. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  296. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/.yarnrc.yml +0 -0
  297. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/README.md +0 -0
  298. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/index.html +0 -0
  299. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/package.json +0 -0
  300. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/App.tsx +0 -0
  301. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
  302. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
  303. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
  304. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/components/RecentUploads.tsx +0 -0
  305. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
  306. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  307. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/components/UploadForm.tsx +0 -0
  308. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
  309. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/index.css +0 -0
  310. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/main.tsx +0 -0
  311. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/types/api.ts +0 -0
  312. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/src/vite-env.d.ts +0 -0
  313. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/vercel.json +0 -0
  314. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/vite.config.ts +0 -0
  315. {kinemotion-0.32.2 → kinemotion-0.33.0}/frontend/yarn.lock +0 -0
  316. {kinemotion-0.32.2 → kinemotion-0.33.0}/justfile +0 -0
  317. {kinemotion-0.32.2 → kinemotion-0.33.0}/local_dev.sh +0 -0
  318. {kinemotion-0.32.2 → kinemotion-0.33.0}/mkdocs.yml +0 -0
  319. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/.gitignore +0 -0
  320. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/README.md +0 -0
  321. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/demos/.gitignore +0 -0
  322. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/demos/README.md +0 -0
  323. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/demos/api_demo.ipynb +0 -0
  324. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/demos/batch_processing_demo.py +0 -0
  325. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/demos/sample_data/.gitkeep +0 -0
  326. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/presentation_guide.md +0 -0
  327. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/revealjs/.gitignore +0 -0
  328. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/revealjs/Makefile +0 -0
  329. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/revealjs/README.md +0 -0
  330. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/revealjs/slides.md +0 -0
  331. {kinemotion-0.32.2 → kinemotion-0.33.0}/presentation/speaker_script.md +0 -0
  332. {kinemotion-0.32.2 → kinemotion-0.33.0}/requirements-docs.txt +0 -0
  333. {kinemotion-0.32.2 → kinemotion-0.33.0}/samples/cmjs/README.md +0 -0
  334. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/README.md +0 -0
  335. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
  336. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/analyze_determinism_variance.py +0 -0
  337. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/basic-memory-utils.sh +0 -0
  338. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/generate_test_data.py +0 -0
  339. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/plot_validation_results.py +0 -0
  340. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/project/README.md +0 -0
  341. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/project/add-issue.sh +0 -0
  342. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/project/batch-set-fields.sh +0 -0
  343. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/project/helpers.sh +0 -0
  344. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/project/list.sh +0 -0
  345. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/project/set-field.sh +0 -0
  346. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/project/set-status.sh +0 -0
  347. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/project/summary.sh +0 -0
  348. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/project.sh +0 -0
  349. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/test_determinism.sh +0 -0
  350. {kinemotion-0.32.2 → kinemotion-0.33.0}/scripts/validate_known_heights.py +0 -0
  351. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/__init__.py +0 -0
  352. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/api.py +0 -0
  353. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/cli.py +0 -0
  354. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/cmj/__init__.py +0 -0
  355. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/cmj/analysis.py +0 -0
  356. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/cmj/cli.py +0 -0
  357. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
  358. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/cmj/joint_angles.py +0 -0
  359. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/cmj/kinematics.py +0 -0
  360. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/__init__.py +0 -0
  361. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/auto_tuning.py +0 -0
  362. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/cli_utils.py +0 -0
  363. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/cmj_metrics_validator.py +0 -0
  364. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/cmj_validation_bounds.py +0 -0
  365. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/debug_overlay_utils.py +0 -0
  366. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/dropjump_metrics_validator.py +0 -0
  367. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/dropjump_validation_bounds.py +0 -0
  368. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/filtering.py +0 -0
  369. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/formatting.py +0 -0
  370. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/metadata.py +0 -0
  371. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/pose.py +0 -0
  372. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/quality.py +0 -0
  373. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/smoothing.py +0 -0
  374. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/core/video_io.py +0 -0
  375. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/dropjump/__init__.py +0 -0
  376. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/dropjump/analysis.py +0 -0
  377. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/dropjump/cli.py +0 -0
  378. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  379. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/dropjump/kinematics.py +0 -0
  380. {kinemotion-0.32.2 → kinemotion-0.33.0}/src/kinemotion/py.typed +0 -0
  381. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/__init__.py +0 -0
  382. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/core/test_quality.py +0 -0
  383. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_adaptive_threshold.py +0 -0
  384. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_api.py +0 -0
  385. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_aspect_ratio.py +0 -0
  386. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_cli_cmj.py +0 -0
  387. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_cli_dropjump.py +0 -0
  388. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_cli_imports.py +0 -0
  389. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_cmj_analysis.py +0 -0
  390. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_cmj_joint_angles.py +0 -0
  391. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_cmj_kinematics.py +0 -0
  392. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_cmj_physiological_bounds.py +0 -0
  393. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_com_estimation.py +0 -0
  394. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_contact_detection.py +0 -0
  395. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_dropjump_validation_integration.py +0 -0
  396. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_filtering.py +0 -0
  397. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_formatting.py +0 -0
  398. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_joint_angles.py +0 -0
  399. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_kinematics.py +0 -0
  400. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_polyorder.py +0 -0
  401. {kinemotion-0.32.2 → kinemotion-0.33.0}/tests/test_video_io.py +0 -0
@@ -0,0 +1,267 @@
1
+ ---
2
+ title: Automated Deployment Setup - GitHub Actions with Workload Identity Federation
3
+ type: note
4
+ permalink: deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation-1
5
+ tags:
6
+ - ci-cd
7
+ - github-actions
8
+ - workload-identity
9
+ - automation
10
+ - deployment
11
+ ---
12
+
13
+ # Automated Deployment Setup - GitHub Actions with Workload Identity Federation
14
+
15
+ ## Overview
16
+
17
+ Automated deployment is configured using **Workload Identity Federation** (keyless authentication):
18
+ - ✅ No static service account keys
19
+ - ✅ Short-lived tokens (auto-expire)
20
+ - ✅ Repository-scoped access
21
+ - ✅ Complete audit trail
22
+
23
+ ## Current Configuration
24
+
25
+ **Workflow:** `.github/workflows/deploy-backend.yml`
26
+ **Setup Script:** `scripts/setup-github-deploy.sh`
27
+
28
+ **Workload Identity Provider:**
29
+ ```
30
+ projects/1008251132682/locations/global/workloadIdentityPools/github-pool/providers/github-provider
31
+ ```
32
+
33
+ **Service Account:**
34
+ ```
35
+ github-actions-deploy@kinemotion-backend.iam.gserviceaccount.com
36
+ ```
37
+
38
+ **Permissions Granted:**
39
+ - `roles/run.admin` - Deploy Cloud Run services
40
+ - `roles/iam.serviceAccountUser` - Required for Cloud Run
41
+ - `roles/storage.admin` - Build and upload containers
42
+ - `roles/cloudbuild.builds.editor` - Source-based deployments
43
+
44
+ ## How Auto-Deployment Works
45
+
46
+ **Trigger:** Push to `main` branch with changes to:
47
+ - `backend/**`
48
+ - `src/kinemotion/**`
49
+ - `.github/workflows/deploy-backend.yml`
50
+
51
+ **Workflow Steps:**
52
+ 1. **Test** - Run pytest, pyright, ruff
53
+ 2. **Build** - Build Docker image, run Trivy security scan
54
+ 3. **Deploy** - Deploy to Cloud Run with 2Gi memory + CORS env var
55
+ 4. **Verify** - Health check at `/health` endpoint
56
+
57
+ **Deployment Command Used:**
58
+ ```yaml
59
+ - uses: google-github-actions/deploy-cloudrun@v2
60
+ with:
61
+ service: kinemotion-backend
62
+ region: us-central1
63
+ source: ./backend
64
+ flags: |
65
+ --memory=2Gi
66
+ --allow-unauthenticated
67
+ --set-env-vars=CORS_ORIGINS=https://kinemotion.vercel.app
68
+ ```
69
+
70
+ ## Frontend Auto-Deployment
71
+
72
+ **Already configured!** Vercel has GitHub integration enabled:
73
+ - Push to `main` → Vercel automatically builds and deploys
74
+ - No additional setup needed
75
+ - Environment variable `VITE_API_URL` is set in Vercel project settings
76
+
77
+ ## Testing the Setup
78
+
79
+ **Manual test:**
80
+ ```bash
81
+ # Make a small change
82
+ echo "# Test deployment" >> backend/README.md
83
+ git add backend/README.md
84
+ git commit -m "test: trigger automated deployment"
85
+ git push origin main
86
+
87
+ # Watch the workflow
88
+ open https://github.com/feniix/kinemotion/actions
89
+ ```
90
+
91
+ **Expected result:**
92
+ - Workflow runs automatically
93
+ - Tests pass → Build passes → Deploy succeeds
94
+ - New revision deployed to Cloud Run
95
+ - Health check passes
96
+
97
+ ## Re-running Setup
98
+
99
+ The setup script is **idempotent** - safe to run multiple times:
100
+
101
+ ```bash
102
+ ./scripts/setup-github-deploy.sh
103
+ ```
104
+
105
+ **What it does:**
106
+ - ✓ Checks if resources exist before creating
107
+ - ✓ Enables required APIs
108
+ - ✓ Creates workload identity pool + provider
109
+ - ✓ Creates service account with all permissions
110
+ - ✓ Binds GitHub repo to service account
111
+ - ✓ Outputs values for workflow file
112
+
113
+ **When to re-run:**
114
+ - Moving to a new Google Cloud project
115
+ - Setting up in a different repository
116
+ - Troubleshooting permission issues
117
+ - Verifying the configuration
118
+
119
+ ## Security Benefits
120
+
121
+ **Traditional Approach (insecure):**
122
+ ```
123
+ GitHub Secrets → Static JSON key → Can be stolen, must rotate, never expires
124
+ ```
125
+
126
+ **Workload Identity Federation (secure):**
127
+ ```
128
+ GitHub OIDC token → Google verifies repository → Temporary credentials (1 hour) → Auto-expires
129
+ ```
130
+
131
+ **Access control:**
132
+ - Only `feniix/kinemotion` repository can use this identity
133
+ - Repository owner verified: `assertion.repository_owner=='feniix'`
134
+ - Tokens expire automatically
135
+ - No credentials in repository or secrets
136
+
137
+ ## Monitoring Deployments
138
+
139
+ **GitHub Actions:**
140
+ - https://github.com/feniix/kinemotion/actions
141
+ - Shows all workflow runs, logs, and status
142
+
143
+ **Cloud Run Revisions:**
144
+ ```bash
145
+ # List recent deployments
146
+ gcloud run revisions list \
147
+ --service kinemotion-backend \
148
+ --region us-central1 \
149
+ --limit 10
150
+
151
+ # Check current traffic routing
152
+ gcloud run services describe kinemotion-backend \
153
+ --region us-central1 \
154
+ --format='value(status.traffic)'
155
+ ```
156
+
157
+ ## Rollback Procedure
158
+
159
+ **If deployment breaks production:**
160
+
161
+ 1. **Check workflow logs:**
162
+ - https://github.com/feniix/kinemotion/actions
163
+ - Click failed workflow → View logs
164
+
165
+ 2. **Rollback to previous revision:**
166
+ ```bash
167
+ # List revisions
168
+ gcloud run revisions list --service kinemotion-backend --region us-central1
169
+
170
+ # Route 100% traffic to previous good revision
171
+ gcloud run services update-traffic kinemotion-backend \
172
+ --region us-central1 \
173
+ --to-revisions kinemotion-backend-00013-abc=100
174
+ ```
175
+
176
+ 3. **Or rollback via Console:**
177
+ - Cloud Run → kinemotion-backend → Revisions tab
178
+ - Click previous revision → Manage Traffic → 100%
179
+
180
+ ## Workflow Customization
181
+
182
+ **Add environment variables:**
183
+
184
+ Edit `.github/workflows/deploy-backend.yml`:
185
+ ```yaml
186
+ flags: |
187
+ --memory=2Gi
188
+ --allow-unauthenticated
189
+ --set-env-vars=CORS_ORIGINS=https://kinemotion.vercel.app,NEW_VAR=value
190
+ ```
191
+
192
+ **Change memory/CPU:**
193
+ ```yaml
194
+ flags: |
195
+ --memory=4Gi
196
+ --cpu=2
197
+ ```
198
+
199
+ **Add secrets from GitHub:**
200
+ ```yaml
201
+ flags: |
202
+ --set-env-vars=API_KEY=${{ secrets.API_KEY }}
203
+ ```
204
+
205
+ ## Troubleshooting
206
+
207
+ ### Workflow fails with "permission denied"
208
+
209
+ **Check service account has all required roles:**
210
+ ```bash
211
+ gcloud projects get-iam-policy kinemotion-backend \
212
+ --flatten="bindings[].members" \
213
+ --filter="bindings.members:github-actions-deploy@kinemotion-backend.iam.gserviceaccount.com" \
214
+ --format="table(bindings.role)"
215
+ ```
216
+
217
+ **Should show:**
218
+ - roles/run.admin
219
+ - roles/iam.serviceAccountUser
220
+ - roles/storage.admin
221
+ - roles/cloudbuild.builds.editor
222
+
223
+ ### Workflow fails with "workload identity pool not found"
224
+
225
+ **Verify pool exists:**
226
+ ```bash
227
+ gcloud iam workload-identity-pools describe github-pool \
228
+ --location="global" \
229
+ --project=kinemotion-backend
230
+ ```
231
+
232
+ **If not found, re-run setup script.**
233
+
234
+ ### Deployment succeeds but app doesn't work
235
+
236
+ **Check Cloud Run logs immediately:**
237
+ ```bash
238
+ gcloud logging read \
239
+ "resource.labels.service_name=kinemotion-backend" \
240
+ --limit 50 \
241
+ --freshness=5m
242
+ ```
243
+
244
+ **Common issues:**
245
+ - Memory still set to 512Mi (should be 2Gi)
246
+ - CORS_ORIGINS not set correctly
247
+ - Container crashes on startup
248
+
249
+ ## Cost Impact
250
+
251
+ **GitHub Actions:**
252
+ - Free for public repositories
253
+ - 2,000 minutes/month for private repos
254
+
255
+ **Typical workflow runtime:**
256
+ - Tests: ~2 minutes
257
+ - Build: ~3 minutes
258
+ - Deploy: ~4 minutes
259
+ - **Total: ~9 minutes per deployment**
260
+
261
+ **With 10 deployments/month:** 90 minutes used (well within free tier)
262
+
263
+ ## Related Documentation
264
+
265
+ - [Production Deployment Guide](memory://deployment/production-deployment-guide-vercel-google-cloud-run)
266
+ - [Quick Deployment Commands](memory://deployment/quick-deployment-commands-vercel-and-cloud-run)
267
+ - [Backend CORS Configuration](memory://backend-cors-fastapi-middleware-order)
@@ -0,0 +1,350 @@
1
+ ---
2
+ title: CORS and Memory Issues - Production Debugging Guide
3
+ type: note
4
+ permalink: deployment/cors-and-memory-issues-production-debugging-guide-1
5
+ tags:
6
+ - cors
7
+ - debugging
8
+ - memory
9
+ - cloud-run
10
+ - vercel
11
+ - troubleshooting
12
+ - mediaπpe
13
+ ---
14
+
15
+ # CORS and Memory Issues - Production Debugging Guide
16
+
17
+ ## The CORS + 503 Mystery (Solved)
18
+
19
+ ### Symptom
20
+ ```
21
+ Browser Console:
22
+ Access to XMLHttpRequest blocked by CORS policy:
23
+ No 'Access-Control-Allow-Origin' header present
24
+ Status: 503 Service Unavailable
25
+ ```
26
+
27
+ **But:**
28
+ - ✅ curl tests show CORS headers ARE present
29
+ - ✅ OPTIONS preflight succeeds
30
+ - ✅ Backend `/health` endpoint works
31
+ - ❌ POST requests with file uploads fail
32
+
33
+ ### Root Cause
34
+
35
+ **Cloud Run container ran out of memory** (512MB → 556MB used during video processing). When the container exceeds memory:
36
+
37
+ 1. Cloud Run's infrastructure **kills the container mid-request**
38
+ 2. Returns a **503 from "Google Frontend"** (not your app)
39
+ 3. The 503 response is **plain-text, no CORS headers** (because your app never ran)
40
+ 4. Browser sees 503 without CORS headers → **CORS error**
41
+
42
+ ### Why It Was Confusing
43
+
44
+ | Test Type | Result | Why |
45
+ |-----------|--------|-----|
46
+ | curl OPTIONS | ✅ 200 with CORS headers | Tiny request, doesn't load MediaPipe models |
47
+ | curl POST (empty) | ✅ 422 validation error | Validation happens before video processing |
48
+ | Browser POST (video) | ❌ 503 no CORS | Video processing loads MediaPipe → OOM crash |
49
+ | curl POST (video) | ❌ Timeout/503 | Same OOM crash, but curl shows different error |
50
+
51
+ ### The Fix
52
+
53
+ ```bash
54
+ gcloud run services update kinemotion-backend \
55
+ --region us-central1 \
56
+ --memory 2Gi
57
+ ```
58
+
59
+ **Why 2GB:**
60
+ - Python runtime: ~100MB
61
+ - MediaPipe models: ~500MB
62
+ - Video processing buffers: ~300MB
63
+ - NumPy arrays: ~200MB
64
+ - Safety margin: ~900MB
65
+ - **Total headroom:** Handles concurrent requests + large videos
66
+
67
+ ---
68
+
69
+ ## CORS Configuration Deep Dive
70
+
71
+ ### FastAPI Middleware Order (Critical!)
72
+
73
+ **Problem:** FastAPI middleware is **LIFO** (Last In, First Out). If CORS is added AFTER other middleware, it won't wrap error responses.
74
+
75
+ **Wrong (CORS doesn't wrap rate limiter errors):**
76
+ ```python
77
+ app = FastAPI(...)
78
+
79
+ limiter = Limiter(...) # Added first
80
+ app.state.limiter = limiter
81
+
82
+ app.add_middleware(CORSMiddleware, ...) # Added last → runs first
83
+ ```
84
+
85
+ **Correct (CORS wraps everything):**
86
+ ```python
87
+ app = FastAPI(...)
88
+
89
+ # Add CORS FIRST (runs last, wraps all responses)
90
+ app.add_middleware(CORSMiddleware,
91
+ allow_origins=cors_origins,
92
+ allow_credentials=False,
93
+ allow_methods=["GET", "POST", "OPTIONS"],
94
+ allow_headers=["Accept", "Content-Type", ...],
95
+ )
96
+
97
+ # Then configure other middleware
98
+ limiter = Limiter(...) # Added after → runs before CORS
99
+ ```
100
+
101
+ ### Environment Variable Parsing
102
+
103
+ **Problem:** Special characters in env vars can break gcloud parsing
104
+
105
+ **Wrong:**
106
+ ```bash
107
+ # Comma gets parsed as separator
108
+ gcloud run deploy --set-env-vars CORS_ORIGINS=https://a.com,https://b.com
109
+ # Error: Bad syntax for dict arg
110
+ ```
111
+
112
+ **Correct - Use env-vars-file:**
113
+ ```bash
114
+ # Create env.yaml
115
+ cat > env.yaml <<EOF
116
+ CORS_ORIGINS: "https://a.com,https://b.com,https://c.com"
117
+ EOF
118
+
119
+ # Deploy with file
120
+ gcloud run deploy kinemotion-backend \
121
+ --region us-central1 \
122
+ --env-vars-file env.yaml
123
+ ```
124
+
125
+ ### Backend CORS Origins List
126
+
127
+ ```python
128
+ cors_origins = [
129
+ "http://localhost:3000",
130
+ "http://localhost:5173", # Vite dev server
131
+ "http://localhost:8080",
132
+ "http://localhost:8888", # Test server
133
+ "http://127.0.0.1:3000",
134
+ "http://127.0.0.1:5173",
135
+ "http://127.0.0.1:8080",
136
+ "http://127.0.0.1:8888",
137
+ ]
138
+
139
+ # Add production from env var
140
+ cors_origins_env = os.getenv("CORS_ORIGINS", "").strip()
141
+ if cors_origins_env:
142
+ prod_origins = [origin.strip() for origin in cors_origins_env.split(",")]
143
+ cors_origins.extend(prod_origins)
144
+ ```
145
+
146
+ **Strips whitespace** to handle `"https://a.com, https://b.com"` (with spaces)
147
+
148
+ ---
149
+
150
+ ## Debugging Workflow
151
+
152
+ ### Step 1: Verify Backend is Running
153
+
154
+ ```bash
155
+ # Health check
156
+ curl https://kinemotion-backend-1008251132682.us-central1.run.app/health
157
+
158
+ # Expected:
159
+ # {"status":"ok","service":"kinemotion-backend","version":"0.1.0",...}
160
+ ```
161
+
162
+ ### Step 2: Test CORS Preflight
163
+
164
+ ```bash
165
+ curl -v -X OPTIONS https://backend-url/api/analyze \
166
+ -H "Origin: https://kinemotion.vercel.app" \
167
+ -H "Access-Control-Request-Method: POST" \
168
+ -H "Access-Control-Request-Headers: content-type" 2>&1 | grep access-control
169
+
170
+ # Expected:
171
+ # < access-control-allow-origin: https://kinemotion.vercel.app
172
+ # < access-control-allow-methods: GET, POST, OPTIONS
173
+ # < access-control-allow-headers: ...
174
+ ```
175
+
176
+ ### Step 3: Test Actual POST (Without Video)
177
+
178
+ ```bash
179
+ curl -X POST https://backend-url/api/analyze \
180
+ -H "Origin: https://kinemotion.vercel.app" \
181
+ -F "jump_type=cmj" \
182
+ -F "quality=balanced"
183
+
184
+ # Expected: 422 validation error (file missing)
185
+ # {"detail":[{"type":"missing","loc":["body","file"],"msg":"Field required"}]}
186
+ ```
187
+
188
+ If this fails with 503 or no CORS headers → **memory issue** or middleware order issue.
189
+
190
+ ### Step 4: Check Cloud Run Logs
191
+
192
+ ```bash
193
+ gcloud logging read \
194
+ "resource.type=cloud_run_revision AND resource.labels.service_name=kinemotion-backend" \
195
+ --limit 50 \
196
+ --format json \
197
+ --freshness=5m | python3 -c "import sys,json; logs=json.load(sys.stdin); [print(f\"{l.get('timestamp','')}: {l.get('textPayload','')}\") for l in logs]"
198
+
199
+ # Look for:
200
+ # - "Memory limit exceeded"
201
+ # - "container instance was found to be using too much memory and was terminated"
202
+ # - 503 errors
203
+ ```
204
+
205
+ ### Step 5: Create Local Test Page
206
+
207
+ **Bypasses Vercel to isolate backend issues:**
208
+
209
+ ```html
210
+ <!-- test.html -->
211
+ <!DOCTYPE html>
212
+ <html>
213
+ <body>
214
+ <input type="file" id="video">
215
+ <button onclick="upload()">Upload</button>
216
+ <pre id="result"></pre>
217
+ <script>
218
+ async function upload() {
219
+ const formData = new FormData();
220
+ formData.append('file', document.getElementById('video').files[0]);
221
+ formData.append('jump_type', 'cmj');
222
+
223
+ try {
224
+ const res = await fetch('https://backend-url/api/analyze', {
225
+ method: 'POST',
226
+ body: formData
227
+ });
228
+ const data = await res.json();
229
+ document.getElementById('result').textContent = JSON.stringify(data, null, 2);
230
+ } catch (err) {
231
+ document.getElementById('result').textContent = err.message;
232
+ }
233
+ }
234
+ </script>
235
+ </body>
236
+ </html>
237
+ ```
238
+
239
+ **Serve locally:**
240
+ ```bash
241
+ cd frontend
242
+ python3 -m http.server 8888
243
+ # Open http://localhost:8888/test.html
244
+ ```
245
+
246
+ If this works but Vercel doesn't → Vercel caching or env var issue.
247
+
248
+ ---
249
+
250
+ ## Memory Profiling
251
+
252
+ ### Check Current Memory Usage
253
+
254
+ ```bash
255
+ # Get service configuration
256
+ gcloud run services describe kinemotion-backend \
257
+ --region us-central1 \
258
+ --format='value(spec.template.spec.containers[0].resources.limits.memory)'
259
+
260
+ # Should output: 2Gi
261
+ ```
262
+
263
+ ### Monitor Memory in Real-Time
264
+
265
+ ```bash
266
+ # Stream logs (watch for memory warnings)
267
+ gcloud logging read \
268
+ "resource.labels.service_name=kinemotion-backend AND textPayload=~'Memory'" \
269
+ --limit 20 \
270
+ --format json \
271
+ --freshness=10m
272
+ ```
273
+
274
+ ### Memory Usage Patterns
275
+
276
+ **From Cloud Run logs analysis:**
277
+ - **Idle startup:** ~100MB (Python + uvicorn)
278
+ - **First request:** ~500MB spike (MediaPipe model loading)
279
+ - **Processing 1080p video:** ~600-800MB
280
+ - **Peak during processing:** ~1.2GB (large video + NumPy arrays)
281
+
282
+ **Why 512MB failed:**
283
+ - Base: 100MB
284
+ - MediaPipe: 500MB
285
+ - Processing: 200MB
286
+ - **Total:** 800MB → **exceeds 512MB limit**
287
+
288
+ ---
289
+
290
+ ## Vite Environment Variables
291
+
292
+ ### How They Work
293
+
294
+ Vite replaces `import.meta.env.VITE_*` at **build time**, not runtime:
295
+
296
+ ```typescript
297
+ // In code:
298
+ const apiUrl = import.meta.env.VITE_API_URL || ''
299
+
300
+ // After build (if VITE_API_URL=https://backend.com):
301
+ const apiUrl = "https://backend.com" || ''
302
+ ```
303
+
304
+ **Critical:** Environment variables are **baked into the JavaScript bundle** during `yarn build`. Changing env vars requires redeployment.
305
+
306
+ ### Vercel Environment Variables
307
+
308
+ **Set in Dashboard:**
309
+ 1. Project → Settings → Environment Variables
310
+ 2. Add `VITE_API_URL` for Production
311
+ 3. **Must redeploy** for it to take effect
312
+
313
+ **Verify it's embedded:**
314
+ ```bash
315
+ # Check if backend URL is in the JavaScript bundle
316
+ curl -s https://kinemotion.vercel.app/ | grep -o 'kinemotion-backend'
317
+
318
+ # Should return: kinemotion-backend-1008251132682
319
+ ```
320
+
321
+ If no match → env var wasn't set before build, or Vercel is serving cached version.
322
+
323
+ ---
324
+
325
+ ## Production URLs
326
+
327
+ **Frontend:** https://kinemotion.vercel.app/
328
+ **Backend:** https://kinemotion-backend-1008251132682.us-central1.run.app
329
+
330
+ **Environment Variables:**
331
+ - **Vercel:** `VITE_API_URL=https://kinemotion-backend-1008251132682.us-central1.run.app`
332
+ - **Cloud Run:** `CORS_ORIGINS=https://kinemotion.vercel.app`
333
+
334
+ **Configuration:**
335
+ - **Cloud Run Memory:** 2Gi (required for MediaPipe)
336
+ - **Cloud Run Region:** us-central1 (Tier 1 pricing)
337
+ - **Vercel Root Directory:** `frontend/`
338
+ - **Vercel Framework:** Vite (auto-detected)
339
+
340
+ ---
341
+
342
+ ## Lessons Learned
343
+
344
+ 1. **Always check Cloud Run logs first** when debugging CORS + 503
345
+ 2. **OOM crashes return 503 without CORS headers** (infrastructure-level error)
346
+ 3. **CORS middleware must be added FIRST** in FastAPI (LIFO order)
347
+ 4. **Vite env vars are build-time**, not runtime (must redeploy after changes)
348
+ 5. **Use env-vars-file for complex values** (commas, special chars)
349
+ 6. **512MB is too low for MediaPipe** (need minimum 2GB)
350
+ 7. **Local test page** is fastest way to isolate backend issues