work / gymmate · Live · daily use
GymMate
A local-first gym tracker that knows what you did last time.
Play with it
A pure-frontend replica with mock data: nothing is saved, nothing leaves the page. The real app is richer; this is the feel of it.
loading the demo…
The problem
Standing in the gym not knowing what to do next, while subscription trackers drown the basics in features.
What it does
A favourites hit-list answers "what now", a set logger shows last-session numbers beside every set, and a smart rest timer counts you back in. An 873-exercise database with muscle diagrams, a plate calculator with warm-up ramps, personal-record detection with celebrations, progressive-overload targets and a calendar heatmap round it out. Fully offline, installable, no account.
Under the hood
- Local-first: everything lives on-device in IndexedDB, with JSON export as the backup path
- Smart rest timing by exercise category and mechanic, with haptics
- Driven end to end with Playwright before shipping, including real touch drag-reordering
The thinking
Target user
Casual and returning lifters (me included) who blank on "what now?" mid-session and refuse to pay a subscription for a logbook.
Pain points
- Standing at the gym not knowing what to do next
- Big trackers bury logging under social feeds and paywalls
- No memory of what you lifted last time, so progression stalls
Gap in the market
A free, offline, no-account tracker where the favourites hit-list answers "what now" and every set shows last time beside it. Local-first means it works in a basement gym with no signal.
AI + tooling
- Claude Code + designer/QA agents (build)
- Playwright (verification)
- Dexie/IndexedDB
- react-body-highlighter
- free-exercise-db (873 exercises)
Frameworks
- Progressive overload + double progression (reps first, then weight)
- Hick’s law: a favourites hit-list kills mid-session choice paralysis
- Operant conditioning: PR detection and celebration as reinforcement
- Friction budget: logging a set must take seconds, or it will not happen
- Local-first PWA (works in a basement gym with no signal)
Success metrics
- In daily use
- Fully offline, installable
- TBD: sessions logged per week, PR rate
The lb mode silently stored kg and looked fine to a metric user. Convert at the widget boundary and assert the round-trip.