Skip to content

benasbarciauskas/RepLog

Repository files navigation

RepLog logo

RepLog

Turn your old workout notes into a coach — then log every set live.
Private, offline-first strength tracking — import, log, coach, and program your training, all in your browser. No account, no server; on-device by default.

Open the app »  ·  Install as a PWA  ·  Report a bug  ·  Request a feature

License: MIT Installable PWA 100% on-device data React 19 TypeScript Vite 7 PRs welcome GitHub stars

RepLog — dashboard, live logger, and coach views

Note

On-device by default. No account, no sign-up, no cloud — your data lives in your browser (IndexedDB) and works fully offline once installed. The one optional exception is AI parse: if you choose to add your own free API key, the note text you ask it to parse is sent to that provider — nothing else, and only when you use it.

✨ What is RepLog?

RepLog is a workout tracker that does two things really well:

  1. Imports the workout notes you already have — screenshots, pasted text, even a screen-recording of your notes app — reads them with on-device OCR, cleans up the mess, and turns years of scattered logs into a structured training history.
  2. Logs your workouts live — start a session, search an exercise, and record set-by-set with previous-session hints, an auto rest timer, a plate calculator, and reusable routines.

On top of that history it builds progress charts, a trends view (PR timeline + training-block comparison), a strength coach that scores how balanced your lifts are, and a program engine that generates a research-based weekly plan and auto-progresses it from what you lift.

It is 100% client-side: a React + TypeScript app that runs in your browser, stores data on your device, and installs as a Progressive Web App on your phone or laptop. Free and open source.

🚀 Features

  • 📸 Import notes three ways — upload screenshots, paste plain text, or drop in a phone screen-recording. In-browser OCR extracts the text; a relevance filter automatically keeps the workout notes and drops everything unrelated.
  • 🧹 Smart messy-notes parser — normalizes inconsistent exercise names and pulls out dates, bodyweight, the training split, and every set's reps and weight. A review step lets you confirm or fix anything before it's saved.
  • 🏋️ Live workout logger — start or resume a session, search exercises, and log set-by-set with previous-session hints, warm-up sets, RPE, an automatic rest timer, and a built-in plate calculator.
  • 🔁 Routines & templates — save reusable routines and load them in one tap, then finish to commit the session to history.
  • 📈 Progress that means something — all-time bests, estimated 1RM, and per-exercise progression graphs with metric toggles (heaviest weight, est. 1RM, volume, reps) and selectable time ranges.
  • 🗂️ Full history — per-session set history, bodyweight trend, training-block and split history, and a complete workout log.
  • 🧠 Strength coach — a 0–100 strength-balance score with per-area ring gauges, plus recommendation cards that flag underdeveloped muscles by comparing your lifts against established strength-ratio standards (e.g. overhead press vs. bench, squat vs. bench).
  • 📊 Weekly volume insights — sets per muscle over the last week vs. evidence-based MEV/MAV ranges, with "add N sets here" recommendations.
  • 🗓️ Program engine — generate a weekly plan from your goal, experience, days/week, split, session length, and recovery (sleep/stress). It picks exercises by muscle, sets rep ranges + RIR, auto-progresses with double progression + daily undulating periodization, and lets you swap any lift for a similar one.
  • 📅 Trends — a PR timeline (every weight + est-1RM record, newest first) and side-by-side training-block comparison.
  • 💾 Backup & restore — export all your data to a JSON file and import it on another device.
  • 🤖 Optional AI parse — for messy notes the built-in parser can't crack, bring your own free OpenRouter key (stored on your device) to extract workouts with an LLM. Fully opt-in; the deterministic parser stays the default.
  • 📱 Web + native — an installable PWA (offline on iOS/Android/desktop) plus a native Expo app in mobile/ sharing the same engine.
  • 🔒 Private by default — no account, no sign-up, no backend. Everything runs and stays on your device; the only optional network feature is AI parse, with your own key.

📸 Screenshots

Dashboard Coach
Dashboard with progress overview Strength-balance coach with ring gauges
Live logger Import
Live set-by-set workout logger Importing and reviewing parsed workout notes
Settings Per-exercise progress
Settings — units, rest, plates, release channel, and backup & restore Per-exercise progression graph

💡 Why & how it works

Most people already have a training history — it's just trapped in notes apps, photos, and spreadsheets in a hundred different formats. RepLog's whole premise is that your past data is the most valuable input a tracker can have, so it meets you where that data already lives.

Import → parse → review → save. You hand RepLog a screenshot, some pasted text, or a screen-recording of your notes. It runs OCR in your browser, filters out anything that isn't a workout, and parses the rest into structured sessions — normalizing exercise names and extracting dates, bodyweight, splits, and sets/reps/weight. You get a review screen to fix anything before it's committed.

