一天一个开源项目(第41篇):Workout.cool - 现代化开源健身教练平台,训练计划与进度追踪

引言

"Modern fitness coaching platform with comprehensive exercise database."

这是「一天一个开源项目」系列的第 41 篇文章。今天介绍的项目是 Workout.coolGitHub)。

想找一个开源、可自托管、功能完整的健身管理平台,能创建训练计划、跟踪进度、浏览运动数据库,但市面上的方案要么功能单一、要么已停止维护?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.jsTypeScript 的基本使用
  • 了解 Docker 的基本操作(可选)
  • 对健身/训练计划有基本概念(可选)

项目背景

项目简介

Workout.cool 是一个现代化的开源健身教练平台,允许用户创建训练计划、跟踪进度,并访问包含详细说明和视频演示的全面运动数据库。

项目背景故事

作者是原 workout.lol 项目的主要贡献者。原项目因运动视频授权成本过高、合作伙伴问题等原因被出售,新所有者接手后也因同样问题放弃维护。作者尝试联系新所有者 9 个月无果后,决定重新创建一个更现代、更可靠、更易维护 的版本,即 Workout.cool

解决的核心问题

  • 开源健身平台缺乏完整功能(训练计划 + 进度追踪 + 数据库)
  • 现有项目维护不善或被放弃
  • 需要可自托管、无商业限制的健身管理工具
  • 需要多语言支持以适应全球用户

面向的用户

  • 个人健身爱好者,需要管理自己的训练计划与进度
  • 健身教练,需要为学员创建和管理训练计划
  • 开发者,希望基于此项目构建自己的健身应用
  • 团队,需要自托管的健身管理平台

作者/团队介绍

  • 作者SnouzyGitHub
  • 背景:原 workout.lol 项目的主要贡献者,因原项目被放弃而创建 Workout.cool
  • 理念:为开源健身社区提供可靠、现代、易维护的平台

项目数据

  • GitHub Stars: 约 7.1k
  • 🍴 Forks: 约 549
  • 📦 版本: v1.3.2(持续更新中,412+ commits)
  • 📄 License: MIT(完全开源,自由使用)
  • 🌐 官网 : workout.cool
  • 💬 社区 : DiscordProduct 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 的核心作用是:提供一个完整的健身管理平台,包括:

  1. 训练计划创建:创建和管理个性化的训练计划
  2. 进度追踪:记录训练历史,追踪进度和统计数据
  3. 运动数据库:访问包含详细说明、视频演示的全面运动数据库
  4. 多语言支持:支持 8+ 种语言,适应全球用户
  5. 数据导入:支持 CSV 批量导入运动数据,扩展数据库

使用场景

  1. 个人健身管理

    • 创建个人训练计划,记录每次训练,追踪力量、耐力等指标变化
  2. 教练管理学员

    • 教练为学员创建训练计划,学员记录完成情况,教练查看进度
  3. 团队健身挑战

    • 团队共享训练计划,成员记录完成情况,查看排行榜和统计
  4. 健身应用开发

    • 作为基础平台,二次开发定制化的健身应用
  5. 自托管健身平台

    • 企业或组织自托管,保护用户数据隐私

快速开始

环境要求: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

核心特性

  1. 训练计划管理

    • 创建、编辑、删除训练计划
    • 支持多天计划、循环计划
    • 计划模板和自定义计划
  2. 进度追踪

    • 记录每次训练的完成情况
    • 追踪重量、次数、组数、时长等指标
    • 可视化进度图表和统计
  3. 运动数据库

    • 包含大量运动项目,每个运动包含:
      • 名称(多语言)
      • 详细说明和介绍
      • 视频演示链接
      • 图片预览
      • 运动类型和主要肌肉群
    • 支持搜索、筛选、分类浏览
  4. 数据导入

    • CSV 格式批量导入运动数据
    • 支持完整属性(类型、肌肉群、视频链接等)
    • 提供示例数据和导入脚本
  5. 多语言支持

    • 支持 8+ 种语言:中文、英文、日文、韩文、法文、德文、西班牙文、葡萄牙文、俄文
    • 界面和内容均可本地化
  6. 现代化 UI

    • 基于 Tailwind CSS 和 Radix UI
    • 响应式设计,支持移动端
    • 使用 shadcn/ui 组件库
  7. Feature-Sliced Design

    • 清晰的代码组织结构
    • 功能模块化,易于扩展和维护
    • 符合现代前端架构最佳实践
  8. 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、主题

架构原则

  • 功能驱动:每个功能独立且可复用
  • 清晰的领域隔离sharedentitiesfeatureswidgetsapp
  • 一致性:业务逻辑、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

详细自托管指南见项目文档。


项目地址与资源

官方资源

相关资源

适用人群

  • 健身爱好者:需要管理训练计划和追踪进度
  • 健身教练:需要为学员创建和管理训练计划
  • 开发者:希望基于此项目构建健身应用
  • 团队/组织:需要自托管的健身管理平台
  • 学习者:想学习 Next.js、FSD 架构、Prisma 等现代技术栈

学习价值

  • ✅ Feature-Sliced Design 在 Next.js 项目中的实践
  • ✅ Prisma ORM 的使用和数据库迁移
  • ✅ Next.js App Router 和 Server Actions
  • ✅ 多语言支持的实现
  • ✅ Docker 部署和自托管配置
  • ✅ 完整的健身应用开发流程

欢迎来我中的个人主页找到更多有用的知识和有趣的产品

相关推荐
南果梨5 小时前
OpenClaw 完整教程!从安装到使用(官方脚本版)
前端·git·开源
天朝八阿哥8 小时前
使用Docker+vscode搭建离线的go开发调试环境
后端·docker·visual studio code
IvorySQL8 小时前
PostgreSQL 技术日报 (3月4日)|硬核干货 + 内核暗流一网打尽
数据库·postgresql·开源
碳基沙盒12 小时前
当赛博皇上给Ai设立三省六部
开源
冬奇Lab1 天前
一天一个开源项目(第40篇):copyparty - 单文件便携文件服务器,断点续传/去重/多协议/媒体索引
开源·资讯
运维老王1 天前
用 Python 写一个自动化部署脚本(完整代码)
开源
聚客AI1 天前
🎉OpenClaw深度解析:多智能体协同的三种模式、四大必装技能与自动化运维秘籍
人工智能·开源·agent
IvorySQL1 天前
双星闪耀温哥华:IvorySQL 社区两项议题入选 PGConf.dev 2026
数据库·postgresql·开源
哈基咪怎么可能是AI1 天前
OpenClaw 插件系统:如何打造全能私人助理 --OpenClaw源码系列第2期
开源·ai编程