Inspiration
Concussion recovery breaks down in the space between appointments. After a brain injury, people are told to "balance activity and rest" — but with no way to answer the everyday question: "Can I do one more task, or will I pay for it tomorrow?" Most apps either overreact to a single bad day or quietly turn into a symptom-tracking chore. We wanted something that helps you pace yourself in real time without ever pretending to be a doctor.
What it does
Pace turns a 60-second symptom check-in into a living, adapting recovery plan.
- Real-time check-ins — rate headache, dizziness, mental fog, and fatigue. Each check-in is saved on-device and appended to your personal history.
- A model that learns from *you* — a bounded linear regression retrains on your own growing check-in history to estimate today's activity capacity, and shows its observation count and pattern fit so the "why" is always visible.
- A time-aware daily rhythm — a live clock highlights the current recovery window and adapts activity durations around your nervous system.
- Trends over noise — 7-day and 3-week charts, capacity forecasts, and check-in streaks are all built live from your real data, emphasizing direction over any one difficult day.
- Care circle with consent — permission-level sharing controls and a downloadable visit brief so you walk into an appointment with the whole picture.
- Safety first — a 5-minute guided visual reset with a real breathing timer, plus concussion danger-sign escalation that routes new or worsening symptoms to urgent guidance instead of an AI answer.
- Private by default — no account, camera, microphone, analytics, or uploads. Everything stays in your browser, and it installs as an offline PWA.
How we built it
- React 19 + TypeScript + Vite 8 for a fast, type-safe single-page app.
- On-device ML using
simple-statistics— a bounded linear regression (linearRegression,rSquared) trained entirely in the browser on the user's own observations. - A real-time data engine (
paceStore.ts) that persists timestamped check-ins tolocalStorageand derives trends, streaks, capacity, and model fit on every change via custom React hooks. - Recharts for the live symptom and capacity visualizations, Lucide for iconography.
- vite-plugin-pwa / Workbox for installable, offline-capable delivery.
- A calm, accessible design system with an animated ambient UI, motion that respects
prefers-reduced-motion, and full keyboard/ARIA support.
Challenges we ran into
- Being useful without being a medical device. The hardest design work was drawing a hard line: the model supports pacing decisions only — it never diagnoses, predicts recovery dates, or overrides a clinician. New/worse symptoms deliberately bypass the AI and go straight to safety guidance.
- Making it real, not a demo. We replaced every hardcoded value with a genuine persistence layer so the charts, streaks, and model all update the moment you check in — and survive reloads.
- Responsible AI with tiny data. With only a handful of observations, we had to keep the regression bounded and transparent (surfacing pattern fit) so it degrades gracefully instead of overreaching.
- Accessibility under motion. Concussion patients can be motion- and light-sensitive, so every animation is gated behind reduced-motion and the whole app is screen-reader labeled.
Accomplishments that we're proud of
- A fully on-device, privacy-first recovery companion — zero data leaves the browser.
- An explainable, self-retraining model that shows its own confidence.
- A polished, installable PWA that works offline and adapts to the real clock.
- A responsible framing that keeps clinical decisions with clinicians.
What we learned
- Trust in a health tool comes from transparency and restraint, not from more predictions.
- On-device ML is genuinely viable for lightweight personal models — and it's a powerful privacy story.
- Small, honest UX details (a live timestamp, a visible observation count, a "why this changed" note) do more for credibility than a bigger model.
What's next for Pace — Concussion recovery, at your rhythm
- A 30-second cognitive reaction test as an additional objective signal.
- Capacity forecasting with confidence bands and real correlation discovery (sleep, walks, screen time).
- Optional encrypted backup and a read-only clinician view.
- Real device signals — screen-time and ambient-light guardrails for photosensitivity.
Built With
- css3
- html5
- javascript
- localstorage
- lucide
- on-device-ml
- pwa
- react
- recharts
- simple-statistics
- typescript
- vite
- workbox