A weight-training log: build routines, tick off sets as you do them, and see whether the weight on each exercise is going up over time.
Build me a weight-training log that replaces Hevy: routines, sets ticked off as I do them, and proof that the weight is going up. STACK - A PWA that works entirely offline, or a native app if you want the watch and health integrations properly - Local storage first: IndexedDB or SQLite on device. A gym has no signal, and an app that needs one is useless - Optional sync server: Node 20+ with Fastify, SQLite through better-sqlite3 - Caddy in front THE DATA MODEL - exercises: id, name, muscle_group, secondary_muscles_json, equipment, kind, is_custom, notes — kind is weight and reps, reps only, time, distance, or distance and time - routines: id, name, notes, folder_id, position - routine_exercises: id, routine_id, exercise_id, position, superset_group, target_sets, target_reps, target_weight, rest_seconds, notes - workouts: id, routine_id, name, started_at, ended_at, notes, bodyweight_kg - sets: id, workout_id, exercise_id, position, kind, weight_kg, reps, rpe, rir, distance_m, duration_s, is_warmup, is_completed, completed_at — kind is normal, warmup, drop, failure - personal_records: derived, never stored — best weight per rep count, best estimated one-rep max, best volume, per exercise - measurements: id, kind, value, unit, at — bodyweight, circumferences, whatever is tracked - Everything in one canonical unit internally, with the display unit a preference. Store kilograms and metres, show pounds and miles if that is what the user wants — mixing units in storage is unrecoverable LOGGING A SET, WHICH IS THE WHOLE INTERACTION - The screen during a workout shows one exercise, its previous performance, and the sets as rows to fill - The previous session's numbers are pre-filled as the starting point. This is the single most important detail: nobody wants to type 100 and 8 again, they want to see what they did last time and change one of them - Big targets. This is used with sweaty hands, one-handed, in a hurry, between sets - A tick per set, and the rest timer starts by itself from the routine's rest for that exercise - Plate maths shown for a barbell: what to load each side to reach the target - Warmup sets marked and excluded from records and from volume - Editing any set afterwards, including a whole past workout THE REST TIMER - Starts automatically on completing a set, counts down, and notifies at zero even with the screen locked - Adjustable in place with two taps, and the adjustment can be saved to the routine - Keeps running if the app is backgrounded, computed from a timestamp rather than a ticking counter PROGRESSION, WHICH IS THE POINT - Per exercise: a chart of top-set weight, estimated one-rep max, and total volume over time - Estimated one-rep max from a named formula, with the formula stated. Epley and Brzycki disagree, and a number without its formula means nothing - Personal records surfaced the moment they happen, during the workout, because that is when it is motivating - Volume per muscle group per week, which is what actually drives programme decisions - Frequency: sessions per week, and which muscle groups are being neglected - Every number computed at query time from sets ROUTINES - Build a routine from exercises with target sets, reps and rest - Supersets as a group that alternates - Progression rules per exercise if wanted: add weight when the top set hits the rep target for two sessions - Duplicate a routine, and a workout can deviate from it freely — the routine is a starting point, never a cage - Folders for training blocks THE EXERCISE LIBRARY - A few hundred exercises with muscle groups and equipment, which is the tedious part. Assemble it from a permissively licensed open dataset rather than typing it, and credit the source - Custom exercises with the same fields - No animations needed. A clear name and the muscles worked is enough, and the licensing of exercise illustrations is a swamp SYNC AND ESCAPE - Optional sync of the whole database, last-write-wins per row with a version, conflicts kept rather than discarded - Import from the common exporters' CSV formats, so a training history moves with you - Export everything as CSV and JSON in two taps. A training log is years of your own effort and must never be trapped WHAT NOT TO BUILD - The social feed. It is what keeps people logging in the original, and it needs other people — a feed of one is worse than nothing. If you want the accountability, share a workout as an image or a link and stop there OPERATIONS - If there is a server: .env with DATABASE_PATH, BASE_URL, SESSION_SECRET; migrations on boot; nightly backup - On device: works offline forever, and the export is two taps WHAT MATTERS MOST The logging screen and pre-filled previous numbers. Build that one screen, use it for a fortnight of real training, and fix everything that annoyed you. This app is used forty times a month in a noisy room and every extra tap is felt. Give me the app, the sync server if you want one, the exercise dataset with its licence noted, and a README with build steps and the export format documented.
What you lose
- A large exercise library with animations, which is tedious to assemble
- A social feed of friends' workouts, which is what keeps people logging
- Apple Watch and Health integration
If you would rather not build
- Any open training log
- A notes app, which many lifters use
- A paper notebook, which is faster than most apps
What it costs
as published on their pricing page
| Plan | Billed monthly | Billed yearly | Last read |
|---|---|---|---|
| — | $3.99/mo | — | — |
Their pricing page is where these came from. Seeing a different price? Tell us.
The escape hatch
open source · no votes, no paid placement
wger
$0Self-hosted fitness tracking with an exercise database and routines.
wger-project/wgerfree · open source
FitTrackee
$0Self-hosted activity tracking, for the endurance side of the same job.
SamR1/FitTrackeefree · open source
Why this verdict
our own opinion · changed only by a person
88/100
Verdict yes at 88. Copying the routine into the workout rather than referencing it is the decision that keeps a year of history correct.
History
tracked since 10 Aug 2026 · nothing is ever overwritten
Questions about Hevy
answered from the record above
Is Hevy free?
No — the plan we track is $3.99 a month. Hevy Pro at around $3.99/month billed monthly, cheaper annually.
Can you replace Hevy by building your own?
YES. Replaceable in one session with an AI coding agent. Replacement score 88 out of 100, build time one session. Read what you lose before you decide.
How much does Hevy cost?
$3.99 a month on Pro — $47.88 a year. Recorded 10 Aug 2026.
What do you lose by replacing Hevy?
A large exercise library with animations, which is tedious to assemble; A social feed of friends' workouts, which is what keeps people logging; Apple Watch and Health integration. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Hevy?
Yes: wger, FitTrackee. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

