Inspiration

Every second, an older adult falls (CDC). Falls are the leading cause of injury death after 65: about 41,000 deaths a year, and about $80 billion in medical costs for non-fatal falls in 2020.

Today's devices notice a fall after it happens. In one study, 80% of the oldest adults with a personal alarm did not use it when they fell alone and could not get up (Fleming and Brayne, BMJ 2008). Exercise reduces the rate of falls by 23% (Cochrane, 108 trials), but only 21% of participants in home programs were fully adherent to the prescribed dose (Simek, McPhate, and Haines, Preventive Medicine 2012).

The CDC's STEADI playbook already screens, assesses, and then recommends exercise. That happens in a clinic, maybe once a year. We run the same screening at home every week, confirm the exercises happen, and show the family the trend.

What it does

A belt at the lower back and a one-button base station. In about three minutes, with a family member standing by, Steadi runs the CDC's fall-risk tests, flags increased fall risk, tracks change from baseline, and coaches strength and balance moves while counting every rep.

Check. The base station beeps each step. The screen shows one large instruction and a picture. The belt times Timed Up and Go from the "Go" beep until the person sits (a button is the stopwatch fallback), reports the slowdown when they name animals on a second walk, counts a 30-second chair stand (arms used records 0), and times three balance holds beside a counter. A break has to last 0.3 seconds, so a flinch does not end the hold. Sway plays a warning beep; a real loss of balance ends the stance with an alarm. The dashboard also asks STEADI's three key questions.

Each result is compared with STEADI's cutoffs and the person's own baseline. Green, amber, or red is our summary, not STEADI's, and the lights show it. A check-in missing a core test is never green.

Coach. Everyone gets a plan. If chair stands or balance slip across two check-ins, it adds sit-to-stands or balance holds. Reps step up as sessions are completed, and progression pauses when exercise days drop off.

Share. Home is plain words, trends, and exercise days against a target of 5 a week. Check-in is full screen, meant to be read from 3 m. For the doctor is a one-page summary after any check-in, with a nudge to bring it when something flags.

Every simulated value is labelled "Simulated", including the eight-week "Simulated: Dad" history. The public demo at https://dhsquad.onrender.com runs on the simulator.

How we built it

Hardware. An ESP32 and an MPU-6050, on a USB power bank at the lower back, stream 100 Hz motion over UDP. The laptop sends colours and cues back. The belt's light and buzzer play them without stopping the sensor stream, including a sway warning and a loss-of-balance alarm. An Arduino base station (one button, an RGB LED, a buzzer) talks over USB serial. A phone running phyphox is the backup. Both sketches are built with arduino-cli. Wi-Fi, the UDP port, and the serial port are settings.

Scoring. Orientation does not matter, so there is no calibration. Timing starts on "Go". A walk ends at stillness in a near-seated posture. Chair stands are upward-velocity peaks. A balance break is smoothed acceleration or trunk rotation that lasts 0.3 seconds. Thresholds are named constants, and checkin replay re-scores a saved session.

Software. FastAPI cues the devices, tags the stream, scores each step, and pushes live state over a WebSocket. The page is plain HTML and JavaScript, with Chart.js and the font stored locally, so the check-in works offline. The simulator, the belt, the phone, and a CSV replay share one interface, and so do the on-screen and Arduino base stations. Data is JSON, plus a CSV of every raw stream.

Grok in the product. Grok Imagine drew the instruction pictures, which ship as local files. Grok chat writes a 3- to 5-sentence family update from the recorded numbers. No name is sent. A reply is rejected if it invents a number, makes a forbidden claim, or uses clinical jargon, and the page labels accepted text "AI-written". Otherwise the family gets fixed wording. Ask Steadi answers a short question from those same numbers, through the same checks. Grok Voice speaks the check-in cues, generated ahead of time so they play offline, and a Listen button reads the summary. A switch, or CHECKIN_AI=off, turns every Grok call off. The check-in still works.

Cursor. We ran many agents in parallel and sent each task to the model better at it: Grok for rapid idea checks, Claude and Grok for the backend, Codex and Grok for the UI and visual design. Cursor can guide an agent while it is still running. Claude Code cannot. We often confirmed a new idea while agents were already spinning, which is how the sway warning and the foot pictures made it in.

Testing. pytest, including a full simulated check-in scored against the simulator's true values, and ruff. Agreement with a stopwatch and hand counts on real people is still to be measured.

Challenges we ran into

The venue had no soldering tools, so we soldered headers at a makerspace and built on a simulator until the belt was ready. Telling "sat down" from "paused while standing" took a posture check against the seat before "Go", with the button kept as a stopwatch. Balance used to end on any flinch. A break now lasts 0.3 seconds, sway warns first, and a missing sensor tail scores as not measured. Late packets, Wi-Fi gaps, and double-taps had to be ignored, and the belt had to beep without dropping its 100 Hz stream. A fluent family summary is easy to generate. One that never invents a number, or says it predicts a fall, has to be checked. Families need one big action. Doctors need the rule for each number. Those are separate views.

Accomplishments that we're proud of

  • The STEADI loop runs end to end, on the belt, a phone, a recording, or the simulator: the questions, three tests plus a dual-task walk, coached exercise, and tracking.
  • Every rep is counted and every hold is timed. A helper stands by for the check-in. Solo exercise is limited to supported moves.
  • The family summary is checked before it is shown, labelled AI-written, and replaced with fixed wording on any doubt.
  • The check-in works offline, with body text of at least 18 px, AA contrast, and 44 px targets. Simulated data is labelled. A missing test is never shown as all-clear.

What we learned

Following the clinical timing, from "Go", and recording 0 when arms are used, removed sensing problems such as detecting when a walk starts. Swappable devices let several agents work at once. Sending each task to the model better at it, and guiding agents while they were still running, beat one long chat. In a health product, the checks on the model's output matter more than the prompt. Balance is the hardest score, which matches published lower-back IMU work: within about 4% on Timed Up and Go, about 8% on chair stands, and less well on balance.

What's next

Validate on real people and publish the stopwatch and hand-count agreement. checkin validate is already built. Commit the generated Grok Voice files so the cues play offline. Then a microphone on the dual-task walk, optional gait quality, and a pilot with a per-unit cost.

Built With

Share this project:

Updates

Submission history