OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证用于力量训练者、举重者、CrossFit 爱好者和新手的力量进度可视化追踪器及其他辅助工具。
AI 翻译
A strength progress visual tracker and other support utilities for strength lifters, powerlifters, crossfitters and new lifters.
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
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 — your lifting data is never stored on our servers. All analysis happens client-side in your browser. Chalk not included.查看完整 README ↗Strength Journeys is a free, open-source web app to visualize your barbell lifting data from Google Sheets. Privacy-first — your lifting data is never stored on our servers. 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.
Requires user data in a Google Sheet with columns: date, lift type, reps, weight (kg or lb).
Strength Journeys asks for exactly one Google scope: drive.file. This is Google's per-file scope, and it is the narrowest one that allows an app to write. It means:
You can revoke access at any time from your Google account permissions, and your sheet stays exactly where it is — it is your file, in your Drive, and it remains readable without this app.
Open our sample data format in Google Sheets (click File menu, then 'Make A Copy').
Your lifting data is never stored server-side. Google Sheet reads and writes are authenticated via Google OAuth and go through a Next.js API route proxy, but the rows are parsed and analyzed entirely client-side in your browser. The app does not persist your training data in a database — your Google Sheet remains the only copy.
The server does keep a small operational record per account (sign-in timestamps, which page you signed up from, the id of the sheet you linked, and when it was last read) so that onboarding, sheet recovery, and support requests work. It holds no lifts, no weights, and no analysis.
Framework & language:
UI & styling:
Data visualization:
Auth & data:
drive.file scope only, so read/write access is limited to the single linked sheetAI features:
Content & SEO:
content/articles/, rendered to HTML at build timeSee package.json for the full list of dependencies.
This repo has grown into a multi-tool lifting app (home dashboard, visualizer, session log, 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/home-dashboard/ — home dashboard cards (PRs, heatmaps, session highlights)src/components/visualizer/ — charting + visualizer UIsrc/components/ui-shell/ — app shell: layout, nav, footer, theme provider and backgroundssrc/components/ai-elements/ — the ai-elements chat pieces the AI assistant uses (add more from the upstream registry when needed)src/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/import/import-dispatcher.js — the single parsing entry point: parseData() for Google Sheets rows, parseImportedFile() for drag-and-drop CSV/XLSXsrc/lib/import/ — file decoding, dedupe, import profiles and provenance; src/lib/import/parsers/ holds one parser per supported export format plus shared normalize helperssrc/lib/processing-utils.js — shared processing/aggregation helpers (PRs, tonnage, timing logs, unit conversion)src/pages/api/sheet/read.js — authenticated Google Sheets + Drive metadata proxysrc/pages/api/sheet/ — the rest of the sheet surface: linking, provisioning, and the operation-oriented write routessrc/pages/api/auth/[...nextauth].js — NextAuth Google OAuth setup + token refreshsrc/lib/articles.js — markdown article store: frontmatter, build-time HTML and related-article helpersnext-auth) and picks a spreadsheet.use-userlift-data fetches /api/sheet/read via SWR.parseData() normalizes rows into canonical lift entries.src/pages/<tool>.js, then add/adjust feature components under src/components/<feature>/src/lib/import/parsers/strength-journeys-parser.js and the shared parser-utilities.jssrc/components/, src/components/ui/, src/styles/globals.csssrc/lib/import/parsers/ (copy the shape of hevy-parser.js), then register its detection in import-dispatcher.js. There is a regression script for this — npm run validate:imports, which checks synthetic sample rows kept inside the scripts in scripts/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.main and deleted after merging.Strength Journeys unites and extends features from earlier projects by the same author:
content/articles/ is licensed under CC BY-SA 4.0. Images, quotations from other authors and the Strength Journeys name and logo are not covered. See content/LICENSE.md for how to credit an article and the full exclusions.