A beginner-friendly web app that lets you log workouts with voice or typing.
- Press a button and talk naturally (when browser supports speech recognition).
- Parse multiple entries from one phrase (
"10 squats and 1 minute dead hang"). - Handle more natural phrasing like hyphenated time (
"60-second couch stretch") and normalize common aliases ("dead-hang"->dead hang). - Keep all logs in
localStorage(on-device). - View a Raw Daily Log by day tabs.
- View a Totals tab grouped by exercise + unit.
- Filter totals by Today, Rolling 7 Days, This Month, or All Time.
- View a Trends tab with:
- today's per-exercise totals,
- rolling 7-day vs previous 7-day trends (time + reps),
- last 14-day charts (time and reps),
- most active days lists (time and reps),
- current streak.
- Group workouts by day with tappable day tabs.
- Edit or delete entries.
- Typed logging works offline.
- Install Visual Studio Code.
If this repository is already on your computer, open it in VS Code.
Because microphone features need a real browser context, run a local server instead of opening the file directly.
- In VS Code, go to Extensions.
- Install Live Server (by Ritwick Dey).
- Open
index.html. - Click Go Live (bottom-right in VS Code).
In terminal, inside this folder:
python3 -m http.server 4173Then open:
- On your computer browser:
http://localhost:4173 - On iPhone (same Wi-Fi):
- Find your computer local IP (like
192.168.1.50) - Open
http://<your-computer-ip>:4173in Safari
- Find your computer local IP (like
- Voice recognition support can vary by Safari/iOS version.
- If voice is unavailable, the app shows a message and typed logging still works.
- Data is local to that browser/device only.
- Tap Start Recording, then say something like:
I did 10 squats and 1 minute dead hang
- Or type the same sentence and press Add Typed Entry.
- Open Raw Daily Log to review exact entries by day.
- Open Totals for totals by exercise over your selected range.
- Open Trends to check consistency and progress at a glance.
- Use Edit or Delete for corrections.
- Open the day tab to review entries.
- Use Edit or Delete for corrections.
- Add export/import (JSON or CSV)
- Add cloud sync (Supabase/Firebase)
- Add custom activity presets
- Add PWA install support
Edit workout-catalog.js to maintain your master list of workouts and stretches.
Each item has:
name: canonical exercise/stretch nametype:exerciseorstretchaliases: alternate phrases you might speak/type
Example:
{
name: "pull ups",
type: "exercise",
aliases: ["pull-ups", "pullup", "pull-ups"]
}Hyphenated and non-hyphenated names are treated as the same activity automatically (for example pull ups and pull-ups).
If the UI appears but buttons do nothing, the browser is usually running stale JavaScript or missing one of the JS files.
- Confirm these files are in your Netlify publish output:
index.htmlapp.jsworkout-catalog.jsstyles.css
- In browser dev tools, open Network and make sure
app.jsandworkout-catalog.jsboth return200. - Hard refresh the site on desktop and iPhone.
- This repo includes a Netlify
_headersfile to reduce stale cache issues after redeploys.