💡 Inspiration
Everyday aches — sore knees, a stiff lower back, a tight neck — often trace back to something invisible: how we stand. A tilted pelvis, rounded shoulders, or an over‑pronating foot quietly loads the joints wrong, and a well‑designed insole can help correct it. But getting there today means a clinic visit, a scanner kiosk, an app, or a two‑week mail‑in kit.
We wanted to collapse all of that into a single link. Newfoot turns any phone camera into a posture lab — read your stance, understand what's off, and design a corrective 3D‑printed insole — with a hard rule: your video never leaves your device.
🦶 What it does
- Scan — an on‑device pose model draws a real‑time 33‑point skeleton over your live camera, and overlays an ideal reference posture beside your real one.
- See — it computes posture findings (shoulder tilt, pelvic tilt, head lean) with severity, in plain language — to help reduce knee, back, and neck strain.
- Solve — a rule engine turns your findings + foot size into a corrective insole: arch support, heel posting, stiffness, and material — shown as an interactive 3D model and exported as a printable STL.
Wellness/visualization POC — not a medical device; a disclaimer is on every screen.
🛠️ How we built it
- Frontend: Angular 22 + MediaPipe Pose Landmarker running 100% in the browser (WASM in a Web Worker), a multi‑rate perception pipeline (capture → inference → smoothing → metrics → render) that keeps the UI at 100+ Hz while inference runs off‑thread, and Three.js for the 3D insole.
- Backend: NestJS + MySQL, dockerized end‑to‑end; one command brings the whole stack up.
- Sponsor infra: deployed on Akash (decentralized compute, via
console-aximanaged wallet — no private keys); the landing page is hosted free on Zero (the agent CLI); Pomerium as the identity‑aware front door. - The twist — an autonomous build: the app was assembled by an agentic loop we wrote — one feature per session, each on its own branch → PR → auto‑merge, fully auditable (20+ PRs). We also designed a self‑improving analysis loop that tunes the posture thresholds against self‑supervised signals, with deterministic fixtures as a guardrail.
🧗 Challenges we ran into
- Cross‑origin isolation. MediaPipe's threaded WASM needs
SharedArrayBuffer, which silently works in Chromium but fails elsewhere without COOP/COEP headers. Our tests were green while the real browser showed "pose engine failed to load" — a classic Chromium‑only blind spot. We added the headers and a smoke test that assertscrossOriginIsolated. - Trusting synthetic input. A fake camera can't produce a real skeleton, so we verified pose math with fixed landmark fixtures and drove the browser with a real full‑body clip.
- One repo, one writer. The autonomous loop and manual edits collided on the git tree until we enforced a strict single‑writer rule and a branch → PR → merge contract.
- Shipping on a clock. With a hard deadline we cut scope hard to a clean vertical slice (scan → findings → insole → 3D → STL) and let the deeper features live as documented roadmap.
📚 What we learned
- On‑device inference is a feature, not a constraint — "your video never leaves your device" is both the privacy story and the fastest path.
- Loops beat snapshots for real‑time analysis: temporal fusion + persistence gating turn jittery angles into trustworthy findings.
- Agentic engineering scales when you give it durable state (a feature list, a progress journal, ADRs) and a hard verification contract.
Built With
- akash
- angular.js
- console-axi
- docker
- docker-compose
- getusermedia
- javascript
- mediapipe
- mysql
- nestjs
- ngrok
- node.js
- playwright
- pomerium
- rxjs
- scss
- stl
- three.js
- typescript
- web-workers
- webassembly
- webgl
- webrtc
- zero.xyz

Log in or sign up for Devpost to join the conversation.