Strengthjourneys
A strength progress visual tracker and other support utilities for strength lifters, powerlifters, crossfitters and new lifters.
Install / Use
/learn @wayneschuller/StrengthjourneysREADME
Strength Journeys (strengthjourneys.xyz)
Interactive strength progress visualizations for barbell and other gym lifts
Strength Journeys is a free, open-source web app to visualize your barbell lifting data from Google Sheets. Privacy-first — no user data is stored on any server. All analysis happens client-side in your browser. Chalk not included.
Powerlifters and barbell weirdos will love this app, but our real target audience is the novice. If we can help someone start barbell training and keep them going for ten years, their life and their family will be transformed. Barbell strength training is one of the most effective things you can do for your health, longevity, and quality of life. Stronger people are harder to kill, more useful in general, and tend to live longer.
Features
- Big four lift cards — at-a-glance dashboard showing PRs, estimated 1RM, tonnage, and recent activity for squat, bench press, deadlift, and strict press
- Visualizer — interactive line charts of your lift history over time with E1RM (estimated one-rep max) curves
- Analyzer — activity heatmaps and PR tracking across all your lifts
- Tonnage tracking — volume analysis showing total weight moved over time
- One rep max calculator — estimate your 1RM from any rep/weight combination
- Strength level calculator — see how your lifts compare to strength standards
- 1000lb club calculator — track your squat/bench/deadlift total
- Warm-up sets calculator — generate warm-up ramp sets for any working weight
- Strength year in review — annual recap of your lifting highlights
- AI lifting assistant — chat-based analysis of your training data
- Gym timer — rest timer with audio cues
- Gym playlist leaderboard — community-voted workout playlists
Google Sheets as data source
Requires user data in a Google Sheet with columns: date, lift type, reps, weight (kg or lb). The app requests read-only access to your specific spreadsheet, which can be revoked at any time.
Open our sample data format in Google Sheets (click File menu, then 'Make A Copy').
Privacy
No user data is stored server-side. Google Sheet reads are authenticated via Google OAuth and requested through a Next.js API route proxy, then processed client-side in the browser. The app does not persist your lifting data in a database.
Tech stack
Framework & language:
- JavaScript (no TypeScript) with JSDoc for key function documentation
- Next.js 16 (Pages Router)
- React 19
- Deployed on Vercel with Vercel Analytics
UI & styling:
- Tailwind CSS v4 with 8 custom themes via CSS variables
- shadcn/ui components (Radix primitives)
- Lucide React icons
- Motion (Framer Motion) for animations
- Embla Carousel for carousels
- next-themes for theme switching
Data visualization:
- Recharts for line, area, and bar charts
- react-calendar-heatmap for activity heatmaps
- html2canvas-pro for share-to-clipboard image capture
Auth & data:
- NextAuth.js v4 with Google OAuth
- Google Sheets API for user lifting data (read-only)
- SWR for data fetching and caching
- Vercel KV for server-side storage (playlists, leaderboard)
AI features:
- Vercel AI SDK with OpenAI provider
- Streamdown for streaming markdown rendering
- Shiki for code syntax highlighting in AI responses
Content & SEO:
- Sanity CMS for articles
- next-seo and next-sitemap for SEO
See package.json for the full list of dependencies.
Codebase structure (quick contributor map)
This repo has grown into a multi-tool lifting app (analyzer, visualizer, calculators, AI assistant, playlists, articles) that shares a common app shell and lifting-data pipeline.
src/pages/— Next.js Pages Router routes (tool pages, article pages, API routes)src/pages/_app.js— global providers + app layout wrapper (theme, auth, lifting data, athlete bio, timer)src/components/— feature UI and shared UIsrc/components/analyzer/— PR Analyzer dashboard cardssrc/components/visualizer/— charting + visualizer UIsrc/components/ai-elements/— composable chat UI building blocks used by the AI assistantsrc/components/ui/— shadcn/Radix-based primitivessrc/hooks/use-userlift-data.js— central Google Sheets fetch/parse/cache context (SWR + demo mode + derived metrics)src/lib/parse-data.js— normalizes raw Google Sheets rows into the app’s canonical lift-entry formatsrc/lib/processing-utils.js— shared processing/aggregation helpers (PRs, tonnage, timing logs, unit conversion)src/pages/api/read-gsheet.js— authenticated Google Sheets + Drive metadata proxysrc/pages/api/auth/[...nextauth].js— NextAuth Google OAuth setup + token refreshsrc/lib/sanity-io.js— Sanity CMS fetch helpers for article pages and related content
Core data flow (at a glance)
- User signs in with Google (
next-auth) and picks a spreadsheet. use-userlift-datafetches/api/read-gsheetvia SWR.- API route reads Google Sheets + Drive metadata and returns JSON.
parseData()normalizes rows into canonical lift entries.- Shared derived metrics (PRs, tonnage, lift types, session lookups) are computed once in context and consumed by pages/cards.
Common contributor entry points
- Build a new tool page (or improve an existing one): start in
src/pages/<tool>.js, then add/adjust feature components undersrc/components/<feature>/ - Improve parser tolerance for real-world spreadsheets (header variations, blank-row patterns, date/weight formats):
src/lib/parse-data.js - UI polish and usability improvements (layout spacing, card composition, mobile tweaks, theme details):
src/components/,src/components/ui/,src/styles/globals.css - Add import support for other lifting apps/export formats: branch from
src/lib/parse-data.js, reusesrc/lib/parse-turnkey-importer.jsas an example, or add a new parser module undersrc/lib/
Branch strategy
stable— Production branch. Deploys to strengthjourneys.xyz.main— Development branch. Deploys to a Vercel preview URL for testing. Has informative console logging of processing timings and any errors.- Feature branches are created from
mainand deleted after merging.
Project history
Strength Journeys unites and extends features from earlier projects by the same author:
- onerepmaxcalculator.xyz — standalone one rep max calculator (predecessor to the current calculator page)
- powerlifting_strength_tracker_js — the original E1RM visualization prototype built with vanilla JS and Chart.js, which evolved into the Strength Journeys visualizer
Related Skills
openhue
344.1kControl Philips Hue lights and scenes via the OpenHue CLI.
sag
344.1kElevenLabs text-to-speech with mac-style say UX.
weather
344.1kGet current weather and forecasts via wttr.in or Open-Meteo
tweakcc
1.5kCustomize Claude Code's system prompts, create custom toolsets, input pattern highlighters, themes/thinking verbs/spinners, customize input box & user message styling, support AGENTS.md, unlock private/unreleased features, and much more. Supports both native/npm installs on all platforms.
