引言
"Modern fitness coaching platform with comprehensive exercise database."
这是「一天一个开源项目」系列的第 41 篇文章。今天介绍的项目是 Workout.cool (GitHub)。
想找一个开源、可自托管、功能完整的健身管理平台,能创建训练计划、跟踪进度、浏览运动数据库,但市面上的方案要么功能单一、要么已停止维护?Workout.cool 是原 workout.lol 项目主要贡献者因原项目被放弃而重新创建的现代化健身教练平台 :基于 Next.js + TypeScript + Prisma + PostgreSQL ,采用 Feature-Sliced Design 架构,支持训练计划创建 、进度追踪 、全面的运动数据库 (含视频演示与详细说明)、多语言(8+ 语言),并提供 Docker 一键部署。适合个人健身、教练管理学员、或作为健身应用的起点。
为什么值得看?
- 🏋️ 功能完整:训练计划、进度追踪、运动数据库、视频演示
- 🎨 现代化架构:Next.js App Router + Feature-Sliced Design,代码组织清晰
- 🌍 多语言:支持 8+ 语言(中文、英文、日文、韩文、法文、德文、西班牙文、葡萄牙文、俄文)
- 🐳 Docker 部署:一键启动,数据库迁移与种子数据自动处理
- 📊 数据导入:支持 CSV 批量导入运动数据,可扩展数据库
- 🔓 开源免费:MIT 协议,可自托管,无商业限制
你将学到什么
- Workout.cool 的定位与项目背景(workout.lol 的延续)
- Feature-Sliced Design 在 Next.js 项目中的应用
- 训练计划创建与进度追踪的实现思路
- 运动数据库的导入与管理
- Docker 部署与自托管配置
- 与同类健身应用的对比
前置知识
- 了解 Next.js 和 TypeScript 的基本使用
- 了解 Docker 的基本操作(可选)
- 对健身/训练计划有基本概念(可选)
项目背景
项目简介
Workout.cool 是一个现代化的开源健身教练平台,允许用户创建训练计划、跟踪进度,并访问包含详细说明和视频演示的全面运动数据库。
项目背景故事:
作者是原 workout.lol 项目的主要贡献者。原项目因运动视频授权成本过高、合作伙伴问题等原因被出售,新所有者接手后也因同样问题放弃维护。作者尝试联系新所有者 9 个月无果后,决定重新创建一个更现代、更可靠、更易维护 的版本,即 Workout.cool。
解决的核心问题:
- 开源健身平台缺乏完整功能(训练计划 + 进度追踪 + 数据库)
- 现有项目维护不善或被放弃
- 需要可自托管、无商业限制的健身管理工具
- 需要多语言支持以适应全球用户
面向的用户:
- 个人健身爱好者,需要管理自己的训练计划与进度
- 健身教练,需要为学员创建和管理训练计划
- 开发者,希望基于此项目构建自己的健身应用
- 团队,需要自托管的健身管理平台
作者/团队介绍
- 作者 :Snouzy (GitHub)
- 背景:原 workout.lol 项目的主要贡献者,因原项目被放弃而创建 Workout.cool
- 理念:为开源健身社区提供可靠、现代、易维护的平台
项目数据
- ⭐ GitHub Stars: 约 7.1k
- 🍴 Forks: 约 549
- 📦 版本: v1.3.2(持续更新中,412+ commits)
- 📄 License: MIT(完全开源,自由使用)
- 🌐 官网 : workout.cool
- 💬 社区 : Discord、Product Hunt
- 👥 贡献者: 活跃的社区参与
技术栈:
- 前端: Next.js 14+ (App Router), React, TypeScript, Tailwind CSS, Radix UI, shadcn/ui
- 后端: Next.js API Routes, Prisma ORM
- 数据库: PostgreSQL
- 认证: Better Auth
- 架构: Feature-Sliced Design (FSD)
主要功能
核心作用
Workout.cool 的核心作用是:提供一个完整的健身管理平台,包括:
- 训练计划创建:创建和管理个性化的训练计划
- 进度追踪:记录训练历史,追踪进度和统计数据
- 运动数据库:访问包含详细说明、视频演示的全面运动数据库
- 多语言支持:支持 8+ 种语言,适应全球用户
- 数据导入:支持 CSV 批量导入运动数据,扩展数据库
使用场景
-
个人健身管理
- 创建个人训练计划,记录每次训练,追踪力量、耐力等指标变化
-
教练管理学员
- 教练为学员创建训练计划,学员记录完成情况,教练查看进度
-
团队健身挑战
- 团队共享训练计划,成员记录完成情况,查看排行榜和统计
-
健身应用开发
- 作为基础平台,二次开发定制化的健身应用
-
自托管健身平台
- 企业或组织自托管,保护用户数据隐私
快速开始
环境要求:Node.js 18+、pnpm 8+、Docker(可选)
方式一:Docker 部署(推荐)
bash
# 1. 克隆项目
git clone https://github.com/Snouzy/workout-cool.git
cd workout-cool
# 2. 复制环境变量
cp .env.example .env
# 3. 启动开发环境(自动启动数据库、运行迁移、种子数据、启动 Next.js)
make dev
# 4. 访问 http://localhost:3000
停止服务:make down
方式二:手动安装
bash
# 1. 安装依赖
pnpm install
# 2. 配置环境变量
cp .env.example .env
# 3. 设置 PostgreSQL 数据库
createdb -h localhost -p 5432 -U postgres workout_cool
# 4. 运行数据库迁移
npx prisma migrate dev
# 5. 启动开发服务器
pnpm dev
核心特性
-
训练计划管理
- 创建、编辑、删除训练计划
- 支持多天计划、循环计划
- 计划模板和自定义计划
-
进度追踪
- 记录每次训练的完成情况
- 追踪重量、次数、组数、时长等指标
- 可视化进度图表和统计
-
运动数据库
- 包含大量运动项目,每个运动包含:
- 名称(多语言)
- 详细说明和介绍
- 视频演示链接
- 图片预览
- 运动类型和主要肌肉群
- 支持搜索、筛选、分类浏览
- 包含大量运动项目,每个运动包含:
-
数据导入
- CSV 格式批量导入运动数据
- 支持完整属性(类型、肌肉群、视频链接等)
- 提供示例数据和导入脚本
-
多语言支持
- 支持 8+ 种语言:中文、英文、日文、韩文、法文、德文、西班牙文、葡萄牙文、俄文
- 界面和内容均可本地化
-
现代化 UI
- 基于 Tailwind CSS 和 Radix UI
- 响应式设计,支持移动端
- 使用 shadcn/ui 组件库
-
Feature-Sliced Design
- 清晰的代码组织结构
- 功能模块化,易于扩展和维护
- 符合现代前端架构最佳实践
-
Docker 支持
- 一键部署,包含数据库
- 支持 Docker Compose
- 生产环境部署指南
项目优势
| 对比项 | Workout.cool | 商业健身 App | 简单记录工具 |
|---|---|---|---|
| 开源 | ✅ MIT,完全开源 | ❌ 闭源 | ⚠️ 部分开源 |
| 自托管 | ✅ 支持 Docker 一键部署 | ❌ 仅云端 | ⚠️ 视项目而定 |
| 功能完整 | ✅ 计划+追踪+数据库 | ✅ 功能丰富 | ⚠️ 功能单一 |
| 多语言 | ✅ 8+ 种语言 | ⚠️ 视产品而定 | ⚠️ 常仅英文 |
| 数据控制 | ✅ 完全自主 | ❌ 数据在厂商服务器 | ⚠️ 视项目而定 |
| 可定制 | ✅ 开源可二次开发 | ❌ 无法定制 | ⚠️ 视项目而定 |
| 成本 | ✅ 免费 | ⚠️ 订阅制 | ✅ 免费 |
为什么选择 Workout.cool?
- 功能完整:训练计划、进度追踪、运动数据库一应俱全
- 现代化架构:Next.js + FSD,代码质量高,易于扩展
- 开源免费:MIT 协议,可自托管,无商业限制
- 多语言:支持 8+ 种语言,适应全球用户
- 活跃维护:作者持续更新,社区活跃
项目详细剖析
架构设计
Workout.cool 采用 Feature-Sliced Design (FSD) 架构,结合 Next.js App Router:
bash
src/
├── app/ # Next.js 页面、路由和布局
├── processes/ # 业务流程(跨功能)
├── widgets/ # 可组合的 UI 组件(Sidebar, Header)
├── features/ # 业务单元(auth, exercise-management)
├── entities/ # 领域实体(user, exercise, workout)
├── shared/ # 共享代码(UI, lib, config, types)
└── styles/ # 全局 CSS、主题
架构原则:
- 功能驱动:每个功能独立且可复用
- 清晰的领域隔离 :
shared→entities→features→widgets→app - 一致性:业务逻辑、UI、数据层保持一致
示例功能结构:
bash
features/
└── exercise-management/
├── ui/ # UI 组件(ExerciseForm, ExerciseCard)
├── model/ # Hooks、状态管理(useExercises)
├── lib/ # 工具函数(exercise-helpers)
└── api/ # Server actions 或 API 调用
核心模块
1. 训练计划模块
- 创建计划:用户选择运动、设置组数/次数/重量、安排训练日
- 计划模板:提供预设模板,用户可基于模板创建
- 计划执行:记录每次训练的完成情况
2. 进度追踪模块
- 训练记录:记录每次训练的详细信息(日期、运动、重量、次数等)
- 统计分析:计算总训练次数、总时长、力量增长趋势等
- 可视化:图表展示进度变化
3. 运动数据库模块
- 数据存储:PostgreSQL 存储运动信息(名称、说明、视频、图片、属性)
- 搜索与筛选:按名称、类型、肌肉群等搜索和筛选
- 多语言:支持多语言名称和说明
4. 数据导入模块
- CSV 导入:支持从 CSV 文件批量导入运动数据
- 数据验证:验证导入数据的格式和完整性
- 属性映射:支持运动类型、主要肌肉群等属性的导入
技术实现
1. Next.js App Router
使用 Next.js 14+ 的 App Router,支持:
- 服务端组件和客户端组件
- Server Actions 处理表单和数据操作
- 路由和布局系统
2. Prisma ORM
使用 Prisma 进行数据库管理:
- 类型安全的数据库访问
- 数据库迁移管理
- 种子数据支持
3. Feature-Sliced Design
遵循 FSD 原则:
- shared:共享的 UI 组件、工具函数、类型定义
- entities:领域实体(User, Exercise, Workout)
- features:业务功能(认证、运动管理、训练计划)
- widgets:可组合的 UI 组件(侧边栏、头部)
- app:Next.js 页面和路由
4. 认证系统
使用 Better Auth 进行用户认证:
- 支持多种认证方式(邮箱、OAuth 等)
- 会话管理
- 权限控制
数据导入
CSV 格式要求:
csv
id,name,name_en,description,description_en,full_video_url,full_video_image_url,introduction,introduction_en,slug,slug_en,attribute_name,attribute_value
157,"Fentes arrières à la barre","Barbell Reverse Lunges","<p>Stand upright...</p>","<p>Stand upright...</p>",https://youtube.com/...,https://img.youtube.com/...,slug-fr,slug-en,TYPE,STRENGTH
157,"Fentes arrières à la barre","Barbell Reverse Lunges","<p>Stand upright...</p>","<p>Stand upright...</p>",https://youtube.com/...,https://img.youtube.com/...,slug-fr,slug-en,PRIMARY_MUSCLE,QUADRICEPS
导入命令:
bash
# 导入完整运动数据
pnpm run import:exercises-full /path/to/exercises.csv
# 使用示例数据
pnpm run import:exercises-full ./data/sample-exercises.csv
扩展数据库 :可以使用 ChatGPT 等工具生成更多运动数据,提示词模板见 ./scripts/import-exercises-with-attributes.prompt.md。
部署与自托管
Docker 部署:
bash
# 构建镜像
docker build -t yourusername/workout-cool .
# 运行容器
docker run -p 3000:3000 --env-file .env.production yourusername/workout-cool
Docker Compose:
bash
# 更新 DATABASE_URL 中的 host 为 postgres
# DATABASE_URL=postgresql://username:password@postgres:5432/workout_cool
docker compose up -d
手动部署:
bash
# 构建应用
pnpm build
# 运行数据库迁移
export DATABASE_URL="your-production-db-url"
npx prisma migrate deploy
# 启动生产服务器
pnpm start
详细自托管指南见项目文档。
项目地址与资源
官方资源
- 🌟 GitHub : github.com/Snouzy/work...
- 🌐 官网 : workout.cool
- 💬 Discord : Discord 社区
- 🐛 Issues : GitHub Issues
- 📚 文档 : README、Contributing Guide、Self-hosting Guide
相关资源
- Feature-Sliced Design : FSD 文档
- Next.js : Next.js 文档
- Prisma : Prisma 文档
- Better Auth : Better Auth 文档
适用人群
- 健身爱好者:需要管理训练计划和追踪进度
- 健身教练:需要为学员创建和管理训练计划
- 开发者:希望基于此项目构建健身应用
- 团队/组织:需要自托管的健身管理平台
- 学习者:想学习 Next.js、FSD 架构、Prisma 等现代技术栈
学习价值:
- ✅ Feature-Sliced Design 在 Next.js 项目中的实践
- ✅ Prisma ORM 的使用和数据库迁移
- ✅ Next.js App Router 和 Server Actions
- ✅ 多语言支持的实现
- ✅ Docker 部署和自托管配置
- ✅ 完整的健身应用开发流程
欢迎来我中的个人主页找到更多有用的知识和有趣的产品