A homebrew web app for the KingSmith WalkingPad.
I went looking for a decent app to use with my pad and found basically nothing — the manufacturer's app is bad, the community ones are abandoned. So I built this for myself: a browser dashboard that talks to the pad over Bluetooth, runs workouts, keeps stats, and stores everything locally. Sharing it in case it's useful to anyone else.
No backend, no account, no subscription. Open it in Chrome, walk.
What's inside · Install · Supported pads · How to use · Configuration · Troubleshooting · Tech · Morning coffee · Credits · Changelog
A personal dashboard per profile — streaks, totals, recent walks, a daily kcal ring, one big Start walking button. Two profiles ship by default (Me / GF); rename, recolor, or add more.
10 built-in routines (recovery, fat-burn, intervals, tempo, pyramids, HIIT) — each one a real step-by-step plan with target speeds and durations. Or build your own in the editor. Or just pick "Free walk" and wander.
Speed, distance, time, calories, max, pace, and the current zone (estimated from speed). Big numbers, easy to glance at from across the room. Pop-out floats the HUD as a draggable overlay if you want a video full-screen on the side.
Plain English in, structured workout out. "Light cardio, 30 minutes, easy on the knees." It drafts a plan based on your recent walks, you tap Use this workout, tweak, save. Bring your own Groq key (free tier, ~14k req/day).
Distance, cadence, calories from your actual weight, zone breakdown, speed timeline. Stored locally and added to history.
GitHub-style activity heatmap per profile. Total distance, total steps, sessions, kcal, streak. Sort, filter.
Stride length, height/weight (used for real kcal), age, daily kcal goal, voice cues, voice control, voice gender, AI-TTS toggle, favorite YouTube URL, profile color. Tweak it, save it, done.
- Install Node.js LTS — https://nodejs.org (one-time, ~30s).
- Download this repo — green "Code" button → Download ZIP, or grab the latest Release. Unzip anywhere.
- Run it:
- Windows: double-click
START.bat. - macOS / Linux:
bash start.shin the unzipped folder.
- Windows: double-click
The first launch installs dependencies (~30 s) and opens the app in Chrome / Edge / Brave automatically. Every launch after that is instant.
Web Bluetooth needs a Chromium-based browser on desktop. Safari and Firefox do not support it.
| Pad | Status |
|---|---|
| Xiaomi KingSmith WalkingPad R2 / R2 Pro | ✅ Tested daily — this is what I built it on |
| Other KingSmith pads (A1 Pro, C2, P1, R1 Pro, X21, etc.) | fe00 / fe01 / fe02 BLE service & broadly the same protocol |
If you own a non-R2 KingSmith pad and want to help: open the app's BT debug screen, paste the service / characteristic dump as an issue. If anything is off, the protocol layer in src/lib/walkingpad.ts is short and easy to adapt.
Pair the pad once — Windows: Settings → Bluetooth & devices → Add device → Bluetooth → pick your WalkingPad. macOS: System Settings → Bluetooth → pair. From then on the app discovers it automatically.
Every walk after that:
- Pick your profile.
- Pick a workout (or "Free walk").
- Click Connect walking pad → the OS picker shows your pad → select it.
- Step on, start the pad as usual.
- End the walk when done → report saves to history.
The app needs no keys to run. One key is optional, only for the in-app AI coach:
| Key | What it powers | Where to enter | Notes |
|---|---|---|---|
VITE_GROQ_API_KEY |
AI workout coach (chat → plan) | Workout → AI build → paste key, or .env |
Free tier ≈ 14k req/day. https://console.groq.com/keys |
- In-app (recommended for non-coders): open the AI coach from the workout picker. First time it asks for the key, stores it locally in IndexedDB, never re-asks.
.envfile (recommended for devs): copy.env.exampleto.envand paste the key. The.envfile is gitignored so your key stays local even aftergit pullor re-installs.
Both work simultaneously; .env wins if present, otherwise the in-app value is used.
Pad won't connect
Open BT Debug from the profile screen → "Scan a device" → pick your pad. Compare its services with the expected fe00 / fe01 / fe02. If different, paste the output as an issue.
Web Bluetooth not available
Use desktop Chrome / Edge / Brave / Comet. Not Firefox, Safari, iOS, or smart-TV browsers.
"No pad found" in the browser picker
The pad must already be paired with the OS and powered on. If it's been off for a while, walk on it for a few seconds to wake the BLE radio, then retry.
Stack & noteworthy choices
- Vite + React 19 + TypeScript — plain SPA, no SSR, no framework.
- Web Bluetooth API — no library. The pad's GATT service is implemented in
src/lib/walkingpad.ts. - Dexie (IndexedDB) for sessions, settings, voice cache. Schema versioned (currently v8).
- Zustand for app state.
- Recharts for activity charts.
- Optional Kokoro-82M for high-quality local TTS voice cues (~85 MB one-time ONNX download, cached in IndexedDB).
- Document Picture-in-Picture API for the floating HUD overlay.
- Web Speech API for voice control (pause / resume / faster / slower / end).
- No backend, no analytics, no telemetry, no service worker (yet).
If this app saved you from the manufacturer's one and you feel like buying me a coffee, the jar is open. Totally optional — a star on the repo is plenty.
send.monobank.ua/jar/7Wo2uxjhdk — monobank jar (Ukraine). Scan with your phone or click the link. Any currency, any amount, no account needed on the sender side.
WalkingPad protocol reverse-engineered by:
MIT — see LICENSE. Use it, fork it, change it. It's a personal project, not a product.








