Skip to content

Features

Generated by node scripts/check-features.ts --write from docs/features.json and the [Fxx] tags in test names. Do not edit by hand.

62 of 62 features are proven by tests (βœ… done, 🟑 partly done).

ID Status Feature Where in gymgym Tests Note
F01 βœ… Body-weight tracking with chart, goal line, gains/losses coloured toward the goal Stats β†’ Body weight; Home body-weight card; logBodyweight apps/web/e2e/app.spec.ts
packages/api/test/features.test.ts
F02 βœ… Weekly plan: a routine per weekday Plan β†’ Weekly plan; setWeekday; domain plan.ts apps/web/e2e/app.spec.ts
packages/api/test/features.test.ts
packages/domain/test/training.test.ts
F03 🟑 Exercise library: 1,324 exercises, searchable, animated demos, localized instructions packages/catalog; Exercises tab; instruction packs per locale apps/web/test/exercises.test.ts
packages/catalog/test/catalog.test.ts
Animated demos are gated behind MEDIA_BASE_URL: the media is Β© Gym visual and needs a licence.
F04 βœ… Reschedule any day without touching the weekly plan Home week strip β†’ day sheet; rescheduleDay / setDayOverride apps/web/e2e/app.spec.ts
packages/api/test/features.test.ts
packages/domain/test/training.test.ts
F05 βœ… Guided workouts: today’s session, body-weight check-in, pre-filled weights, rest timer, PR detection, per-exercise working weight Workout view; nextTargets; finishWorkout records; working-weight prompt apps/web/e2e/app.spec.ts
apps/web/test/workout-store.test.ts
packages/api/test/features.test.ts
packages/domain/test/training.test.ts
F06 βœ… Keep the screen awake while training (re-acquired after tab switches; switchable) Workout view useWakeLock; Settings β†’ Keep screen awake packages/api/test/features.test.ts
F07 βœ… Supersets: build them, log back-to-back, rest only after the pair Routine editor superset link; workout nextInSuperset apps/web/test/workout-store.test.ts
packages/api/test/features.test.ts
F08 βœ… Timed exercises with a work timer that logs the time actually held, optionally loaded SetMode time; work timer; time progression apps/web/test/workout-store.test.ts
packages/api/test/features.test.ts
packages/domain/test/progression.test.ts
F09 βœ… Progression rules: linear, Greyskull LP, double, time; per routine with per-exercise override; reasons; stalls and deloads computed from the log packages/domain progression.ts; reason.* strings apps/web/e2e/app.spec.ts
packages/api/test/features.test.ts
packages/domain/test/progression.test.ts
packages/domain/test/reasons.test.ts
F10 βœ… Estimated 1RM per exercise naming its source set, curve, calculator, no estimate above 12 reps domain onerm.ts; exercise sheet packages/api/test/features.test.ts
packages/domain/test/training.test.ts
F11 βœ… Effort per set (RIR or RPE), off by default, each set keeps its scale, stepping rules domain effort.ts; workout effort cell; Settings apps/web/e2e/app.spec.ts
apps/web/e2e/training.spec.ts
packages/api/test/features.test.ts
packages/domain/test/insights.test.ts
packages/domain/test/training.test.ts
F12 βœ… Effort statistics: average, near-failure share, rated share, weekly chart, distribution Stats β†’ Effort; viewer.effort packages/api/test/features.test.ts
packages/domain/test/training.test.ts
F13 βœ… Bodyweight exercises: no load column, added load, repsβ†’sets with a ceiling domain progression bodyweight; exercise settings packages/api/test/features.test.ts
packages/domain/test/progression.test.ts
packages/domain/test/training.test.ts
F14 βœ… Reps per side for unilateral work (log total, show split, step in twos) domain progression perSide; workout set rows packages/domain/test/progression.test.ts
F15 βœ… Cardio: time + speed SetMode cardio packages/api/test/features.test.ts
packages/domain/test/progression.test.ts
F16 βœ… Share a plan (file and link), merge on import, optional week takeover, printable PDF Plan β†’ Share; planFile/importPlan/createPlanShare; /share/[token]; /app/print apps/web/e2e/app.spec.ts
packages/api/test/features.test.ts
packages/domain/test/plan-share.test.ts
F17 βœ… Filter by equipment with adaptive facets ordered by popularity apps/web lib/exercises.ts equipmentFacets apps/web/e2e/app.spec.ts
apps/web/test/exercises.test.ts
F18 βœ… Custom exercises: name + body part, description, edit/delete, behave like built-ins saveCustomExercise/deleteCustomExercise; exercise sheet apps/web/e2e/app.spec.ts
packages/api/test/features.test.ts
packages/domain/test/training.test.ts
F19 βœ… Activity heatmap (year, by time trained) Stats β†’ Activity; viewer.activity packages/api/test/features.test.ts
packages/domain/test/training.test.ts
F20 βœ… Muscle map: period balance, untrained muscles, routine preview, finish screen, hard-sets mode, male/female body-map.tsx; muscleBalance; routine editor; workout summary apps/web/test/ui-rules.test.ts
packages/api/test/features.test.ts
packages/domain/test/training.test.ts
F21 βœ… Push notifications: rest timer with the app closed, workout-day reminder in the user’s timezone RestTimer Durable Object; cron runReminders; Settings β†’ Notifications packages/api/test/features.test.ts
packages/domain/test/training.test.ts
F22 βœ… Sign-in and per-user data: passkeys (+ Google, GitHub), sign out, sign out everywhere Better Auth; /login; Settings β†’ Account apps/web/e2e/app.spec.ts
packages/api/test/features.test.ts
F23 βœ… Admin dashboard: users with counts and last activity, drill-down, live training now, disable accounts, invite-only codes Admin view; admin GraphQL; INVITE_ONLY packages/api/test/features.test.ts
F24 🟑 Light/dark themes and 8 accent colours with contrast-picked label colours design/DESIGN.md β†’ styles/design-tokens.css (stitch2 tokens); Settings β†’ Theme apps/web/e2e/app.spec.ts
apps/web/test/ui-rules.test.ts
packages/api/test/features.test.ts
Light and dark themes are done. One accent (Ember) instead of eight: DESIGN.md is the single source of the palette, so it is not a user setting.
F25 βœ… 12 UI languages; numbers and dates follow the UI language apps/web/src/i18n apps/web/e2e/app.spec.ts
apps/web/test/i18n.test.ts
packages/api/test/features.test.ts
F26 βœ… Import from FitNotes, Strong, Hevy and Apple Health with a summary, name matching, RPE, idempotent domain import/*; Settings β†’ Import; importHistory apps/web/e2e/app.spec.ts
packages/api/test/features.test.ts
packages/domain/test/import.test.ts
F27 βœ… JSON backup export/restore and guest mode viewer.backup / restoreBackup; anonymous sign-in apps/web/e2e/app.spec.ts
packages/api/test/features.test.ts
F28 βœ… Installable PWA with offline workout logging manifest + service worker; SDK offline queue apps/web/e2e/app.spec.ts
apps/web/test/workout-store.test.ts
packages/sdk/test/client.test.ts
F29 βœ… Rest timer anchored to timestamps with βˆ’15 s / +15 s / skip, sound and vibration workout-store rest; RestBar apps/web/e2e/app.spec.ts
apps/web/test/workout-store.test.ts
F30 βœ… Minimize the exercise animation during a workout (remembered) ExerciseMedia compact; settings.demoMinimized packages/api/test/features.test.ts
F31 βœ… Home: week strip, today’s session, body weight, streak Home view apps/web/e2e/app.spec.ts
packages/api/test/features.test.ts
packages/domain/test/training.test.ts
F32 βœ… Per-exercise progress card: top set, 1RM and effort curves exerciseStats; exercise sheet chart packages/api/test/features.test.ts
packages/domain/test/training.test.ts
F33 βœ… Numeric fields accept a comma decimal and keep partial input domain parseDecimal; NumField packages/domain/test/training.test.ts
F34 βœ… Units kg / lb (weights stored in kg, converted per row on import) settings.unit; fmt.weight packages/api/test/features.test.ts
F35 βœ… Starter plans loadStarterPlan (PPL, full body, upper/lower) apps/web/e2e/app.spec.ts
packages/api/test/features.test.ts
packages/domain/test/starter.test.ts
F36 βœ… Multi-user isolation (row- and column-level security) ScopedData; D1 owner guards; isolation test packages/api/test/db.test.ts
packages/api/test/features.test.ts
packages/api/test/isolation.test.ts
F37 βœ… Workout history: browse, edit, delete History view; saveWorkout/deleteWorkout packages/api/test/features.test.ts
F38 βœ… Delete all training data resetData packages/api/test/features.test.ts
F39 βœ… Progression per routine slot; planned sessions start from the plan or the last session; an edited plan restarts progression domain slotHistory; nextTarget start/planChanged; Settings β†’ Planned sessions start from packages/api/test/training-batch.test.ts
packages/domain/test/training-batch.test.ts
F40 βœ… Warm-ups (planned, ramped), drop sets and rest-pause bursts; out of progression and records SetKind; withPlannedExtras; routine editor counts; set-number menu; w:/d:/rp: in documents apps/web/e2e/training.spec.ts
packages/api/test/training-batch.test.ts
packages/domain/test/training-batch.test.ts
packages/sdk/test/documents.test.ts
F41 βœ… Plate loading per set from the plates owned (barbell, EZ, trap bar, Smith / no bar) domain plates.ts; workout set rows; Settings β†’ Plates and bars packages/domain/test/training-batch.test.ts
F42 βœ… Rest timer: pause, off switch, Ready with overtime, screen flash, rest per exercise workout-store restAfter/pauseRest; Settings β†’ Rest timer, Flash the screen apps/web/e2e/training.spec.ts
apps/web/test/workout-store.test.ts
packages/api/test/training-batch.test.ts
F43 βœ… Assisted machines progress by less assistance; resistance bands count as bodyweight domain fromCatalog assisted/band; ASSISTED_CODES; detectRecords packages/domain/test/training-batch.test.ts
F44 βœ… Favourite exercises sort first in the library and picker setFavourite; exercise sheet star; Favourites chip apps/web/e2e/training.spec.ts
packages/api/test/training-batch.test.ts
F45 βœ… The week starts on Monday or Sunday settings.weekStart; weekDates/byWeekStart apps/web/e2e/training.spec.ts
packages/api/test/training-batch.test.ts
F46 βœ… Edit a saved workout’s date, start time and duration; log a past or missed workout History β†’ Log a past workout; workout editor; Home day sheet β†’ Log this day apps/web/e2e/training.spec.ts
F47 βœ… β€œDon’t count for progression” for an exercise or a workout; planned deload routines skipProgression; routine.deload; exerciseSessions forProgression packages/api/test/training-batch.test.ts
packages/domain/test/training-batch.test.ts
packages/sdk/test/documents.test.ts
F48 βœ… Change a running workout: swap, move, remove, pair as superset, pull in another routine; keyboard and swipe; list layout workout-store replace/move/remove/toggleSuperset/addRoutine; workout menus apps/web/e2e/training.spec.ts
F49 βœ… Muscle map modes: balance, fatigue (recovery) and strength (time since trained) Stats β†’ Muscle balance mode switch; viewer.muscleRecovery; domain recovery.ts apps/web/e2e/insights.spec.ts
packages/api/test/insights.test.ts
packages/domain/test/insights.test.ts
F50 βœ… Routine editor: replace an exercise keeping its config, copy a routine, print one routine RoutineEdit replace/copy; /print?routine= apps/web/e2e/training.spec.ts
F51 βœ… Balance between the main lifts, naming the weakest one Stats β†’ Lift balance; viewer.liftBalance; domain liftBalance apps/web/e2e/insights.spec.ts
packages/api/test/insights.test.ts
packages/domain/test/insights.test.ts
F52 βœ… Equipment profiles: the library, picker and muscle explorer follow the active one; the routine editor flags missing equipment Settings β†’ Equipment profiles; settings.equipmentProfiles/activeProfile; library profile chip apps/web/e2e/insights.spec.ts
packages/api/test/insights.test.ts
F53 βœ… Notes on an exercise during a workout, pinned to come back next time LoggedExercise.note/notePinned; viewer.pinnedNotes; note sheet apps/web/e2e/training.spec.ts
packages/api/test/training-batch.test.ts
packages/sdk/test/documents.test.ts
F54 βœ… Activity heatmap by time or by volume; weekly body-weight averages Stats β†’ Activity switch; ActivityDay.volume; Body weight β†’ Weekly averages apps/web/e2e/insights.spec.ts
packages/api/test/insights.test.ts
packages/domain/test/insights.test.ts
F55 βœ… Save a logged workout as a routine; copy a workout as text; explore exercises by muscle History β†’ workout β†’ Save as routine / Copy as text; Library and picker β†’ By muscle apps/web/e2e/insights.spec.ts
packages/domain/test/insights.test.ts
F56 βœ… Optional password sign-in, set in Settings; rename and remove passkeys PASSWORD_LOGIN=1; Settings β†’ Account β†’ Password / Passkeys; setPassword apps/web/e2e/app.spec.ts
packages/api/test/accounts.test.ts
Admin reset codes are not needed: passwords are added to accounts that already sign in with Google, GitHub or a passkey, which also restores access.
F57 βœ… Instance switches: guest accounts off, default language ALLOW_GUEST=0, DEFAULT_LANG; AppConfig.guestAccess/defaultLocale packages/api/test/accounts.test.ts
F58 βœ… Admin sign-in log Admin β†’ Recent sign-ins; admin.signIns (method, device, country; no IP; 90 days) packages/api/test/accounts.test.ts
F59 βœ… Sync status: what is waiting to upload, server reachability, sync now Settings β†’ Sync (/app/sync); the offline banner links to it apps/web/e2e/training.spec.ts
F60 βœ… Import straight from Hevy with an API key Settings β†’ Import β†’ Hevy API key; gymgym import hevy; viewer.hevyWorkouts + fetchHevy apps/web/e2e/app.spec.ts
packages/api/test/hevy.test.ts
packages/domain/test/hevy-api.test.ts
F61 🟑 Your own photo on your own exercises, with location data removed Exercise sheet β†’ Add a photo (custom exercises); setCustomExercisePhoto; R2 bucket MEDIA apps/web/e2e/training.spec.ts
packages/api/test/media.test.ts
Photos only; video uploads are not supported.
F62 βœ… More UI languages: Ukrainian, Hungarian, Thai, Brazilian Portuguese and Arabic (right to left) apps/web/src/i18n/locales/{uk,hu,th,pt-BR,ar}.ts; dir=rtl for Arabic; pt-BR negotiated before pt apps/web/test/i18n.test.ts Exercise names stay English; instructions fall back to English in these languages.