NOTE: I fell sick as a solo member ;( so wont be continuing, thank you.
Inspiration
A single health reading loses its context. Nobody buys a peak flow meter before they have a breathing problem; nobody buys a home ECG before a scare. Meanwhile one in six young Americans vapes, wildfire smoke seasons keep getting worse, and everyone stares at screens all day — with no device tracking any of it. People find out something changed when it's already a problem. Ayu is the first step: the phone already in your pocket becomes the monitor you'd never buy, notices change early against your own baseline, and hands your doctor a readable report. The doctor decides what it means — Ayu never diagnoses.
What it does
Check in → run a test → check quality → compare over time → share a report.
- Check-in: symptoms, sleep, caffeine, activity, vaping context, notes — the human context beside every measurement.
- Lab tests: resting pulse via rear-camera PPG (60s fingertip), breathing via microphone (3s peak-flow blow or full exhale with AudioWorklet feature extraction), 8 vision tests (distance/near acuity via tumbling-E with logMAR scoring, shape discrimination, Amsler grid, visual field, near point, astigmatism dial, reading/blink check), and motor tests (hand steadiness via accelerometer, finger tapping).
- Timeline: 28-day view with per-measure charts and personal baselines (median of last 7 usable readings, minimum 3 to establish). Demo records are visibly labeled and never mixed with live data.
- Report: 7/14/28-day summaries listing methods, results, quality caveats, and context — exportable as PDF or shareable text. Breathing also exports a research JSON dataset.
- Privacy: local-first. No account, no analytics, no server. Data lives in the browser until you explicitly export it. One-tap local wipe.
How we built it
React 18 + TypeScript + Vite, with feature-folder architecture. IndexedDB (via a single repository layer) stores measurements, context, and sessions — every measurement carries type, timestamp, method, device, quality state (usable / low / failed), and an experimental flag. The breathing pipeline runs an AudioWorklet sample stream into a worker that extracts SpiroSmart-style acoustic features (30ms frames, envelope/resonance/LPC approximations); raw audio is discarded. Pulse uses green-channel fingertip PPG resampled to 100Hz with detrending and 0.75–3.5Hz band-pass filtering. Vision uses MediaPipe Tasks Vision facial landmarks plus geometric screen calibration (payment-card method). Recharts powers the timelines. 217 automated tests (Vitest) cover data validation, baselines, DSP math, and scoring. Deployed as a static PWA on Firebase Hosting.
Challenges we ran into
Browser sensor APIs were the hard part: camera/mic/motion permissions, HTTPS requirements, and wildly varying frame rates across devices (which is why the HRV estimate is withheld on low-quality captures). The deeper challenge was epistemic, not technical — deciding what the app is allowed to claim. A microphone can produce useful airflow features, but converting them to L/min needs paired reference data and a trained model we didn't have time to build, so the breathing screen collects features and labels instead of faking a number. We built an explicit honest boundary into the product: experimental vs. validated, with quality and provenance beside every reading.
Accomplishments that we're proud of
A complete capture-to-report loop that actually works on a phone. The per-measure quality system (failed tests are kept for review but never pollute a baseline) and the research ledgers that separate published precedent from what Ayu itself has validated. The deterministic, exportable report with methods and caveats intact. And the discipline to not ship a number we couldn't defend — in a health hackathon project, what you refuse to claim is a feature.
What we learned
One reading means almost nothing; the trend against your own baseline is the entire signal. Published paper accuracy does not transfer to your implementation — the only accuracy number that matters is the one measured on your code, your phone, your protocol. And labeling uncertainty builds more trust than hiding it.
What's next for Ayu
Collect paired reference data (peak-flow meter, ECG, printed charts, hand-counted video) across days, then train and validate a personal PEF/FVC mapping with held-out testing. Then the synthesis layer: an evidence-linked assistant that answers "what changed this week?" with every claim traceable to dated records — no diagnosis, ever.
Built With
- claude
- firebase
- indexeddb
- mediapipe
- react
- recharts
- typescript
- vite
- webaudio
Log in or sign up for Devpost to join the conversation.