Log live, learn over time. Going forward you log workouts set-by-set in the app. Each new entry feeds the progress charts and the coach, so the picture of your training keeps sharpening with every session.

Coach by the numbers. The coach compares your key lifts against well-established strength-ratio standards and surfaces where you're out of balance — turning raw logs into a clear "here's what to work on" without any guesswork or guru opinions.

Program your training. Beyond tracking, RepLog builds a weekly program from a few inputs — using research-based volume landmarks (MEV/MAV), goal-appropriate rep ranges, and your recovery (sleep/stress) — then progresses it automatically from what you actually lift, and swaps exercises on request. Optionally refine the plan with your own AI key.

🔐 Private, offline, on-device

This is the part that matters most, so it's worth being explicit:

  • On-device by default. OCR, parsing, charts, the coach, trends, and the program engine all run on-device — there's no backend to send your data to. The sole exception is the optional AI parse, which only runs when you enable it with your own key.
  • No account, no sign-up. Open the app and start. The built-in parser, logger, coach, trends, and program engine need no key; AI parse is the one opt-in that does.
  • Local storage. All your workouts live in your browser's IndexedDB. Clearing site data or uninstalling removes them; nothing lingers on a server.
  • Works offline. Once installed as a PWA, RepLog loads and functions without a connection.

(back to top)

🏁 Getting started

Option 1 — Use the hosted app (recommended)

Open https://benasbarciauskas.github.io/RepLog/ in any modern browser. That's it — no install required to start logging.

Install it as a PWA so it works offline and lives on your home screen / dock:

  • iPhone / iPad (Safari): tap ShareAdd to Home Screen.
  • Android (Chrome): tap the menu → Install app / Add to Home screen.
  • Desktop (Chrome / Edge): click the install icon in the address bar, or the menu → Install RepLog.

Option 2 — Run from source

Prerequisites: Node.js ≥ 20

git clone https://github.com/benasbarciauskas/RepLog.git
cd RepLog
npm install
npm run dev          # open http://localhost:5173

Option 3 — Build & self-host

RepLog compiles to a folder of static files — host it on any static host or your own server, no backend required.

npm run build        # outputs static assets to /dist
npm run preview      # optional: preview the production build locally

Then deploy the contents of /dist to any static host (object storage + CDN, a static-site host, GitHub Pages, or a plain web server). Because there's no server-side component, there's nothing else to provision.

Option 4 — Native app (Expo)

A native iOS/Android build lives in mobile/ — Expo + expo-router, sharing this repo's parser, analytics, and coach logic, with on-device expo-sqlite storage.

cd mobile
npm install
npx expo start        # scan the QR code with Expo Go on your phone

See TUTORIAL.md → Native app via Expo for the Expo Go workflow and building/submitting a real binary with EAS (expo.dev).

(back to top)

🧰 Tech stack

Layer Tools
UI React 19, TypeScript
Build Vite 7, vite-plugin-pwa
Styling Tailwind CSS v4, shadcn/ui
Charts Recharts
Local data Dexie over IndexedDB (web), expo-sqlite (native)
OCR Tesseract.js
Native app Expo + expo-router, NativeWind
Delivery Installable PWA (static site) + native iOS/Android via Expo

Everything runs client-side. The OCR engine, the parser, the charts, and the coach all execute in the browser.

(back to top)

🗺️ Roadmap

  • Native mobile app (Expo / React Native) — core screens shipped in mobile/, reusing the same on-device import, parsing, and coaching logic
  • Local export / import (JSON) for moving data between devices — on web and mobile; encrypted sync is next
  • Optional cross-device sync (end-to-end encrypted)
  • More import formats and smarter exercise-name normalization
  • Program engine — research-based generator + auto-progression (double progression / DUP) + exercise swap + goal-based weekly volume insights (MEV/MAV)
  • Trends — PR timelines + per-block comparisons
  • Additional coach strength-ratio standards

See the open issues for the current backlog and to suggest something new.

(back to top)

🤝 Contributing

Contributions are very welcome — bug reports, feature ideas, and pull requests all help.

  1. Fork the repo and create a branch: git checkout -b feat/your-idea
  2. Make your change and run the app locally (npm run dev)
  3. Commit and open a pull request describing what and why

Browse the open issues for good places to start, and see CONTRIBUTING.md for the workflow and conventions.

(back to top)

📄 License

Distributed under the MIT License. See LICENSE for details.

(back to top)

Packages

 
 
 

Contributors

Languages