Ski Recorder
Sensor-based ski analytics aligned with PSIA instruction
Ski instruction is almost entirely visual and verbal, with little objective data. Ski Recorder is an early-preview platform that turns iPhone IMU and GPS into biomechanical feedback that complements coaching rather than replacing it. A skier records a run in the iOS app (Expo React Native); the app captures accelerometer, gyroscope, barometer, and GPS at up to 100 Hz. The session uploads to a FastAPI backend, is processed by a Python worker (RQ + Redis), and returns seven movement scores in [0, 1] with per-metric confidence weighting in about 60 seconds. The public web demo at ski-instructor.vercel.app includes a sample session so you can run the full pipeline end to end. Source code: github.com/maggiebrooks/ski-ai.
Key Contributions
- Body-frame alignment: rotate raw accelerometer and gyroscope into a gravity-aligned frame (Rodrigues rotation from a low-motion gravity estimate, typically chairlift) so yaw and loading metrics match the skier regardless of phone orientation in a pocket.
- Signal pipeline: Butterworth low-pass (4th-order, 5 Hz, zero-phase), optional barometric run segmentation, turn detection on body-frame gyro yaw, and per-turn feature modules (pelvis turn metrics and carving-phase analysis).
- Seven PSIA-aligned scores: rotary stability, edge consistency, pressure management, turn symmetry, turn shape consistency, turn rhythm, and turn efficiency—normalized where possible (e.g. radius vs. sidecut, centripetal ratio for g-force) for comparability across skiers and equipment.
- Confidence weighting: each score is weighted by data-quality signals (GPS accuracy, sampling stability, gyro SNR, completeness) so noisy sessions surface with lower confidence.
- Stack and deployment: React 19 + Vite + TypeScript frontend on Vercel; FastAPI API and RQ worker on Render; SQLite today with a PostgreSQL migration planned before beta. 229 pytest tests cover the processing and scoring pipeline.