codee-sh/payload-training-app
GitHub: codee-sh/payload-training-app
基于 Payload CMS 和 Next.js 构建的开源健身教练管理应用,让教练在管理后台制定训练计划并分配给客户,客户通过移动端 Web 界面逐组记录训练数据。
Stars: 5 | Forks: 0
# 训练应用
一个面向教练的管理后台和面向客户的训练追踪应用,使用 Payload CMS 和 Next.js 构建。教练可以在管理面板中制定训练计划;客户则通过移动端友好的 Web 界面记录他们的训练组数。
## 功能介绍
**教练(管理面板)** — 创建计划,将其分配给客户,详细定义训练结构,直至包含目标组数和追踪参数的单个训练动作行。
**客户(Web 应用)** — 登录后查看他们的当前计划,按单次训练逐步完成锻炼,并记录每一组的数据(次数、重量、RIR、时间等)。
## 导航
- [数据模型](#data-model)
- [技术栈](#tech-stack)
- [入门指南](#getting-started)
- [项目结构](#project-structure)
- [核心脚本](#key-scripts)
- [开发指南](#development)
- [截图](#screenshots)
## 数据模型
```
Plan
└── Microcycle
└── Workout
└── WorkoutGroup (e.g. "A1/A2 superset")
└── WorkoutExerciseRow (exercise + tracking config)
├── SetLog (per-set: reps, weight, RIR…)
└── RoundLog (per-round: time, distance…)
```
训练记录通过 `WorkoutLog` 按单次会话进行追踪,它会将客户与特定日期的特定训练关联起来。
## 技术栈
| 层级 | 技术 |
|---|---|
| 框架 | Next.js 15 (App Router) |
| CMS / 身份验证 | Payload CMS 3 |
| 数据库 | PostgreSQL (`@payloadcms/db-postgres`) |
| 样式 | Tailwind CSS |
| 国际化 (i18n) | next-intl (波兰语 / 英语) |
| 表单 | react-hook-form |
| 图标 | lucide-react |
## 入门指南
### 环境要求
- Node.js ≥ 24
- Yarn 4 (`corepack enable`)
- PostgreSQL 数据库
### 初始设置
```
git clone
cd training-app
yarn install
cp .env.example .env
```
编辑 `.env`:
```
DATABASE_URL=postgresql://user:password@localhost:5432/training_app
PAYLOAD_SECRET=your-long-random-secret-here
```
运行数据库迁移:
```
yarn payload migrate
```
### 运行
```
yarn dev
```
- 应用端:`http://localhost:3000/pl`
- 管理面板:`http://localhost:3000/admin`
### 首次配置
1. 打开 `/admin` 并创建首个用户账户——该账户将成为超级管理员
2. (可选)填充演示数据:`yarn seed`
3. 为每位运动员创建一个 **Client**(客户)记录
4. 构建 **Plan**(计划),依次关联 microcycle(微周期)→ workouts(训练)→ exercise rows(动作行)
5. 客户使用在管理面板中设置的邮箱和密码,在 `/pl` 路径下登录
## 项目结构
```
src/
├── access/ # Shared access control functions (isAdmin, isAuthenticated…)
├── app/
│ ├── [locale]/(frontend)/ # Client-facing app (login, workout tracker)
│ └── (payload)/ # Payload admin routes and API
├── collections/ # Payload collection configs (one folder per collection)
│ ├── clients/
│ ├── exercises/
│ ├── plans/
│ ├── microcycles/
│ ├── workouts/
│ ├── workout-groups/
│ ├── workout-exercise-rows/
│ ├── workout-logs/
│ ├── set-logs/
│ ├── round-logs/
│ ├── media/
│ └── users/
├── components/
│ ├── common/ # App-wide UI (logout button…)
│ ├── ui/ # Primitive components (button, input, surface…)
│ └── workout/ # Workout tracker components
├── data/ # Static/seed data
├── i18n/ # next-intl routing and request config
├── lib/ # Shared utilities and SDK client
├── loaders/ # Server-side data fetching functions
├── migrations/ # Payload database migrations
├── scripts/ # One-off CLI scripts (seed, import-plan…)
├── types/ # Shared TypeScript types
├── middleware.ts
├── payload-types.ts # Auto-generated — do not edit manually
└── payload.config.ts
.ai/
└── skills/ # AI assistant skill definitions
```
## 核心脚本
| 脚本 | 描述 |
|---|---|
| `yarn dev` | 启动开发服务器 |
| `yarn build` | 生产环境构建 |
| `yarn start` | 启动生产服务器 |
| `yarn payload migrate` | 执行待处理的数据库迁移 |
| `yarn generate:types` | 根据集合配置重新生成 `payload-types.ts` |
| `yarn generate:importmap` | 重新生成 Payload 管理面板的 import map(添加自定义视图后运行) |
| `yarn seed` | 为数据库填充演示数据 |
| `yarn seed:export` | 将当前数据库状态导出为 seed 文件 |
| `yarn lint` | 运行 ESLint |
| `yarn install-skills` | 将 `.ai/skills/` 链接到 `.claude/` 和 `.codex/` |
## 开发指南
### 添加集合
请遵循 `.ai/skills/payload-build-collections` 的规范——每个集合都存放在 `src/collections/{kebab-case}/index.ts` 中,并在 `src/collections/index.ts` 中进行注册。
更改集合配置后,请重新生成类型:
```
yarn generate:types
```
### 添加管理面板视图或自定义字段 UI
请遵循 `.ai/skills/payload-build-modules`。注册新的组件路径后,请运行:
```
yarn generate:importmap
```
### AI 技能
本项目使用技能文件来进行 AI 辅助开发。若要将它们安装到 Claude Code 和 Codex 中:
```
yarn install-skills
```
技能文件位于 `.ai/skills/` 目录下,涵盖:Payload 模式、集合脚手架、管理模块结构、UI 文案以及规范文档编写。
## 截图
标签:IPv6支持, Payload CMS, PostgreSQL, 健身管理, 内容管理系统, 测试用例, 移动端适配, 自动化攻击