Inspiration
A friend of mine passed away from Parkinson's. Watching how slowly and quietly motor symptoms creep in before anyone names them stuck with me ,]most people don't get measured until something's already very wrong. I wanted to build the thing that watches earlier, without pretending to be a doctor.
What it does
MotorMetrix turns an ordinary phone into five motor-function tests — trace, tap, write, tremor, and gait — and builds a personal baseline from your own attempts over time. Every new attempt gets compared against that baseline using real statistics (mean, standard deviation, z-scores), not guesses. It flags when something's genuinely different from your normal, and shows you a trend, not just a snapshot. It's explicit that it doesn't diagnose anything — it just tracks change and puts real numbers in front of you.
How we built it
Next.js and TypeScript, split into three layers on purpose: capture (pointer and device-motion events, no analysis), signal processing (pure math — trajectory deviation, jerk-based smoothness, Goertzel frequency detection for tremor, peak detection for gait), and baseline comparison (Welford's algorithm for running stats, z-scores for change detection). The three layers don't know about each other, so tremor and gait plug into the exact same baseline engine trace/tap/write already use. UI is a dark clinical dashboard styled after a reference design we were given, built with SVG so there's no charting library dependency.
Challenges I ran into
Getting the write test to feel natural took a rewrite — our first version ended the whole attempt the moment you lifted the pen, which breaks actual handwriting since nobody writes a full sentence without lifting between letters. Tremor detection needed a real frequency-domain algorithm (Goertzel) instead of eyeballing a threshold, and we had to actually test it against synthetic sine waves at known frequencies before trusting it. iOS also gates device motion behind a permission prompt that has to fire from a real user gesture, which shapes how the tremor/gait start buttons had to be wired.
Accomplishments that we're proud of
65 unit tests on the signal processing and baseline math, not just manual eyeballing — including tests that caught real bugs in our own assumptions before they shipped. The architecture held up under pressure: adding two entirely new sensor-based tests (tremor, gait) required zero changes to the baseline/comparison engine.
What we learned
Building trend detection is easy; being honest about what you can and can't claim from it is the hard part. It shaped almost every product decision — no diagnostic language anywhere, conservative "insufficient baseline" states instead of confident-sounding-but-wrong results on someone's first attempt.
What's next for MotorMetrix
More attempts and a longer time horizon to see if the baselines hold up outside a demo. A proper backend so data isn't stuck in one browser's local storage. And validating the tremor/gait thresholds against real reference data instead of our own reasonable-but-unverified defaults.
Built With
- ai
- api
- claude
- featherlessai
- typescript
Log in or sign up for Devpost to join the conversation.