work / gymmate · Live · daily use
GymMate
A local-first gym tracker that knows what you did last time.
A friend got me started, but the itch was mine: mid-session I could never remember my rep count, my best weight on that lift, or whether I was actually pushing harder than last week. Rest was worse, I just eyeballed it. So the first build was memory and a timer. The part I am more interested in now is that gym is solo by default and does not have to be: if the app knows who else nearby is using it, you can ask for a spotter and train with someone whose plan matches yours.
Standing in the gym not knowing what to do next, while subscription trackers drown the basics in features.
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.
- React 19
- Vite
- TypeScript
- Dexie / IndexedDB
- Tailwind 4
- PWA
- Vercel
- 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 lb mode silently stored kg and looked fine to a metric user. Convert at the widget boundary and assert the round-trip.
Screenshots from the app in actual use, not mockups.


The real thing
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 thinking
user · pains · gap · tools
Casual and returning lifters (me included) who blank on "what now?" mid-session and refuse to pay a subscription for a logbook.
Target user
- 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
Pain points
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.
Gap in the market
- Claude Code + designer/QA agents (build)
- Playwright (verification)
- Dexie/IndexedDB
- react-body-highlighter
- free-exercise-db (873 exercises)
AI + tooling
- 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)
Frameworks
- In daily use: it does the job it was built for, tracking history and holding me to a monthly consistency streak
- Fully offline, installable
- Spotter matching and plan sharing are still in the making, and untested until there are enough users in one gym to try it properly
- TBD: sessions logged per week, PR rate, spotter match rate once the social layer ships
Success metrics
Match tracker, training journal and AI coach for my own game.